照片统计页面接口调试完成
This commit is contained in:
parent
0034ac44f1
commit
c6ecf0c761
|
|
@ -0,0 +1 @@
|
|||
VITE_API_BASE_URL = /api
|
||||
|
|
@ -0,0 +1 @@
|
|||
VITE_API_BASE_URL = http://localhost:3000/api
|
||||
|
|
@ -4,10 +4,16 @@
|
|||
<view class="title"> 照片分类 </view>
|
||||
<view>
|
||||
<up-grid :border="false" col="5">
|
||||
<up-grid-item v-for="(icon, index) in iconList" :key="index">
|
||||
<up-grid-item
|
||||
:key="index"
|
||||
v-for="(icon, index) in iconList"
|
||||
@tap="onSearchByClass(icon.imgType)"
|
||||
>
|
||||
<up-image width="40" height="40" :src="icon.iconUrl" />
|
||||
<text class="grid-text">{{ icon.title }}</text>
|
||||
<text class="count">5100张</text>
|
||||
<text class="count">
|
||||
{{ formatCustomNumber(props.imgCount[icon.imgNum]) }}张
|
||||
</text>
|
||||
</up-grid-item>
|
||||
</up-grid>
|
||||
</view>
|
||||
|
|
@ -21,11 +27,27 @@ import icon_2 from '@/static/image/home_2.png'
|
|||
import icon_3 from '@/static/image/home_3.png'
|
||||
import icon_4 from '@/static/image/home_4.png'
|
||||
import icon_5 from '@/static/image/home_5.png'
|
||||
import { formatCustomNumber } from '@/utils/index.js'
|
||||
|
||||
const emits = defineEmits(['handleGetImgListByImgType'])
|
||||
const props = defineProps({
|
||||
totalCount: {
|
||||
type: Number,
|
||||
default: () => 0,
|
||||
},
|
||||
imgCount: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {
|
||||
totalNum: 0, //总照片数
|
||||
safetyVioNum: 0, // 安全违章
|
||||
safetyMeasNum: 0, // 安全措施落实
|
||||
qualityInsNum: 0, // 质量检查
|
||||
coordinatedPhotoNum: 0, // 协调照片
|
||||
importIssuesAndPublicityNum: 0, // 重要事项及宣传类
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const iconList = ref([
|
||||
|
|
@ -33,28 +55,43 @@ const iconList = ref([
|
|||
jumpPath: '/pages/safetyViolations/index',
|
||||
title: '安全违章',
|
||||
iconUrl: icon_1,
|
||||
imgNum: 'safetyVioNum',
|
||||
imgType: 1,
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/qualityInspection/index',
|
||||
title: '质量检查',
|
||||
iconUrl: icon_2,
|
||||
imgNum: 'qualityInsNum',
|
||||
imgType: 2,
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/safetyMeasure/index',
|
||||
title: '安全措施',
|
||||
iconUrl: icon_3,
|
||||
imgNum: 'safetyMeasNum',
|
||||
imgType: 3,
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/coordinatePhotos/index',
|
||||
title: '协调照片',
|
||||
iconUrl: icon_4,
|
||||
imgNum: 'coordinatedPhotoNum',
|
||||
imgType: 4,
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/importantMatters/index',
|
||||
title: '重要事项',
|
||||
iconUrl: icon_5,
|
||||
imgNum: 'importIssuesAndPublicityNum',
|
||||
imgType: 5,
|
||||
},
|
||||
])
|
||||
|
||||
// 根据图标类型查询
|
||||
const onSearchByClass = (type) => {
|
||||
emits('handleGetImgListByImgType', type)
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
|||
|
|
@ -2,12 +2,12 @@
|
|||
<!-- 最近上传 -->
|
||||
<view class="photo-class">
|
||||
<view class="title">
|
||||
<view>最近上传</view>
|
||||
<view>我的收藏</view>
|
||||
<view @tap="onHandleLastUpload">最近上传</view>
|
||||
<view @tap="onHandleMyCollect">我的收藏</view>
|
||||
</view>
|
||||
<view>
|
||||
<up-grid :border="false" col="2">
|
||||
<up-grid-item v-for="(icon, index) in iconList" :key="index">
|
||||
<up-grid-item v-for="(icon, index) in props?.imgList" :key="index">
|
||||
<!-- <up-image width="40" height="40" :src="icon.iconUrl" />
|
||||
<text class="grid-text">{{ icon.title }}</text>
|
||||
<text class="count">5100张</text> -->
|
||||
|
|
@ -16,22 +16,22 @@
|
|||
<up-image
|
||||
width="100%"
|
||||
height="120"
|
||||
:src="icon.iconUrl"
|
||||
@tap="onHandleImage(icon.iconUrl)"
|
||||
:src="icon.imgUrl"
|
||||
@tap="onHandleImage(icon.imgUrl)"
|
||||
/>
|
||||
<view class="collect">
|
||||
<view>2024-02-06</view>
|
||||
<view>{{ icon.uploadTime }}</view>
|
||||
<view @tap="onHandleCollect(icon)">
|
||||
<up-icon
|
||||
size="18"
|
||||
:color="icon.collect ? '#f56c6c' : '#999'"
|
||||
:name="icon.collect ? 'heart-fill' : 'heart'"
|
||||
:color="icon.collectStatus == 1 ? '#f56c6c' : '#999'"
|
||||
:name="icon.collectStatus == 1 ? 'heart-fill' : 'heart'"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="photo-type" :style="setBackgroundColor(icon)">
|
||||
{{ icon.title }}
|
||||
<view class="photo-type" :style="setBackgroundColor(icon.uploadType)">
|
||||
{{ imgType[icon.uploadType] }}
|
||||
</view>
|
||||
</view>
|
||||
</up-grid-item>
|
||||
|
|
@ -49,111 +49,95 @@
|
|||
</view>
|
||||
</view>
|
||||
</up-popup>
|
||||
|
||||
<!-- 退出提示弹框 -->
|
||||
<up-modal
|
||||
title="温馨提示"
|
||||
:show="showModalCollect"
|
||||
:showCancelButton="true"
|
||||
@cancel="onCancelCollect"
|
||||
@confirm="onConfirmCollect"
|
||||
:content="collectContent"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { computed, ref } from 'vue'
|
||||
import icon_1 from '@/static/image/home_1.png'
|
||||
import icon_2 from '@/static/image/home_2.png'
|
||||
import icon_3 from '@/static/image/home_3.png'
|
||||
import icon_4 from '@/static/image/home_4.png'
|
||||
import icon_5 from '@/static/image/home_5.png'
|
||||
import { computed, ref, reactive } from 'vue'
|
||||
import { useMemberStore } from '@/stores'
|
||||
import { editCollectTypeApi } from '@/services/comprehensiveQuery.js'
|
||||
|
||||
const memberStore = useMemberStore()
|
||||
const token = memberStore.token
|
||||
const showModalCollect = ref(false)
|
||||
const collectContent = ref('')
|
||||
|
||||
const collectEditParams = ref({
|
||||
id: '',
|
||||
collectType: '',
|
||||
})
|
||||
const props = defineProps({
|
||||
totalCount: {
|
||||
type: Number,
|
||||
default: () => 0,
|
||||
imgList: {
|
||||
type: Array,
|
||||
default: () => [],
|
||||
},
|
||||
})
|
||||
|
||||
const imgType = reactive({
|
||||
1: '安全违章',
|
||||
2: '质量检查',
|
||||
3: '安全措施',
|
||||
4: '协调照片',
|
||||
5: '重要事项',
|
||||
})
|
||||
|
||||
const emits = defineEmits(['handleMyCollect', 'handleLastUpload', 'handleGetImgList'])
|
||||
|
||||
const showImg = ref(false)
|
||||
const showImgUrl = ref('')
|
||||
|
||||
const iconList = ref([
|
||||
{
|
||||
jumpPath: '/pages/safetyViolations/index',
|
||||
title: '安全违章',
|
||||
collect: false,
|
||||
type: 1,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/qualityInspection/index',
|
||||
title: '质量检查',
|
||||
type: 2,
|
||||
collect: false,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/safetyMeasure/index',
|
||||
title: '安全措施',
|
||||
collect: false,
|
||||
type: 3,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/coordinatePhotos/index',
|
||||
title: '协调照片',
|
||||
collect: true,
|
||||
type: 4,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/importantMatters/index',
|
||||
title: '重要事项',
|
||||
collect: true,
|
||||
type: 5,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/safetyMeasure/index',
|
||||
title: '安全措施',
|
||||
collect: false,
|
||||
type: 3,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/coordinatePhotos/index',
|
||||
title: '协调照片',
|
||||
collect: true,
|
||||
type: 4,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
{
|
||||
jumpPath: '/pages/importantMatters/index',
|
||||
title: '重要事项',
|
||||
collect: true,
|
||||
type: 5,
|
||||
iconUrl:
|
||||
'https://fc1tn.baidu.com/it/u=3320401609,696579967&fm=202&src=780&ernie_sim_online&mola=new&crop=v1',
|
||||
},
|
||||
])
|
||||
// 收藏与取消收藏
|
||||
const onHandleCollect = (icon) => {
|
||||
icon.collect = !icon.collect
|
||||
console.log('取消收藏')
|
||||
if (icon.collectStatus == 0) {
|
||||
collectContent.value = '是否确认把该图片加入我的收藏?'
|
||||
collectEditParams.value.collectType = 1
|
||||
} else {
|
||||
collectContent.value = '是否确认取消收藏?'
|
||||
collectEditParams.value.collectType = 2
|
||||
}
|
||||
collectEditParams.value.id = icon.id
|
||||
showModalCollect.value = true
|
||||
}
|
||||
|
||||
// 取消按钮
|
||||
const onCancelCollect = () => {
|
||||
showModalCollect.value = false
|
||||
}
|
||||
// 确定按钮
|
||||
const onConfirmCollect = async () => {
|
||||
const res = await editCollectTypeApi(collectEditParams.value)
|
||||
if (res.code === 200) {
|
||||
uni.$u.toast('操作成功')
|
||||
emits('handleGetImgList')
|
||||
showModalCollect.value = false
|
||||
} else {
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
}
|
||||
|
||||
// 点击图片
|
||||
const onHandleImage = (url) => {
|
||||
console.log('图片点击了')
|
||||
console.log('图片点击了', url)
|
||||
showImgUrl.value = url
|
||||
showImg.value = true
|
||||
}
|
||||
|
||||
// 定义样式
|
||||
const setBackgroundColor = (icon) => {
|
||||
if (icon?.type === 1) return { backgroundColor: '#f56c6c' }
|
||||
if (icon?.type === 2) return { backgroundColor: '#19be6b' }
|
||||
if (icon?.type === 3) return { backgroundColor: '#ff9900' }
|
||||
if (icon?.type === 4) return { backgroundColor: '#f56ccf' }
|
||||
if (icon?.type === 5) return { backgroundColor: '#00bfbf' }
|
||||
const setBackgroundColor = (type) => {
|
||||
if (type == 1) return { backgroundColor: '#f56c6c' }
|
||||
if (type == 2) return { backgroundColor: '#19be6b' }
|
||||
if (type == 3) return { backgroundColor: '#ff9900' }
|
||||
if (type == 4) return { backgroundColor: '#f56ccf' }
|
||||
if (type == 5) return { backgroundColor: '#00bfbf' }
|
||||
}
|
||||
|
||||
// 原图下载
|
||||
|
|
@ -164,6 +148,15 @@ const onHandleYtUpload = () => {
|
|||
const onHandleSyUpload = () => {
|
||||
showImg.value = false
|
||||
}
|
||||
|
||||
// 点击我的收藏
|
||||
const onHandleMyCollect = () => {
|
||||
emits('handleMyCollect')
|
||||
}
|
||||
// 点击最近上传
|
||||
const onHandleLastUpload = () => {
|
||||
emits('handleLastUpload')
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
<!-- 照片总数 -->
|
||||
<view class="total-count">
|
||||
<view>
|
||||
<view class="count">21,635,54 张</view>
|
||||
<view class="count">{{ formatCustomNumber(totalCount) }} 张</view>
|
||||
<view class="count-text">照片总数</view>
|
||||
</view>
|
||||
<view>
|
||||
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
<script setup>
|
||||
import imgSrc from '@/static/image/photo_total.png'
|
||||
import { formatCustomNumber } from '@/utils/index.js'
|
||||
const props = defineProps({
|
||||
totalCount: {
|
||||
type: Number,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
<!-- 筛选框 -->
|
||||
<view class="filter-box">
|
||||
<up-input placeholder="输入标题" v-model="photoSearchValue">
|
||||
<up-input placeholder="输入标题" v-model="outerKeyWord" clearable>
|
||||
<template #prefix>
|
||||
<up-icon name="search" size="24" @tap="onSearchPhoto" />
|
||||
</template>
|
||||
|
|
@ -17,9 +17,17 @@
|
|||
</view>
|
||||
|
||||
<view class="photo-container">
|
||||
<PhotoTotal />
|
||||
<PhotoClass />
|
||||
<PhotoRecent />
|
||||
<PhotoTotal :totalCount="imgCount?.totalNum" />
|
||||
<PhotoClass
|
||||
:imgCount="imgCount"
|
||||
@handleGetImgListByImgType="handleGetImgListByImgType"
|
||||
/>
|
||||
<PhotoRecent
|
||||
:imgList="imgList"
|
||||
@handleMyCollect="handleMyCollect"
|
||||
@handleLastUpload="handleLastUpload"
|
||||
@handleGetImgList="handleGetImgList"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<view class="loading-text">
|
||||
|
|
@ -47,101 +55,117 @@
|
|||
labelWidth="100"
|
||||
labelAlign="center"
|
||||
labelPosition="left"
|
||||
ref="searchFormRef"
|
||||
style="padding-right: 20rpx"
|
||||
:style="{ paddingBottom: safeAreaInsets?.top + 50 + 'px' }"
|
||||
>
|
||||
<TitleTipModal :TitleTip="`通用信息查询`" />
|
||||
<up-form-item prop="projectName" label="搜索查询">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-form-item label="搜索查询">
|
||||
<up-input placeholder="请输入" v-model="innerKeyWord" clearable />
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="开始日期">
|
||||
<up-input placeholder="请选择">
|
||||
<up-form-item prop="startTime" label="开始日期">
|
||||
<up-input placeholder="请选择" v-model="queryParams.startTime" readonly>
|
||||
<template #prefix>
|
||||
<up-icon name="calendar" size="16" />
|
||||
<up-icon name="calendar" size="16" @tap="onSelectDate(1)" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="结束日期">
|
||||
<up-input placeholder="请选择">
|
||||
<up-form-item prop="endTime" label="结束日期">
|
||||
<up-input placeholder="请选择" v-model="queryParams.endTime" readonly>
|
||||
<template #prefix>
|
||||
<up-icon name="calendar" size="16" />
|
||||
<up-icon size="16" name="calendar" @tap="onSelectDate(2)" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="工程">
|
||||
<up-input placeholder="请选择工程名称">
|
||||
<up-form-item prop="proName" label="工程">
|
||||
<up-input
|
||||
readonly
|
||||
clearable
|
||||
placeholder="请选择工程名称"
|
||||
v-model="queryParams.proName"
|
||||
>
|
||||
<template #suffix>
|
||||
<up-icon name="arrow-down" size="16" />
|
||||
<up-icon name="arrow-down" size="16" @tap="onSelectProject" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="专业">
|
||||
<up-input placeholder="请选择专业">
|
||||
<up-form-item prop="majorName" label="专业">
|
||||
<up-input
|
||||
readonly
|
||||
clearable
|
||||
placeholder="请选择专业"
|
||||
v-model="queryParams.majorName"
|
||||
>
|
||||
<template #suffix>
|
||||
<up-icon name="arrow-down" size="16" />
|
||||
<up-icon name="arrow-down" size="16" @tap="onSelectMajor" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="工序">
|
||||
<up-input placeholder="请选择工序">
|
||||
<up-form-item prop="gxName" label="工序">
|
||||
<up-input
|
||||
readonly
|
||||
clearable
|
||||
placeholder="请选择工序"
|
||||
v-model="queryParams.gxName"
|
||||
>
|
||||
<template #suffix>
|
||||
<up-icon name="arrow-down" size="16" />
|
||||
<up-icon name="arrow-down" size="16" @tap="onSelectProcedure" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`安全违章照片`" />
|
||||
<up-form-item prop="projectName" label="类型">
|
||||
<up-checkbox-group placement="row">
|
||||
<up-checkbox activeColor="red" label="违章照片" />
|
||||
<up-checkbox activeColor="green" label="整改照片" />
|
||||
<up-checkbox-group placement="row" v-model="queryParams.photoType_1">
|
||||
<up-checkbox label="违章照片" name="1" />
|
||||
<up-checkbox label="整改照片" name="2" />
|
||||
</up-checkbox-group>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="违章地点">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-form-item prop="vioPlace" label="违章地点">
|
||||
<up-input placeholder="请输入" v-model="queryParams.vioPlace" />
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="违章描述">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-form-item prop="vioDesc" label="违章描述">
|
||||
<up-input placeholder="请输入" v-model="queryParams.vioDesc" />
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="违章说明">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-form-item prop="rectDesc" label="整改说明">
|
||||
<up-input placeholder="请输入" v-model="queryParams.rectDesc" />
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`质量检查照片`" />
|
||||
<up-form-item prop="projectName" label="类型">
|
||||
<up-checkbox-group placement="row">
|
||||
<up-checkbox activeColor="red" label="缺陷照片" />
|
||||
<up-checkbox activeColor="green" label="整改照片" />
|
||||
<up-checkbox-group placement="row" v-model="queryParams.photoType_2">
|
||||
<up-checkbox label="缺陷照片" name="3" />
|
||||
<up-checkbox label="整改照片" name="4" />
|
||||
</up-checkbox-group>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="检查地点">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-input placeholder="请输入" v-model="queryParams.checkPlace2" />
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="检查描述">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-input placeholder="请输入" v-model="queryParams.checkDesc2" />
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="整改说明">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-input placeholder="请输入" v-model="queryParams.rectDesc2" />
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`安全措施落实照片`" />
|
||||
<up-form-item prop="projectName" label="检查地点">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-input placeholder="请输入" v-model="queryParams.checkDesc3" />
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="检查描述">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-input placeholder="请输入" v-model="queryParams.rectDesc3" />
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`协调照片`" />
|
||||
<up-form-item prop="projectName" label="类型">
|
||||
<up-checkbox-group placement="row">
|
||||
<up-checkbox activeColor="red" label="建设前" />
|
||||
<up-checkbox activeColor="green" label="建设中" />
|
||||
<up-checkbox activeColor="green" label="恢复后" />
|
||||
<up-checkbox-group placement="row" v-model="queryParams.photoType_3">
|
||||
<up-checkbox label="建设前" name="6" />
|
||||
<up-checkbox label="建设中" name="7" />
|
||||
<up-checkbox label="恢复后" name="8" />
|
||||
</up-checkbox-group>
|
||||
</up-form-item>
|
||||
<up-form-item prop="projectName" label="建设地点">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-form-item prop="buildPlace" label="建设地点">
|
||||
<up-input placeholder="请输入" v-model="queryParams.buildPlace" />
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`重要事项及宣传照片`" />
|
||||
<up-form-item prop="projectName" label="标题">
|
||||
<up-input placeholder="请输入" />
|
||||
<up-form-item prop="title" label="标题">
|
||||
<up-input v-model="queryParams.title" placeholder="请输入" />
|
||||
</up-form-item>
|
||||
</up-form>
|
||||
</up-list>
|
||||
|
|
@ -165,6 +189,41 @@
|
|||
</view>
|
||||
</view>
|
||||
</up-popup>
|
||||
|
||||
<!-- 年月日选择器 -->
|
||||
<up-datetime-picker
|
||||
mode="date"
|
||||
:show="dateShow"
|
||||
v-model="dateValue"
|
||||
:formatter="formatter"
|
||||
@confirm="onConfirmDate"
|
||||
@cancel="dateShow = !dateShow"
|
||||
/>
|
||||
|
||||
<!-- 工程选择器 -->
|
||||
<up-picker
|
||||
keyName="name"
|
||||
:show="projectShow"
|
||||
:columns="projectList"
|
||||
@confirm="onConfirmProject"
|
||||
@cancel="projectShow = !projectShow"
|
||||
/>
|
||||
<!-- 专业选择器 -->
|
||||
<up-picker
|
||||
keyName="name"
|
||||
:show="majorShow"
|
||||
:columns="majorList"
|
||||
@confirm="onConfirmMajor"
|
||||
@cancel="majorShow = !majorShow"
|
||||
/>
|
||||
<!-- 工序选择器 -->
|
||||
<up-picker
|
||||
keyName="name"
|
||||
:show="procedureShow"
|
||||
:columns="procedureList"
|
||||
@confirm="onConfirmProcedure"
|
||||
@cancel="procedureShow = !procedureShow"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
|
|
@ -173,44 +232,419 @@ import TitleTipModal from '@/components/TitleTipModal/index'
|
|||
import PhotoTotal from './components/photo-total.vue'
|
||||
import PhotoClass from './components/photo-class'
|
||||
import PhotoRecent from './components/photo-recent'
|
||||
import { ref } from 'vue'
|
||||
import { useMemberStore } from '@/stores'
|
||||
import { reactive, ref, computed, onMounted } from 'vue'
|
||||
import { getProcedureApi } from '@/services/common.js'
|
||||
import { useCommon } from '@/hooks/useCommon.js'
|
||||
import { debounce } from 'lodash-es' // 引入防抖函数
|
||||
import { getClassCountApi, getImgListApi } from '@/services/comprehensiveQuery.js'
|
||||
import { onLoad, onReachBottom, onPageScroll } from '@dcloudio/uni-app'
|
||||
|
||||
const scrollTop = ref(0)
|
||||
const finish = ref(true)
|
||||
const photoSearchValue = ref('')
|
||||
const rightPopupShow = ref(false)
|
||||
const { getProjectList, getMajorList } = useCommon()
|
||||
const { safeAreaInsets } = uni.getSystemInfoSync()
|
||||
const memberStore = useMemberStore()
|
||||
const token = memberStore?.token
|
||||
const baseURL = import.meta.env.VITE_API_BASE_URL // 获取当前的url地址
|
||||
const scrollTop = ref(0)
|
||||
const searchFormRef = ref(null)
|
||||
const outerKeyWord = ref('')
|
||||
const innerKeyWord = ref('')
|
||||
const rightPopupShow = ref(false)
|
||||
const total = ref(0)
|
||||
const dateShow = ref(false)
|
||||
const dateValue = ref(Date.now())
|
||||
const dateType = ref(1)
|
||||
const projectShow = ref(false)
|
||||
const majorShow = ref(false)
|
||||
const procedureShow = ref(false)
|
||||
|
||||
const projectList = reactive([])
|
||||
const majorList = reactive([])
|
||||
const procedureList = reactive([])
|
||||
|
||||
// 数量数据源
|
||||
const imgCount = reactive({
|
||||
totalNum: 0, //总照片数
|
||||
safetyVioNum: 0, // 安全违章
|
||||
safetyMeasNum: 0, // 安全措施落实
|
||||
qualityInsNum: 0, // 质量检查
|
||||
coordinatedPhotoNum: 0, // 协调照片
|
||||
importIssuesAndPublicityNum: 0, // 重要事项及宣传类
|
||||
})
|
||||
|
||||
// 图片列表数据源
|
||||
const imgList = ref([])
|
||||
|
||||
// 定义查询条件
|
||||
const queryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
queryType: '2', // 类型 1. 我的收藏 2. 最近上传
|
||||
searchType: '', // 1.标题查询 2.照片分类查询 3.高级筛选查询
|
||||
uploadType: '', // 图片类型
|
||||
keyWord: '', // 标题
|
||||
proId: '', // 工程
|
||||
proName: '', // 工程名称
|
||||
majorId: '', // 专业id
|
||||
majorName: '', // 专业名称
|
||||
gxId: '', // 工序id
|
||||
gxName: '', // 工序名称
|
||||
startTime: '', // 开始日期
|
||||
endTime: '', // 结束日期
|
||||
vioPlace: '', // 违章地点
|
||||
vioDesc: '', // 违章描述
|
||||
rectDesc: '', // 整改说明
|
||||
checkPlace2: '', // 检查地点
|
||||
checkDesc2: '', // 检查描述
|
||||
rectDesc2: '', // 整改说明
|
||||
checkDesc3: '', // 检查地点
|
||||
rectDesc3: '', // 检查描述
|
||||
buildPlace: '', // 建设地点
|
||||
title: '',
|
||||
photoType: [],
|
||||
photoType_1: [],
|
||||
photoType_2: [],
|
||||
photoType_3: [],
|
||||
})
|
||||
|
||||
// 输入框左侧搜索图标点击
|
||||
const onSearchPhoto = () => {
|
||||
console.log('onSearchPhoto')
|
||||
// console.log('onSearchPhoto')
|
||||
queryParams.value.uploadType = ''
|
||||
queryParams.value.searchType = 1
|
||||
queryParams.value.keyWord = outerKeyWord.value
|
||||
getImgListData(true)
|
||||
}
|
||||
|
||||
// 高级搜索
|
||||
const onHandleSeniorSearch = () => {
|
||||
console.log('高级搜索')
|
||||
rightPopupShow.value = true
|
||||
}
|
||||
|
||||
// 查询
|
||||
const onHandleSearch = () => {
|
||||
queryParams.value.searchType = 3
|
||||
queryParams.value.keyWord = innerKeyWord.value
|
||||
getImgListData(true)
|
||||
rightPopupShow.value = false
|
||||
resetForm()
|
||||
}
|
||||
|
||||
// 重置
|
||||
const onHandleReset = () => {
|
||||
rightPopupShow.value = false
|
||||
// rightPopupShow.value = false
|
||||
resetForm()
|
||||
}
|
||||
|
||||
onReachBottom(() => {
|
||||
console.log('滚动触底事件--')
|
||||
})
|
||||
// 滚动触底事件
|
||||
onReachBottom(
|
||||
debounce(() => {
|
||||
if (imgList.value.length < total.value) {
|
||||
queryParams.value.pageNum++
|
||||
getImgListData(false)
|
||||
}
|
||||
}, 1000),
|
||||
)
|
||||
|
||||
// 监听滚动事件 显示返回顶部小图标
|
||||
onPageScroll((e) => {
|
||||
scrollTop.value = e.scrollTop
|
||||
})
|
||||
|
||||
// 获取照片分类
|
||||
const getClassCountData = async () => {
|
||||
const res = await getClassCountApi({})
|
||||
console.log(
|
||||
'%c🔍 获取照片分类出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
if (res.code === 200) {
|
||||
Object.assign(imgCount, res.data)
|
||||
} else {
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
}
|
||||
getClassCountData()
|
||||
|
||||
// 获取照片列表
|
||||
const getImgListData = async (isTap = false) => {
|
||||
try {
|
||||
queryParams.value.photoType = [
|
||||
...queryParams.value.photoType_1,
|
||||
...queryParams.value.photoType_2,
|
||||
...queryParams.value.photoType_3,
|
||||
]
|
||||
|
||||
const {
|
||||
pageNum,
|
||||
pageSize,
|
||||
queryType, // 类型 1. 我的收藏 2. 最近上传
|
||||
searchType, // 1.标题查询 2.照片分类查询 3.高级筛选查询
|
||||
uploadType, // 图片类型
|
||||
keyWord, // 标题
|
||||
proId, // 工程
|
||||
majorId, // 专业id
|
||||
gxId, // 工序id
|
||||
startTime, // 开始日期
|
||||
endTime, // 结束日期
|
||||
vioPlace, // 违章地点
|
||||
vioDesc, // 违章描述
|
||||
rectDesc, // 整改说明
|
||||
checkPlace2, // 检查地点
|
||||
checkDesc2, // 检查描述
|
||||
rectDesc2, // 整改说明
|
||||
checkDesc3, // 检查地点
|
||||
rectDesc3, // 检查描述
|
||||
buildPlace, // 建设地点
|
||||
title,
|
||||
photoType,
|
||||
} = queryParams.value
|
||||
|
||||
const queryParamsNew = {
|
||||
pageNum,
|
||||
pageSize,
|
||||
queryType, // 类型 1. 我的收藏 2. 最近上传
|
||||
searchType, // 1.标题查询 2.照片分类查询 3.高级筛选查询
|
||||
uploadType, // 图片类型
|
||||
keyWord, // 标题
|
||||
proId, // 工程
|
||||
majorId, // 专业id
|
||||
gxId, // 工序id
|
||||
startTime, // 开始日期
|
||||
endTime, // 结束日期
|
||||
vioPlace, // 违章地点
|
||||
vioDesc, // 违章描述
|
||||
rectDesc, // 整改说明
|
||||
checkPlace2, // 检查地点
|
||||
checkDesc2, // 检查描述
|
||||
rectDesc2, // 整改说明
|
||||
checkDesc3, // 检查地点
|
||||
rectDesc3, // 检查描述
|
||||
buildPlace, // 建设地点
|
||||
title,
|
||||
photoType,
|
||||
}
|
||||
console.log(
|
||||
'%c🔍 获取照片列表入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
queryParamsNew,
|
||||
)
|
||||
|
||||
const res = await getImgListApi(queryParamsNew)
|
||||
// 更新总数
|
||||
total.value = res.data.total
|
||||
console.log(
|
||||
'%c🔍 获取照片列表出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
if (res.code === 200) {
|
||||
if (isTap) {
|
||||
// 点击搜索时,直接替换数据
|
||||
imgList.value = res?.data?.list || []
|
||||
// 重置页码
|
||||
queryParams.value.pageNum = 1
|
||||
} else {
|
||||
// 下拉加载时,追加数据
|
||||
if (res?.data && res?.data?.list?.length > 0) {
|
||||
imgList.value = [...imgList.value, ...res.data.list]
|
||||
}
|
||||
}
|
||||
|
||||
imgList.value.forEach((e) => {
|
||||
e.imgUrl = `${baseURL}/imgTool/files${e.compressFilePath}?token=${token}`
|
||||
})
|
||||
} else {
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
} catch (error) {
|
||||
// 发生错误时重置数据
|
||||
if (isTap) {
|
||||
imgList.value = []
|
||||
}
|
||||
}
|
||||
}
|
||||
getImgListData()
|
||||
|
||||
// 判断数据是否加载完毕
|
||||
const finish = computed(() => {
|
||||
if (total.value === imgList.value.length) return true
|
||||
})
|
||||
// 点击我的收藏
|
||||
const handleMyCollect = () => {
|
||||
queryParams.value.queryType = 1
|
||||
getImgListData(true)
|
||||
}
|
||||
// 点击最近上传
|
||||
const handleLastUpload = () => {
|
||||
queryParams.value.queryType = 2
|
||||
getImgListData(true)
|
||||
}
|
||||
|
||||
// 更新列表
|
||||
const handleGetImgList = () => {
|
||||
getImgListData(true)
|
||||
}
|
||||
|
||||
// 根据照片分类进行查询
|
||||
const handleGetImgListByImgType = (type) => {
|
||||
queryParams.value.uploadType = type
|
||||
queryParams.value.searchType = 2
|
||||
getImgListData(true)
|
||||
}
|
||||
|
||||
// 日期格式化
|
||||
const formatter = (type, value) => {
|
||||
if (type === 'year') {
|
||||
return `${value}年`
|
||||
}
|
||||
if (type === 'month') {
|
||||
return `${value}月`
|
||||
}
|
||||
if (type === 'day') {
|
||||
return `${value}日`
|
||||
}
|
||||
return value
|
||||
}
|
||||
|
||||
const onConfirmDate = () => {
|
||||
const formatDateValue = formatDate(dateValue.value)
|
||||
if (dateType.value === 1) {
|
||||
queryParams.value.startTime = formatDateValue
|
||||
}
|
||||
if (dateType.value === 2) {
|
||||
queryParams.value.endTime = formatDateValue
|
||||
}
|
||||
|
||||
// 校验时间有效性
|
||||
if (queryParams.value.startTime && queryParams.value.endTime) {
|
||||
const start = new Date(queryParams.value.startTime)
|
||||
const end = new Date(queryParams.value.endTime)
|
||||
|
||||
if (start > end) {
|
||||
uni.showToast({
|
||||
title: '结束时间不能早于开始时间',
|
||||
icon: 'none',
|
||||
})
|
||||
if (dateType.value === 1) {
|
||||
queryParams.value.endTime = formatDateValue
|
||||
} else {
|
||||
queryParams.value.startTime = formatDateValue
|
||||
}
|
||||
|
||||
return // 阻止关闭弹窗
|
||||
}
|
||||
}
|
||||
dateShow.value = false
|
||||
}
|
||||
|
||||
const formatDate = (timestamp) => {
|
||||
const date = new Date(timestamp)
|
||||
const year = date.getFullYear()
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0')
|
||||
const day = String(date.getDate()).padStart(2, '0')
|
||||
return `${year}-${month}-${day}`
|
||||
}
|
||||
|
||||
// 打开日期选择器
|
||||
const onSelectDate = (type) => {
|
||||
// type 为类型 1. 开始日期 2. 结束日期
|
||||
dateType.value = type
|
||||
dateShow.value = true
|
||||
}
|
||||
// 选择工程
|
||||
const onSelectProject = () => {
|
||||
projectShow.value = true
|
||||
}
|
||||
|
||||
// 工程选择
|
||||
const onConfirmProject = (item) => {
|
||||
queryParams.value.proName = item.value[0].name
|
||||
queryParams.value.proId = item.value[0].id
|
||||
projectShow.value = false
|
||||
}
|
||||
|
||||
// 选择专业
|
||||
const onSelectMajor = () => {
|
||||
majorShow.value = true
|
||||
}
|
||||
|
||||
// 专业确定
|
||||
const onConfirmMajor = (item) => {
|
||||
queryParams.value.majorName = item.value[0].name
|
||||
queryParams.value.majorId = item.value[0].id
|
||||
getProcedureData(item.value[0].id)
|
||||
majorShow.value = false
|
||||
}
|
||||
|
||||
// 选择工序
|
||||
const onSelectProcedure = () => {
|
||||
procedureShow.value = true
|
||||
}
|
||||
|
||||
// 工序确定
|
||||
const onConfirmProcedure = (item) => {
|
||||
queryParams.value.gxName = item.value[0].name
|
||||
queryParams.value.gxId = item.value[0].id
|
||||
procedureShow.value = false
|
||||
}
|
||||
|
||||
// 获取工序
|
||||
const getProcedureData = async (pid) => {
|
||||
console.log(
|
||||
'%c🔍 获取工序请求入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
'pid=' + pid,
|
||||
)
|
||||
const { data: res } = await getProcedureApi({ pid })
|
||||
console.log(
|
||||
'%c🔍 获取工序请求出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
procedureList.push(res)
|
||||
}
|
||||
|
||||
const resetForm = () => {
|
||||
innerKeyWord.value = ''
|
||||
Object.assign(queryParams.value, {
|
||||
proId: '', // 工程
|
||||
proName: '', // 工程名称
|
||||
majorId: '', // 专业id
|
||||
majorName: '', // 专业名称
|
||||
gxId: '', // 工序id
|
||||
gxName: '', // 工序名称
|
||||
startTime: '', // 开始日期
|
||||
endTime: '', // 结束日期
|
||||
vioPlace: '', // 违章地点
|
||||
vioDesc: '', // 违章描述
|
||||
rectDesc: '', // 整改说明
|
||||
checkPlace2: '', // 检查地点
|
||||
checkDesc2: '', // 检查描述
|
||||
rectDesc2: '', // 整改说明
|
||||
checkDesc3: '', // 检查地点
|
||||
rectDesc3: '', // 检查描述
|
||||
buildPlace: '', // 建设地点
|
||||
title: '',
|
||||
photoType: [],
|
||||
photoType_1: [],
|
||||
photoType_2: [],
|
||||
photoType_3: [],
|
||||
})
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
projectList.push(await getProjectList())
|
||||
majorList.push(await getMajorList())
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
|||
|
|
@ -10,30 +10,31 @@
|
|||
style="background-color: #fff; padding: 0 30rpx 20rpx"
|
||||
>
|
||||
<TitleTipModal :TitleTip="`项目信息`" />
|
||||
<up-form-item prop="projectName" label="项目名称" required>
|
||||
<up-form-item prop="proName" label="项目名称" required>
|
||||
<up-input
|
||||
readonly
|
||||
border="none"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择项目'"
|
||||
v-model="addAndEditModel.projectName"
|
||||
v-model="addAndEditModel.proName"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
<up-icon name="arrow-right" @tap="onSelectProject" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="examiner" label="建设地点">
|
||||
<up-form-item prop="buildPlace" label="建设地点">
|
||||
<up-input
|
||||
border="none"
|
||||
v-model="addAndEditModel.buildPlace"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入建设地点'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item prop="major" label="专业">
|
||||
<up-form-item prop="majorName" label="专业">
|
||||
<up-input
|
||||
border="none"
|
||||
readonly
|
||||
v-model="addAndEditModel.major"
|
||||
v-model="addAndEditModel.majorName"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择专业'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
|
|
@ -41,11 +42,11 @@
|
|||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="procedure" label="工序">
|
||||
<up-form-item prop="gxName" label="工序">
|
||||
<up-input
|
||||
border="none"
|
||||
readonly
|
||||
v-model="addAndEditModel.procedure"
|
||||
v-model="addAndEditModel.gxName"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择工序'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
|
|
@ -55,76 +56,97 @@
|
|||
</up-form-item>
|
||||
|
||||
<TitleTipModal :TitleTip="`建设前`" />
|
||||
<up-form-item prop="vrDescribe" label="建设前描述">
|
||||
<up-form-item prop="buildBeforeDesc" label="建设前描述">
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
v-model="addAndEditModel.vrDescribe"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.buildBeforeDesc"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入建设前描述'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item
|
||||
prop="vrImgList"
|
||||
prop="buildBeforeImgList"
|
||||
:label="props.addAndEditFormType == 3 ? '建设前照片' : '建设前照片(最多9张)'"
|
||||
>
|
||||
<up-upload
|
||||
name="1"
|
||||
multiple
|
||||
@delete="onDeletePicVrImgList"
|
||||
@afterRead="onAfterReadVrImgList"
|
||||
:fileList="addAndEditModel.vrImgList"
|
||||
:maxCount="props.addAndEditFormType == 3 ? 1 : 9"
|
||||
@delete="onDeletePicBuildBeforeImgList"
|
||||
@afterRead="onAfterReadBuildBeforeImgList"
|
||||
:deletable="props.addAndEditFormType != 3"
|
||||
:fileList="addAndEditModel.buildBeforeImgList"
|
||||
:maxCount="
|
||||
props.addAndEditFormType == 3 ? addAndEditModel.buildBeforeImgList.length : 9
|
||||
"
|
||||
/>
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`建设中`" />
|
||||
<up-form-item prop="vrDescribe" label="建设中描述">
|
||||
<up-form-item prop="buildUnderDesc" label="建设中描述">
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
v-model="addAndEditModel.vrDescribe"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.buildUnderDesc"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入建设中描述'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item
|
||||
prop="vrImgList"
|
||||
prop="buildUnderImgList"
|
||||
:label="props.addAndEditFormType == 3 ? '建设中照片' : '建设中照片(最多9张)'"
|
||||
>
|
||||
<up-upload
|
||||
name="1"
|
||||
multiple
|
||||
@delete="onDeletePicVrImgList"
|
||||
@afterRead="onAfterReadVrImgList"
|
||||
:fileList="addAndEditModel.vrImgList"
|
||||
:maxCount="props.addAndEditFormType == 3 ? 1 : 9"
|
||||
@delete="onDeletePicBuildUnderImgList"
|
||||
@afterRead="onAfterReadBuildUnderImgList"
|
||||
:fileList="addAndEditModel.buildUnderImgList"
|
||||
:deletable="props.addAndEditFormType != 3"
|
||||
:maxCount="
|
||||
props.addAndEditFormType == 3 ? addAndEditModel.buildUnderImgList.length : 9
|
||||
"
|
||||
/>
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`恢复后`" />
|
||||
<up-form-item prop="vrDescribe" label="恢复后描述">
|
||||
<up-form-item prop="buildAfterDesc" label="恢复后描述">
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
v-model="addAndEditModel.vrDescribe"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.buildAfterDesc"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入恢复后描述'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item
|
||||
prop="vrImgList"
|
||||
prop="buildAfterImgList"
|
||||
:label="props.addAndEditFormType == 3 ? '恢复后照片' : '恢复后照片(最多9张)'"
|
||||
>
|
||||
<up-upload
|
||||
name="1"
|
||||
multiple
|
||||
@delete="onDeletePicVrImgList"
|
||||
@afterRead="onAfterReadVrImgList"
|
||||
:fileList="addAndEditModel.vrImgList"
|
||||
:maxCount="props.addAndEditFormType == 3 ? 1 : 9"
|
||||
@delete="onDeletePicBuildAfterImgList"
|
||||
@afterRead="onAfterReadBuildAfterImgList"
|
||||
:deletable="props.addAndEditFormType != 3"
|
||||
:fileList="addAndEditModel.buildAfterImgList"
|
||||
:maxCount="
|
||||
props.addAndEditFormType == 3 ? addAndEditModel.buildAfterImgList.length : 9
|
||||
"
|
||||
/>
|
||||
</up-form-item>
|
||||
|
||||
<up-button type="primary" text="提交" @tap="onSubmitForm" style="width: 100%" />
|
||||
<up-button
|
||||
type="primary"
|
||||
text="提交"
|
||||
@tap="onSubmitForm"
|
||||
v-if="props.addAndEditFormType != 3"
|
||||
style="width: 100%; margin-top: 10rpx"
|
||||
/>
|
||||
</up-form>
|
||||
|
||||
<!-- 项目选择弹框 -->
|
||||
|
|
@ -147,11 +169,11 @@
|
|||
<!-- 工程列表 -->
|
||||
<view class="project-list">
|
||||
<up-list @scrolltolower="onScrollTolower" style="width: 100%">
|
||||
<up-list-item v-for="item in 20" :key="item">
|
||||
<up-cell :title="`xxxxxxxxx工程-${item}`" @tap="onSelectProjectItem(item)">
|
||||
<up-list-item v-for="(item, index) in projectList" :key="item.id">
|
||||
<up-cell :title="item.name" @tap="onSelectProjectItem(item)">
|
||||
<template #icon>
|
||||
<text style="margin-right: 10rpx">
|
||||
{{ item }}
|
||||
{{ index + 1 }}
|
||||
</text>
|
||||
</template>
|
||||
</up-cell>
|
||||
|
|
@ -163,7 +185,7 @@
|
|||
|
||||
<!-- 专业选择器 -->
|
||||
<up-picker
|
||||
keyName="label"
|
||||
keyName="name"
|
||||
:show="majorShow"
|
||||
:columns="majorList"
|
||||
@confirm="onConfirmMajor"
|
||||
|
|
@ -171,7 +193,7 @@
|
|||
/>
|
||||
<!-- 工序选择器 -->
|
||||
<up-picker
|
||||
keyName="label"
|
||||
keyName="name"
|
||||
:show="procedureShow"
|
||||
:columns="procedureList"
|
||||
@confirm="onConfirmProcedure"
|
||||
|
|
@ -198,11 +220,19 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref } from 'vue'
|
||||
import { reactive, ref, onMounted, watch } from 'vue'
|
||||
import { debounce } from 'lodash-es' // 引入防抖函数
|
||||
import { useCommon } from '@/hooks/useCommon.js'
|
||||
import { getProcedureApi } from '@/services/common.js'
|
||||
import {
|
||||
addCoordinatePhotoApi,
|
||||
editCoordinatePhotoApi,
|
||||
getCoordinatePhotoDetailsByIdApi,
|
||||
} from '@/services/coordinatePhotos.js'
|
||||
import TitleTipModal from '@/components/TitleTipModal/index'
|
||||
const addAndEditModelRef = ref(null)
|
||||
|
||||
const { getProjectList, getMajorList } = useCommon()
|
||||
const addAndEditModelRef = ref(null)
|
||||
const projectShow = ref(false) // 项目选择弹框
|
||||
const majorShow = ref(false) // 专业选择器
|
||||
const procedureShow = ref(false) // 工序选择器
|
||||
|
|
@ -211,36 +241,48 @@ const onSearchProjectName = ref('') // 项目搜索条件
|
|||
const dateValue = ref(Date.now()) // 年月日选择器数据源
|
||||
const sendLoading = ref(false) // 加载中
|
||||
const dateType = ref(1)
|
||||
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
const projectListAll = ref([])
|
||||
// 专业数据源
|
||||
const majorList = reactive([])
|
||||
// 工序数据源
|
||||
const procedureList = reactive([])
|
||||
const props = defineProps({
|
||||
// 表单类型 1. 新增 2. 修改 3. 详情
|
||||
addAndEditFormType: {
|
||||
type: [Number, String],
|
||||
default: () => 1,
|
||||
},
|
||||
// 列表id
|
||||
detailsId: {
|
||||
type: [Number, String],
|
||||
default: () => 1,
|
||||
},
|
||||
})
|
||||
|
||||
console.log(props.addAndEditFormType, '表单类型')
|
||||
|
||||
// 表单数据源
|
||||
const addAndEditModel = reactive({
|
||||
projectName: '',
|
||||
procedure: '',
|
||||
major: '',
|
||||
examiner: '',
|
||||
inspectTime: '',
|
||||
correctionTerm: '',
|
||||
vrLocation: '',
|
||||
vrDescribe: '',
|
||||
vrImgList: [],
|
||||
correctionPerson: '',
|
||||
correctionDescribe: '',
|
||||
correctionTime: '',
|
||||
correctionImgList: [],
|
||||
dataSource: 2,
|
||||
proId: '', // 工程id
|
||||
proName: '', // 工程名称
|
||||
majorId: '', // 专业id
|
||||
majorName: '', // 专业名称
|
||||
gxId: '', // 工序id
|
||||
gxName: '', // 工序名称
|
||||
buildPlace: '', // 建设地点
|
||||
buildBeforeDesc: '', // 建设前描述
|
||||
buildBeforeImgList: [], // 建设前照片
|
||||
buildUnderDesc: '', // 建设中描述
|
||||
buildUnderImgList: [], // 建设中照片
|
||||
buildAfterDesc: '', // 恢复后描述
|
||||
buildAfterImgList: [], // 恢复后照片
|
||||
})
|
||||
|
||||
// 校验规则
|
||||
const addAndEditModelRules = ref({
|
||||
projectName: [
|
||||
proName: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
|
|
@ -248,99 +290,7 @@ const addAndEditModelRules = ref({
|
|||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
correctionTerm: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请选择整改期限',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
vrLocation: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写违章地点',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
vrDescribe: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写违章描述',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
vrImgList: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请上传违章照片',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
correctionPerson: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写整改人',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
correctionDescribe: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写整改说明',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
})
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
// 专业数据源
|
||||
const majorList = reactive([
|
||||
[
|
||||
{
|
||||
label: '专业1',
|
||||
value: 2021,
|
||||
},
|
||||
{
|
||||
label: '专业2',
|
||||
value: 2022,
|
||||
},
|
||||
{
|
||||
label: '专业3',
|
||||
value: 2023,
|
||||
},
|
||||
{
|
||||
label: '专业4',
|
||||
value: 2024,
|
||||
},
|
||||
],
|
||||
])
|
||||
// 工序数据源
|
||||
const procedureList = reactive([
|
||||
[
|
||||
{
|
||||
label: '工序1',
|
||||
id: 2021,
|
||||
},
|
||||
{
|
||||
label: '工序2',
|
||||
id: 2022,
|
||||
},
|
||||
{
|
||||
label: '工序3',
|
||||
id: 2023,
|
||||
},
|
||||
{
|
||||
label: '工序4',
|
||||
id: 2024,
|
||||
},
|
||||
],
|
||||
])
|
||||
|
||||
// 日期格式化
|
||||
const formatter = (type, value) => {
|
||||
|
|
@ -364,7 +314,15 @@ const onSelectProject = () => {
|
|||
}
|
||||
// 搜索
|
||||
const onSearchInProjectPopup = () => {
|
||||
console.log('---搜索', onSearchProjectName.value)
|
||||
if (!onSearchProjectName.value) {
|
||||
projectList.value = projectListAll.value // 如果搜索为空,返回所有项目
|
||||
return
|
||||
}
|
||||
|
||||
const searchTerm = onSearchProjectName.value.toLowerCase()
|
||||
projectList.value = projectListAll.value.filter(
|
||||
(e) => e.name && e.name.toLowerCase().includes(searchTerm),
|
||||
)
|
||||
}
|
||||
|
||||
// 滚动触底事件
|
||||
|
|
@ -374,7 +332,8 @@ const onScrollTolower = () => {
|
|||
|
||||
// 选择项目
|
||||
const onSelectProjectItem = (item) => {
|
||||
addAndEditModel.projectName = 'xxxxxx工程' + item
|
||||
addAndEditModel.proName = item.name
|
||||
addAndEditModel.proId = item.id
|
||||
projectShow.value = false
|
||||
}
|
||||
|
||||
|
|
@ -391,8 +350,9 @@ const onSelectMajor = () => {
|
|||
|
||||
// 专业确定
|
||||
const onConfirmMajor = (item) => {
|
||||
console.log('---确定', item.value[0].label)
|
||||
addAndEditModel.major = item.value[0].label
|
||||
addAndEditModel.majorName = item.value[0].name
|
||||
addAndEditModel.majorId = item.value[0].id
|
||||
getProcedureData(item.value[0].id)
|
||||
majorShow.value = false
|
||||
}
|
||||
// 选择工序
|
||||
|
|
@ -400,9 +360,28 @@ const onSelectProcedure = () => {
|
|||
procedureShow.value = true
|
||||
}
|
||||
|
||||
// 获取工序
|
||||
const getProcedureData = async (pid) => {
|
||||
console.log(
|
||||
'%c🔍 获取工序请求入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
'pid=' + pid,
|
||||
)
|
||||
const { data: res } = await getProcedureApi({ pid })
|
||||
console.log(
|
||||
'%c🔍 获取工序请求出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
procedureList.push(res)
|
||||
}
|
||||
|
||||
// 工序确定
|
||||
const onConfirmProcedure = (item) => {
|
||||
addAndEditModel.procedure = item.value[0].label
|
||||
addAndEditModel.gxName = item.value[0].name
|
||||
addAndEditModel.gxId = item.value[0].id
|
||||
procedureShow.value = false
|
||||
}
|
||||
|
||||
|
|
@ -437,56 +416,378 @@ const formatDate = (timestamp) => {
|
|||
return `${year}-${month}-${day}`
|
||||
}
|
||||
|
||||
// 违章照片上传
|
||||
const onAfterReadVrImgList = (event) => {
|
||||
// 建设前照片上传
|
||||
const onAfterReadBuildBeforeImgList = (event) => {
|
||||
let lists = [].concat(event.file)
|
||||
lists.map((item) => {
|
||||
addAndEditModel.vrImgList.push({
|
||||
addAndEditModel.buildBeforeImgList.push({
|
||||
...item,
|
||||
isEdit: false,
|
||||
})
|
||||
})
|
||||
}
|
||||
// 违章照片删除
|
||||
const onDeletePicVrImgList = (event) => {
|
||||
addAndEditModel.vrImgList.splice(event.index, 1)
|
||||
// 建设前照片删除
|
||||
const onDeletePicBuildBeforeImgList = (event) => {
|
||||
addAndEditModel.buildBeforeImgList.splice(event.index, 1)
|
||||
}
|
||||
|
||||
// 整改照片上传
|
||||
const onAfterReadCorrectionImgList = (event) => {
|
||||
// 建设中照片上传
|
||||
const onAfterReadBuildUnderImgList = (event) => {
|
||||
let lists = [].concat(event.file)
|
||||
lists.map((item) => {
|
||||
addAndEditModel.correctionImgList.push({
|
||||
addAndEditModel.buildUnderImgList.push({
|
||||
...item,
|
||||
isEdit: false,
|
||||
})
|
||||
})
|
||||
}
|
||||
// 违章照片删除
|
||||
const onDeleteCorrectionImgList = (event) => {
|
||||
addAndEditModel.correctionImgList.splice(event.index, 1)
|
||||
// 建设中照片删除
|
||||
const onDeletePicBuildUnderImgList = (event) => {
|
||||
addAndEditModel.buildUnderImgList.splice(event.index, 1)
|
||||
}
|
||||
// 恢复后照片上传
|
||||
const onAfterReadBuildAfterImgList = (event) => {
|
||||
let lists = [].concat(event.file)
|
||||
lists.map((item) => {
|
||||
addAndEditModel.buildAfterImgList.push({
|
||||
...item,
|
||||
isEdit: false,
|
||||
})
|
||||
})
|
||||
}
|
||||
// 恢复后照片删除
|
||||
const onDeletePicBuildAfterImgList = (event) => {
|
||||
addAndEditModel.buildAfterImgList.splice(event.index, 1)
|
||||
}
|
||||
|
||||
// 提交
|
||||
const onSubmitForm = debounce(() => {
|
||||
console.log('---提交')
|
||||
sendLoading.value = true
|
||||
addAndEditModelRef.value.validate().then((valid) => {
|
||||
if (valid) {
|
||||
console.log('校验通过')
|
||||
sendLoading.value = false
|
||||
}
|
||||
})
|
||||
addAndEditModelRef.value
|
||||
.validate()
|
||||
.then(async (valid) => {
|
||||
if (valid) {
|
||||
// 先调上传接口把图片上传
|
||||
sendLoading.value = true
|
||||
const uploadImages = new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
let buildBeforeImgListSuccess = []
|
||||
let buildUnderImgListSuccess = []
|
||||
let buildAfterImgListSuccess = []
|
||||
let buildBeforeImgListNoEdit = []
|
||||
let buildUnderImgListNoEdit = []
|
||||
let buildAfterImgListNoEdit = []
|
||||
// 建设前图片
|
||||
if (addAndEditModel.buildBeforeImgList.length > 0) {
|
||||
buildBeforeImgListNoEdit = addAndEditModel.buildBeforeImgList.filter(
|
||||
(e) => !e.isEdit,
|
||||
)
|
||||
|
||||
if (buildBeforeImgListNoEdit.length > 0) {
|
||||
buildBeforeImgListSuccess = await uploadImgFun(
|
||||
buildBeforeImgListNoEdit,
|
||||
6,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// 建设中图片
|
||||
if (addAndEditModel.buildUnderImgList.length > 0) {
|
||||
buildUnderImgListNoEdit = addAndEditModel.buildUnderImgList.filter(
|
||||
(e) => !e.isEdit,
|
||||
)
|
||||
|
||||
if (buildUnderImgListNoEdit.length > 0) {
|
||||
buildUnderImgListSuccess = await uploadImgFun(
|
||||
buildUnderImgListNoEdit,
|
||||
7,
|
||||
)
|
||||
}
|
||||
}
|
||||
// 恢复后图片
|
||||
if (addAndEditModel.buildAfterImgList.length > 0) {
|
||||
buildAfterImgListNoEdit = addAndEditModel.buildAfterImgList.filter(
|
||||
(e) => !e.isEdit,
|
||||
)
|
||||
|
||||
if (buildAfterImgListNoEdit.length > 0) {
|
||||
buildAfterImgListSuccess = await uploadImgFun(
|
||||
buildAfterImgListNoEdit,
|
||||
8,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
resolve({
|
||||
buildBeforeImgListSuccess,
|
||||
buildUnderImgListSuccess,
|
||||
buildAfterImgListSuccess,
|
||||
}) // 上传成功,返回结果
|
||||
} catch (error) {
|
||||
reject(error) // 上传失败,抛出错误
|
||||
}
|
||||
})
|
||||
|
||||
uploadImages
|
||||
.then(
|
||||
async ({
|
||||
buildBeforeImgListSuccess,
|
||||
buildUnderImgListSuccess,
|
||||
buildAfterImgListSuccess,
|
||||
}) => {
|
||||
// 这里写提交表单的逻辑
|
||||
// 组装参数
|
||||
const {
|
||||
dataSource,
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
buildPlace, // 建设地点
|
||||
buildBeforeDesc, // 建设前描述
|
||||
buildBeforeImgList, // 建设前照片
|
||||
buildUnderDesc, // 建设中描述
|
||||
buildUnderImgList, // 建设中照片
|
||||
buildAfterDesc, // 恢复后描述
|
||||
buildAfterImgList, // 恢复后照片
|
||||
} = addAndEditModel
|
||||
|
||||
const buildBeforeImgListOld = []
|
||||
buildBeforeImgList.forEach((e) => {
|
||||
if (e.isEdit) buildBeforeImgListOld.push(e)
|
||||
})
|
||||
|
||||
const buildUnderImgListOld = []
|
||||
buildUnderImgList.forEach((e) => {
|
||||
if (e.isEdit) buildUnderImgListOld.push(e)
|
||||
})
|
||||
|
||||
const buildAfterImgListOld = []
|
||||
buildAfterImgList.forEach((e) => {
|
||||
if (e.isEdit) buildAfterImgListOld.push(e)
|
||||
})
|
||||
|
||||
const addParams = {
|
||||
dataSource,
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
buildPlace, // 建设地点
|
||||
buildBeforeDesc, // 建设前描述
|
||||
buildUnderDesc, // 建设中描述
|
||||
buildAfterDesc, // 恢复后描述
|
||||
sysFileResourceList: [
|
||||
...buildBeforeImgListSuccess,
|
||||
...buildUnderImgListSuccess,
|
||||
...buildAfterImgListSuccess,
|
||||
...buildBeforeImgListOld,
|
||||
...buildUnderImgListOld,
|
||||
...buildAfterImgListOld,
|
||||
],
|
||||
uploadType: 4,
|
||||
}
|
||||
|
||||
const SED_API =
|
||||
props.addAndEditFormType == 1
|
||||
? addCoordinatePhotoApi
|
||||
: editCoordinatePhotoApi
|
||||
|
||||
if (props.addAndEditFormType == 2) {
|
||||
Object.assign(addParams, {
|
||||
id: props.detailsId,
|
||||
})
|
||||
}
|
||||
|
||||
console.log(
|
||||
'%c🔍 表单提交入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
addParams,
|
||||
)
|
||||
const res = await SED_API(addParams)
|
||||
console.log(
|
||||
'%c🔍 表单提交出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
sendLoading.value = false
|
||||
if (res.code === 200) {
|
||||
uni.$u.toast(res.data)
|
||||
setTimeout(() => {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
})
|
||||
}, 500)
|
||||
} else {
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
},
|
||||
)
|
||||
.catch((error) => {
|
||||
console.error('图片上传失败:', error)
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch((error) => {})
|
||||
}, 1000)
|
||||
|
||||
// 上传逻辑
|
||||
const uploadImgFun = async (list, type) => {
|
||||
const fileType = {
|
||||
6: '协调照片-建设前',
|
||||
7: '协调照片-建设中',
|
||||
8: '协调照片-恢复后',
|
||||
}
|
||||
return new Promise((resolve, reject) => {
|
||||
let successList = []
|
||||
let files = []
|
||||
|
||||
list.forEach((f) => {
|
||||
let d = {
|
||||
file: f.url,
|
||||
name: 'files',
|
||||
uri: f.url,
|
||||
}
|
||||
files.push(d)
|
||||
})
|
||||
|
||||
sendLoading.value = true
|
||||
|
||||
uni.uploadFile({
|
||||
url: '/imgTool/sys/file/uploadFile',
|
||||
files: files,
|
||||
name: 'files',
|
||||
formData: {
|
||||
params: JSON.stringify({
|
||||
uploadType: 4,
|
||||
sourceType: type,
|
||||
sourceTypeName: fileType[type],
|
||||
}),
|
||||
},
|
||||
success: (res) => {
|
||||
sendLoading.value = false
|
||||
res = JSON.parse(res.data)
|
||||
|
||||
if (res.code === 200) {
|
||||
successList = res.data
|
||||
resolve(successList) // 上传成功,返回数据
|
||||
} else {
|
||||
uni.$u.toast('上传失败' + res.msg)
|
||||
reject(new Error('上传失败: ' + res.msg))
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
sendLoading.value = false
|
||||
reject(new Error('网络错误: ' + err.errMsg))
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 获取表单详情
|
||||
const getFormDetail = () => {
|
||||
console.log('---获取详情数据')
|
||||
}
|
||||
// props.addAndEditFormType 如果为2怎为编辑表单
|
||||
if (props.addAndEditFormType == 2) {
|
||||
// 先获取详情数据并回显
|
||||
getFormDetail()
|
||||
const getFormDetail = async () => {
|
||||
console.log(
|
||||
'%c🔍 获取宣传照片详情入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
'id=' + props?.detailsId,
|
||||
)
|
||||
const res = await getCoordinatePhotoDetailsByIdApi({ id: props?.detailsId })
|
||||
|
||||
console.log(
|
||||
'%c🔍 获取宣传照片详情出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
if (res.code === 200) {
|
||||
const {
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
buildPlace, // 建设地点
|
||||
buildBeforeDesc, // 建设前描述
|
||||
buildUnderDesc, // 建设中描述
|
||||
buildAfterDesc, // 恢复后描述
|
||||
sysFileResourceList,
|
||||
} = res.data
|
||||
let buildBeforeImgList = []
|
||||
let buildUnderImgList = []
|
||||
let buildAfterImgList = []
|
||||
if (sysFileResourceList.length > 0) {
|
||||
sysFileResourceList.map((e) => {
|
||||
if (e?.sourceType == 6) {
|
||||
buildBeforeImgList.push({
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
})
|
||||
}
|
||||
if (e?.sourceType == 7) {
|
||||
buildUnderImgList.push({
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
})
|
||||
}
|
||||
if (e?.sourceType == 8) {
|
||||
buildAfterImgList.push({
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
Object.assign(addAndEditModel, {
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
buildPlace, // 建设地点
|
||||
buildBeforeDesc, // 建设前描述
|
||||
buildBeforeImgList, // 建设前照片
|
||||
buildUnderDesc, // 建设中描述
|
||||
buildUnderImgList, // 建设中照片
|
||||
buildAfterDesc, // 恢复后描述
|
||||
buildAfterImgList, // 恢复后照片
|
||||
})
|
||||
getProcedureData(majorId)
|
||||
} else {
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
}
|
||||
|
||||
// 监听当前页面是新增还是修改
|
||||
watch(
|
||||
() => props.addAndEditFormType,
|
||||
(newValue) => {
|
||||
if (newValue != 1) {
|
||||
getFormDetail()
|
||||
}
|
||||
},
|
||||
{
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
)
|
||||
|
||||
onMounted(async () => {
|
||||
projectList.value = await getProjectList()
|
||||
projectListAll.value = await getProjectList()
|
||||
majorList.push(await getMajorList())
|
||||
})
|
||||
|
||||
// 获取表单详情
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
/>
|
||||
|
||||
<view class="container">
|
||||
<AddAndEditForm :addAndEditFormType="addAndEditFormType" />
|
||||
<AddAndEditForm :addAndEditFormType="addAndEditFormType" :detailsId="detailsId" />
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -21,12 +21,16 @@ import { onLoad } from '@dcloudio/uni-app'
|
|||
|
||||
const { safeAreaInsets } = uni.getSystemInfoSync()
|
||||
const addAndEditFormType = ref(1)
|
||||
const detailsId = ref('')
|
||||
const uploadRecordUrl = ref('/pages/coordinatePhotos/upload-record/index')
|
||||
|
||||
onLoad((query) => {
|
||||
if (query.type) {
|
||||
addAndEditFormType.value = query.type
|
||||
}
|
||||
if (query.id) {
|
||||
detailsId.value = query.id
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<up-input
|
||||
clearable
|
||||
placeholder="输入搜索关键词"
|
||||
v-model.trim="onSearchKeyword"
|
||||
v-model.trim="queryParams.keyWord"
|
||||
suffixIconStyle="color: #909399"
|
||||
>
|
||||
<template #suffix>
|
||||
|
|
@ -18,27 +18,27 @@
|
|||
</view>
|
||||
</view>
|
||||
|
||||
<view class="upload-record-list">
|
||||
<view class="upload-record-list" v-if="coordinatePhotosList.length > 0">
|
||||
<up-list @scrolltolower="onScrollTolower" style="width: 100%">
|
||||
<up-list-item v-for="item in 10" :key="item">
|
||||
<up-list-item v-for="item in coordinatePhotosList" :key="item.id">
|
||||
<view class="record-item">
|
||||
<view @tap="onHandleViewDetails">
|
||||
<view @tap="onHandleViewDetails(item.id)">
|
||||
<!-- 日期 -->
|
||||
<view class="item-date">
|
||||
<text>2024-05-06</text>
|
||||
<!-- <text>{{ }}</text> -->
|
||||
<view>
|
||||
<up-button
|
||||
size="mini"
|
||||
text="修改"
|
||||
type="primary"
|
||||
@tap="onHandleEditRecord"
|
||||
@tap="onHandleEditRecord(item.id)"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 名称 -->
|
||||
<view class="item-name">
|
||||
<text>N3917</text>
|
||||
<text>{{ item.buildPlace }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 文字内容 -->
|
||||
|
|
@ -52,22 +52,19 @@
|
|||
shape="circle"
|
||||
/>
|
||||
</view>
|
||||
<up-text
|
||||
:lines="2"
|
||||
text="关于uview-plus的取名来由,首字母u来自于uni-app首字母,
|
||||
uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view组件uni-app中
|
||||
最础最重要的组件,故取名uview-plus,表达源于uni-app和Vue之意,同时在此也对它示感谢。"
|
||||
/>
|
||||
<up-text :lines="2" :text="item.buildBeforeDesc" />
|
||||
</view>
|
||||
<view>
|
||||
<!-- 图片内容 -->
|
||||
<view class="swiper-container">
|
||||
<up-swiper
|
||||
:list="list1"
|
||||
:list="item?.buildBeforeImgList"
|
||||
interval="5000"
|
||||
@click="onClickSwiper"
|
||||
/>
|
||||
<view class="swiper-count"> 3张 </view>
|
||||
<view class="swiper-count">
|
||||
{{ item?.buildBeforeImgList.length }}张
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-content">
|
||||
|
|
@ -79,22 +76,19 @@ uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view
|
|||
shape="circle"
|
||||
/>
|
||||
</view>
|
||||
<up-text
|
||||
:lines="2"
|
||||
text="关于uview-plus的取名来由,首字母u来自于uni-app首字母,
|
||||
uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view组件uni-app中
|
||||
最础最重要的组件,故取名uview-plus,表达源于uni-app和Vue之意,同时在此也对它示感谢。"
|
||||
/>
|
||||
<up-text :lines="2" :text="item.buildUnderDesc" />
|
||||
</view>
|
||||
<view>
|
||||
<!-- 图片内容 -->
|
||||
<view class="swiper-container">
|
||||
<up-swiper
|
||||
:list="list1"
|
||||
:list="item?.buildUnderImgList"
|
||||
interval="5000"
|
||||
@click="onClickSwiper"
|
||||
/>
|
||||
<view class="swiper-count"> 3张 </view>
|
||||
<view class="swiper-count">
|
||||
{{ item?.buildUnderImgList.length }}张
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-content">
|
||||
|
|
@ -106,22 +100,19 @@ uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view
|
|||
shape="circle"
|
||||
/>
|
||||
</view>
|
||||
<up-text
|
||||
:lines="2"
|
||||
text="关于uview-plus的取名来由,首字母u来自于uni-app首字母,
|
||||
uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view组件uni-app中
|
||||
最础最重要的组件,故取名uview-plus,表达源于uni-app和Vue之意,同时在此也对它示感谢。"
|
||||
/>
|
||||
<up-text :lines="2" :text="item.buildAfterDesc" />
|
||||
</view>
|
||||
<view>
|
||||
<!-- 图片内容 -->
|
||||
<view class="swiper-container">
|
||||
<up-swiper
|
||||
:list="list1"
|
||||
:list="item?.buildAfterImgList"
|
||||
interval="5000"
|
||||
@click="onClickSwiper"
|
||||
/>
|
||||
<view class="swiper-count"> 3张 </view>
|
||||
<view class="swiper-count">
|
||||
{{ item?.buildAfterImgList.length }}张
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
|
@ -132,45 +123,106 @@ uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view
|
|||
{{ finish ? '没有更多数据了~' : '正在加载...' }}
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<up-empty mode="data" v-else />
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import NavBarModal from '@/components/NavBarModal/index'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { ref, computed } from 'vue'
|
||||
import { debounce } from 'lodash-es' // 引入防抖函数
|
||||
const scrollTop = ref(0)
|
||||
const onSearchKeyword = ref('')
|
||||
const finish = ref(false)
|
||||
import { getCoordinatePhotoListApi } from '@/services/coordinatePhotos.js'
|
||||
const coordinatePhotosList = ref([])
|
||||
const total = ref(0)
|
||||
|
||||
const list1 = reactive([
|
||||
'https://img1.baidu.com/it/u=1361177696,203903602&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1455',
|
||||
'https://img1.baidu.com/it/u=1361177696,203903602&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1455',
|
||||
'https://img1.baidu.com/it/u=1361177696,203903602&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1455',
|
||||
])
|
||||
// 查询条件
|
||||
const queryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
keyWord: '',
|
||||
})
|
||||
|
||||
// 获取上传记录列表数据
|
||||
const getCoordinatePhotoListData = async (isTap = false) => {
|
||||
try {
|
||||
console.log(
|
||||
'%c🔍 获取安全违章上传记录入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
queryParams.value,
|
||||
)
|
||||
const { data: res } = await getCoordinatePhotoListApi(queryParams.value)
|
||||
|
||||
console.log(
|
||||
'%c🔍 获取安全违章上传记录出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
// 更新总数
|
||||
total.value = res.total
|
||||
// 处理数据
|
||||
if (isTap) {
|
||||
// 点击搜索时,直接替换数据
|
||||
coordinatePhotosList.value = res?.list || []
|
||||
// 重置页码
|
||||
queryParams.value.pageNum = 1
|
||||
} else {
|
||||
// 下拉加载时,追加数据
|
||||
if (res.list && res.list.length > 0) {
|
||||
coordinatePhotosList.value = [...coordinatePhotosList.value, ...res.list]
|
||||
}
|
||||
}
|
||||
|
||||
if (coordinatePhotosList.value.length > 0) {
|
||||
coordinatePhotosList.value.forEach((e) => {
|
||||
e.buildBeforeImgList = e?.sysFileResourceList.filter((i) => i?.sourceType == 6)
|
||||
e.buildUnderImgList = e?.sysFileResourceList.filter((i) => i?.sourceType == 7)
|
||||
e.buildAfterImgList = e?.sysFileResourceList.filter((i) => i?.sourceType == 8)
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
// 发生错误时重置数据
|
||||
if (isTap) {
|
||||
coordinatePhotosList.value = []
|
||||
}
|
||||
}
|
||||
}
|
||||
getCoordinatePhotoListData()
|
||||
|
||||
// 滚动触底事件
|
||||
const onScrollTolower = debounce(() => {
|
||||
console.log('onScrollTolower')
|
||||
// 判断是否还有更多数据
|
||||
if (coordinatePhotosList.value.length < total.value) {
|
||||
queryParams.value.pageNum++
|
||||
getCoordinatePhotoListData(false)
|
||||
}
|
||||
}, 500)
|
||||
|
||||
// 判断数据是否加载完毕
|
||||
const finish = computed(() => {
|
||||
if (total.value === coordinatePhotosList.value.length) return true
|
||||
})
|
||||
|
||||
// 搜索
|
||||
const onSearchRecord = () => {
|
||||
console.log('onSearchRecord', onSearchKeyword.value)
|
||||
getCoordinatePhotoListData(true)
|
||||
}
|
||||
// 修改
|
||||
const onHandleEditRecord = () => {
|
||||
const onHandleEditRecord = (id) => {
|
||||
console.log('onHandleEditRecord')
|
||||
uni.redirectTo({
|
||||
url: `/pages/coordinatePhotos/index?type=2&id=1`, // 强制跳转并传参
|
||||
url: `/pages/coordinatePhotos/index?type=2&id=${id}`, // 强制跳转并传参
|
||||
})
|
||||
}
|
||||
|
||||
// 查看详情
|
||||
const onHandleViewDetails = () => {
|
||||
const onHandleViewDetails = (id) => {
|
||||
uni.redirectTo({
|
||||
url: `/pages/coordinatePhotos/index?type=3&id=1`, // 强制跳转并传参
|
||||
url: `/pages/coordinatePhotos/index?type=3&id=${id}`, // 强制跳转并传参
|
||||
})
|
||||
}
|
||||
|
||||
|
|
@ -213,7 +265,7 @@ const onClickSwiper = (e) => {
|
|||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
justify-content: flex-end;
|
||||
|
||||
& text {
|
||||
color: #999;
|
||||
|
|
|
|||
|
|
@ -10,23 +10,24 @@
|
|||
style="background-color: #fff; padding: 0 30rpx 20rpx"
|
||||
>
|
||||
<TitleTipModal :TitleTip="`项目信息`" />
|
||||
<up-form-item prop="projectName" label="项目名称" required>
|
||||
<up-form-item prop="proName" label="项目名称" required>
|
||||
<up-input
|
||||
readonly
|
||||
border="none"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择项目'"
|
||||
v-model="addAndEditModel.projectName"
|
||||
v-model="addAndEditModel.proName"
|
||||
@click="onSelectProject"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
<up-icon name="arrow-right" @tap="onSelectProject" />
|
||||
<up-icon name="arrow-right" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="major" label="专业">
|
||||
<up-form-item prop="majorName" label="专业">
|
||||
<up-input
|
||||
border="none"
|
||||
readonly
|
||||
v-model="addAndEditModel.major"
|
||||
v-model="addAndEditModel.majorName"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择专业'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
|
|
@ -34,11 +35,11 @@
|
|||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="procedure" label="工序">
|
||||
<up-form-item prop="gxName" label="工序">
|
||||
<up-input
|
||||
border="none"
|
||||
readonly
|
||||
v-model="addAndEditModel.procedure"
|
||||
v-model="addAndEditModel.gxName"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择工序'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
|
|
@ -48,37 +49,41 @@
|
|||
</up-form-item>
|
||||
|
||||
<TitleTipModal :TitleTip="`重要事项及宣传照片`" />
|
||||
<up-form-item prop="inspectTime" label="日期">
|
||||
<up-form-item prop="time" label="日期">
|
||||
<up-input
|
||||
readonly
|
||||
border="none"
|
||||
inputAlign="right"
|
||||
v-model="addAndEditModel.inspectTime"
|
||||
v-model="addAndEditModel.time"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择日期'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
<up-icon name="arrow-right" @tap="onSelectDate(1)" />
|
||||
<up-icon name="arrow-right" @tap="onSelectDate" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="examiner" label="标题">
|
||||
<up-form-item prop="title" label="标题">
|
||||
<up-input
|
||||
border="none"
|
||||
v-model="addAndEditModel.title"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入标题'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item prop="vrDescribe" label="内容" required>
|
||||
<up-form-item prop="content" label="内容" required>
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
v-model="addAndEditModel.vrDescribe"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.content"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入内容'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item
|
||||
prop="vrImgList"
|
||||
prop="imgList"
|
||||
:label="props.addAndEditFormType == 3 ? '照片' : '照片(最多9张)'"
|
||||
required
|
||||
>
|
||||
|
|
@ -87,101 +92,23 @@
|
|||
multiple
|
||||
@delete="onDeletePicVrImgList"
|
||||
@afterRead="onAfterReadVrImgList"
|
||||
:fileList="addAndEditModel.vrImgList"
|
||||
:maxCount="props.addAndEditFormType == 3 ? 1 : 9"
|
||||
:fileList="addAndEditModel.imgList"
|
||||
:deletable="props.addAndEditFormType != 3"
|
||||
:maxCount="
|
||||
props.addAndEditFormType == 3
|
||||
? addAndEditModel.imgList.length
|
||||
: 9 - addAndEditModel.imgList.length
|
||||
"
|
||||
/>
|
||||
</up-form-item>
|
||||
<!-- <up-form-item prop="correctionTerm" label="整改期限" required>
|
||||
<up-input
|
||||
readonly
|
||||
border="none"
|
||||
inputAlign="right"
|
||||
v-model="addAndEditModel.correctionTerm"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择整改期限'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
<up-icon name="arrow-right" @tap="onSelectDate(2)" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="vrLocation" label="违章地点" required>
|
||||
<up-input
|
||||
border="none"
|
||||
v-model="addAndEditModel.vrLocation"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入违章地点'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item prop="vrDescribe" label="违章描述" required>
|
||||
<up-textarea
|
||||
autoHeight
|
||||
border="none"
|
||||
v-model="addAndEditModel.vrDescribe"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入违章描述'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item
|
||||
prop="vrImgList"
|
||||
:label="props.addAndEditFormType == 3 ? '违章照片' : '违章照片(最多9张)'"
|
||||
required
|
||||
>
|
||||
<up-upload
|
||||
name="1"
|
||||
multiple
|
||||
@delete="onDeletePicVrImgList"
|
||||
@afterRead="onAfterReadVrImgList"
|
||||
:fileList="addAndEditModel.vrImgList"
|
||||
:maxCount="props.addAndEditFormType == 3 ? 1 : 9"
|
||||
/>
|
||||
</up-form-item>
|
||||
<TitleTipModal :TitleTip="`整改信息`" />
|
||||
<up-form-item prop="correctionPerson" label="整改人" required>
|
||||
<up-input
|
||||
border="none"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
v-model="addAndEditModel.correctionPerson"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入整改人'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item prop="correctionTime" label="整改日期">
|
||||
<up-input
|
||||
readonly
|
||||
border="none"
|
||||
inputAlign="right"
|
||||
v-model="addAndEditModel.correctionTime"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '点击选择整改日期'"
|
||||
>
|
||||
<template #suffix v-if="props.addAndEditFormType != 3">
|
||||
<up-icon name="arrow-right" @tap="onSelectDate(3)" />
|
||||
</template>
|
||||
</up-input>
|
||||
</up-form-item>
|
||||
<up-form-item prop="correctionDescribe" label="整改说明" required>
|
||||
<up-textarea
|
||||
autoHeight
|
||||
border="none"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
v-model="addAndEditModel.correctionDescribe"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入整改说明'"
|
||||
/>
|
||||
</up-form-item>
|
||||
<up-form-item
|
||||
prop="examiner"
|
||||
:label="props.addAndEditFormType == 3 ? '整改照片' : '整改照片(最多9张)'"
|
||||
>
|
||||
<up-upload
|
||||
name="1"
|
||||
multiple
|
||||
@delete="onDeleteCorrectionImgList"
|
||||
@afterRead="onAfterReadCorrectionImgList"
|
||||
:deletable="!props.addAndEditFormType == 3"
|
||||
:fileList="addAndEditModel.correctionImgList"
|
||||
:maxCount="props.addAndEditFormType == 3 ? 1 : 9"
|
||||
/>
|
||||
</up-form-item> -->
|
||||
|
||||
<up-button type="primary" text="提交" @tap="onSubmitForm" style="width: 100%" />
|
||||
<up-button
|
||||
type="primary"
|
||||
text="提交"
|
||||
@tap="onSubmitForm"
|
||||
v-if="props.addAndEditFormType != 3"
|
||||
style="width: 100%; margin-top: 10rpx"
|
||||
/>
|
||||
</up-form>
|
||||
|
||||
<!-- 项目选择弹框 -->
|
||||
|
|
@ -204,23 +131,27 @@
|
|||
<!-- 工程列表 -->
|
||||
<view class="project-list">
|
||||
<up-list @scrolltolower="onScrollTolower" style="width: 100%">
|
||||
<up-list-item v-for="item in 20" :key="item">
|
||||
<up-cell :title="`xxxxxxxxx工程-${item}`" @tap="onSelectProjectItem(item)">
|
||||
<up-list-item v-for="(item, index) in projectList" :key="item.id">
|
||||
<up-cell :title="item.name" @tap="onSelectProjectItem(item)">
|
||||
<template #icon>
|
||||
<text style="margin-right: 10rpx">
|
||||
{{ item }}
|
||||
{{ index + 1 }}
|
||||
</text>
|
||||
</template>
|
||||
</up-cell>
|
||||
</up-list-item>
|
||||
</up-list>
|
||||
|
||||
<view class="loading-mask" v-if="maskLoading">
|
||||
<up-loading-icon color="#2979ff" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</up-popup>
|
||||
|
||||
<!-- 专业选择器 -->
|
||||
<up-picker
|
||||
keyName="label"
|
||||
keyName="name"
|
||||
:show="majorShow"
|
||||
:columns="majorList"
|
||||
@confirm="onConfirmMajor"
|
||||
|
|
@ -228,7 +159,7 @@
|
|||
/>
|
||||
<!-- 工序选择器 -->
|
||||
<up-picker
|
||||
keyName="label"
|
||||
keyName="name"
|
||||
:show="procedureShow"
|
||||
:columns="procedureList"
|
||||
@confirm="onConfirmProcedure"
|
||||
|
|
@ -255,11 +186,19 @@
|
|||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref } from 'vue'
|
||||
import { reactive, ref, onMounted, watch } from 'vue'
|
||||
import { debounce } from 'lodash-es' // 引入防抖函数
|
||||
import { useCommon } from '@/hooks/useCommon.js'
|
||||
import {
|
||||
addImportantMattersApi,
|
||||
editImportantMattersApi,
|
||||
getImportantMattersDetailsByIdApi,
|
||||
} from '@/services/importantMatters.js'
|
||||
import { getProcedureApi } from '@/services/common.js'
|
||||
import TitleTipModal from '@/components/TitleTipModal/index'
|
||||
const addAndEditModelRef = ref(null)
|
||||
|
||||
const { getProjectList, getMajorList } = useCommon()
|
||||
const addAndEditModelRef = ref(null)
|
||||
const projectShow = ref(false) // 项目选择弹框
|
||||
const majorShow = ref(false) // 专业选择器
|
||||
const procedureShow = ref(false) // 工序选择器
|
||||
|
|
@ -267,6 +206,7 @@ const dateShow = ref(false) // 年月日选择器
|
|||
const onSearchProjectName = ref('') // 项目搜索条件
|
||||
const dateValue = ref(Date.now()) // 年月日选择器数据源
|
||||
const sendLoading = ref(false) // 加载中
|
||||
const maskLoading = ref(false)
|
||||
const dateType = ref(1)
|
||||
const props = defineProps({
|
||||
// 表单类型 1. 新增 2. 修改 3. 详情
|
||||
|
|
@ -274,25 +214,34 @@ const props = defineProps({
|
|||
type: [Number, String],
|
||||
default: () => 1,
|
||||
},
|
||||
// 列表id
|
||||
detailsId: {
|
||||
type: [Number, String],
|
||||
default: () => 1,
|
||||
},
|
||||
})
|
||||
|
||||
console.log(props.addAndEditFormType, '表单类型')
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
const projectListAll = ref([])
|
||||
// 专业数据源
|
||||
const majorList = reactive([])
|
||||
// 工序数据源
|
||||
const procedureList = reactive([])
|
||||
|
||||
// 表单数据源
|
||||
const addAndEditModel = reactive({
|
||||
projectName: '',
|
||||
procedure: '',
|
||||
major: '',
|
||||
examiner: '',
|
||||
inspectTime: '',
|
||||
correctionTerm: '',
|
||||
vrLocation: '',
|
||||
vrDescribe: '',
|
||||
vrImgList: [],
|
||||
correctionPerson: '',
|
||||
correctionDescribe: '',
|
||||
correctionTime: '',
|
||||
correctionImgList: [],
|
||||
dataSource: 2,
|
||||
proId: '', // 工程id
|
||||
proName: '', // 工程名称
|
||||
majorId: '', // 专业id
|
||||
majorName: '', // 专业名称
|
||||
gxId: '', // 工序id
|
||||
gxName: '', // 工序名称
|
||||
title: '', // 标题
|
||||
content: '', // 内容
|
||||
time: '', // 日期
|
||||
imgList: [],
|
||||
})
|
||||
|
||||
// 校验规则
|
||||
|
|
@ -305,99 +254,43 @@ const addAndEditModelRules = ref({
|
|||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
correctionTerm: [
|
||||
|
||||
content: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请选择整改期限',
|
||||
message: '请填写内容',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
vrLocation: [
|
||||
|
||||
imgList: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写违章地点',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
vrDescribe: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写违章描述',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
vrImgList: [
|
||||
{
|
||||
type: 'string',
|
||||
type: 'array',
|
||||
required: true,
|
||||
message: '请上传违章照片',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
correctionPerson: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写整改人',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
correctionDescribe: [
|
||||
{
|
||||
type: 'string',
|
||||
required: true,
|
||||
message: '请填写整改说明',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
})
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
// 专业数据源
|
||||
const majorList = reactive([
|
||||
[
|
||||
{
|
||||
label: '专业1',
|
||||
value: 2021,
|
||||
},
|
||||
{
|
||||
label: '专业2',
|
||||
value: 2022,
|
||||
},
|
||||
{
|
||||
label: '专业3',
|
||||
value: 2023,
|
||||
},
|
||||
{
|
||||
label: '专业4',
|
||||
value: 2024,
|
||||
},
|
||||
],
|
||||
])
|
||||
// 工序数据源
|
||||
const procedureList = reactive([
|
||||
[
|
||||
{
|
||||
label: '工序1',
|
||||
id: 2021,
|
||||
},
|
||||
{
|
||||
label: '工序2',
|
||||
id: 2022,
|
||||
},
|
||||
{
|
||||
label: '工序3',
|
||||
id: 2023,
|
||||
},
|
||||
{
|
||||
label: '工序4',
|
||||
id: 2024,
|
||||
},
|
||||
],
|
||||
])
|
||||
|
||||
// 获取工序
|
||||
const getProcedureData = async (pid) => {
|
||||
console.log(
|
||||
'%c🔍 获取工序请求入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
'pid=' + pid,
|
||||
)
|
||||
const { data: res } = await getProcedureApi({ pid })
|
||||
console.log(
|
||||
'%c🔍 获取工序请求出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
procedureList.push(res)
|
||||
}
|
||||
|
||||
// 日期格式化
|
||||
const formatter = (type, value) => {
|
||||
|
|
@ -415,13 +308,24 @@ const formatter = (type, value) => {
|
|||
|
||||
// 选择项目
|
||||
const onSelectProject = () => {
|
||||
console.log('---选择')
|
||||
|
||||
projectShow.value = true
|
||||
}
|
||||
// 搜索
|
||||
const onSearchInProjectPopup = () => {
|
||||
console.log('---搜索', onSearchProjectName.value)
|
||||
maskLoading.value = true
|
||||
try {
|
||||
if (!onSearchProjectName.value) {
|
||||
projectList.value = projectListAll.value
|
||||
return
|
||||
}
|
||||
|
||||
const searchTerm = onSearchProjectName.value.toLowerCase()
|
||||
projectList.value = projectListAll.value.filter(
|
||||
(e) => e.name && e.name.toLowerCase().includes(searchTerm),
|
||||
)
|
||||
} finally {
|
||||
maskLoading.value = false // 确保无论如何都会关闭 loading
|
||||
}
|
||||
}
|
||||
|
||||
// 滚动触底事件
|
||||
|
|
@ -431,7 +335,8 @@ const onScrollTolower = () => {
|
|||
|
||||
// 选择项目
|
||||
const onSelectProjectItem = (item) => {
|
||||
addAndEditModel.projectName = 'xxxxxx工程' + item
|
||||
addAndEditModel.proName = item.name
|
||||
addAndEditModel.proId = item.id
|
||||
projectShow.value = false
|
||||
}
|
||||
|
||||
|
|
@ -448,8 +353,9 @@ const onSelectMajor = () => {
|
|||
|
||||
// 专业确定
|
||||
const onConfirmMajor = (item) => {
|
||||
console.log('---确定', item.value[0].label)
|
||||
addAndEditModel.major = item.value[0].label
|
||||
addAndEditModel.majorName = item.value[0].name
|
||||
addAndEditModel.majorId = item.value[0].id
|
||||
getProcedureData(item.value[0].id)
|
||||
majorShow.value = false
|
||||
}
|
||||
// 选择工序
|
||||
|
|
@ -459,29 +365,20 @@ const onSelectProcedure = () => {
|
|||
|
||||
// 工序确定
|
||||
const onConfirmProcedure = (item) => {
|
||||
addAndEditModel.procedure = item.value[0].label
|
||||
addAndEditModel.gxName = item.value[0].name
|
||||
addAndEditModel.gxId = item.value[0].id
|
||||
procedureShow.value = false
|
||||
}
|
||||
|
||||
// 打开日期选择器
|
||||
const onSelectDate = (type) => {
|
||||
// type 为类型 1. 检查日期 2. 整改期限 3. 整改日期
|
||||
dateType.value = type
|
||||
const onSelectDate = () => {
|
||||
dateShow.value = true
|
||||
}
|
||||
|
||||
// 日期确定
|
||||
const onConfirmDate = (item) => {
|
||||
const formatDateValue = formatDate(dateValue.value)
|
||||
if (dateType.value === 1) {
|
||||
addAndEditModel.inspectTime = formatDateValue
|
||||
}
|
||||
if (dateType.value === 2) {
|
||||
addAndEditModel.correctionTerm = formatDateValue
|
||||
}
|
||||
if (dateType.value === 3) {
|
||||
addAndEditModel.correctionTime = formatDateValue
|
||||
}
|
||||
addAndEditModel.time = formatDateValue
|
||||
dateShow.value = false
|
||||
console.log('---日期确定', formatDateValue)
|
||||
}
|
||||
|
|
@ -494,57 +391,260 @@ const formatDate = (timestamp) => {
|
|||
return `${year}-${month}-${day}`
|
||||
}
|
||||
|
||||
// 违章照片上传
|
||||
// 照片上传
|
||||
const onAfterReadVrImgList = (event) => {
|
||||
let lists = [].concat(event.file)
|
||||
lists.map((item) => {
|
||||
addAndEditModel.vrImgList.push({
|
||||
addAndEditModel.imgList.push({
|
||||
...item,
|
||||
isEdit: false,
|
||||
})
|
||||
})
|
||||
}
|
||||
// 违章照片删除
|
||||
// 照片删除
|
||||
const onDeletePicVrImgList = (event) => {
|
||||
addAndEditModel.vrImgList.splice(event.index, 1)
|
||||
}
|
||||
|
||||
// 整改照片上传
|
||||
const onAfterReadCorrectionImgList = (event) => {
|
||||
let lists = [].concat(event.file)
|
||||
lists.map((item) => {
|
||||
addAndEditModel.correctionImgList.push({
|
||||
...item,
|
||||
})
|
||||
})
|
||||
}
|
||||
// 违章照片删除
|
||||
const onDeleteCorrectionImgList = (event) => {
|
||||
addAndEditModel.correctionImgList.splice(event.index, 1)
|
||||
addAndEditModel.imgList.splice(event.index, 1)
|
||||
}
|
||||
|
||||
// 提交
|
||||
const onSubmitForm = debounce(() => {
|
||||
console.log('---提交')
|
||||
sendLoading.value = true
|
||||
addAndEditModelRef.value.validate().then((valid) => {
|
||||
if (valid) {
|
||||
console.log('校验通过')
|
||||
sendLoading.value = false
|
||||
}
|
||||
})
|
||||
addAndEditModelRef.value
|
||||
.validate()
|
||||
.then(async (valid) => {
|
||||
if (valid) {
|
||||
// 先调上传接口把图片上传
|
||||
sendLoading.value = true
|
||||
const uploadImages = new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
let successCorrectionImgList = []
|
||||
let successCorrectionImgListNoEdit = []
|
||||
|
||||
if (addAndEditModel.imgList.length > 0) {
|
||||
successCorrectionImgListNoEdit = addAndEditModel.imgList.filter(
|
||||
(e) => !e.isEdit,
|
||||
)
|
||||
}
|
||||
|
||||
if (successCorrectionImgListNoEdit.length > 0) {
|
||||
successCorrectionImgList = await uploadImgFun(
|
||||
successCorrectionImgListNoEdit,
|
||||
)
|
||||
}
|
||||
|
||||
resolve({ successCorrectionImgList }) // 上传成功,返回结果
|
||||
} catch (error) {
|
||||
reject(error) // 上传失败,抛出错误
|
||||
}
|
||||
})
|
||||
|
||||
uploadImages
|
||||
.then(async ({ successCorrectionImgList }) => {
|
||||
// 这里写提交表单的逻辑
|
||||
// 组装参数
|
||||
const {
|
||||
dataSource,
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
title, // 标题
|
||||
content, // 内容
|
||||
time, // 日期
|
||||
imgList,
|
||||
} = addAndEditModel
|
||||
|
||||
const imgListOld = []
|
||||
|
||||
imgList.forEach((e) => {
|
||||
if (e.isEdit) imgListOld.push(e)
|
||||
})
|
||||
const addParams = {
|
||||
dataSource,
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
title, // 标题
|
||||
content, // 内容
|
||||
time, // 日期
|
||||
sysFileResourceList: [...imgListOld, ...successCorrectionImgList],
|
||||
uploadType: 3,
|
||||
}
|
||||
|
||||
const SED_API =
|
||||
props.addAndEditFormType == 1
|
||||
? addImportantMattersApi
|
||||
: editImportantMattersApi
|
||||
|
||||
if (props.addAndEditFormType == 2) {
|
||||
Object.assign(addParams, {
|
||||
id: props.detailsId,
|
||||
})
|
||||
}
|
||||
|
||||
console.log(
|
||||
'%c🔍 表单提交入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
addParams,
|
||||
)
|
||||
const res = await SED_API(addParams)
|
||||
console.log(
|
||||
'%c🔍 表单提交出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
sendLoading.value = false
|
||||
if (res.code === 200) {
|
||||
uni.$u.toast(res.data)
|
||||
setTimeout(() => {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
})
|
||||
}, 500)
|
||||
} else {
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
// console.error('图片上传失败:', error)
|
||||
})
|
||||
}
|
||||
})
|
||||
.catch((error) => {})
|
||||
}, 1000)
|
||||
|
||||
// 获取表单详情
|
||||
const getFormDetail = () => {
|
||||
console.log('---获取详情数据')
|
||||
}
|
||||
// props.addAndEditFormType 如果为2怎为编辑表单
|
||||
if (props.addAndEditFormType == 2) {
|
||||
// 先获取详情数据并回显
|
||||
getFormDetail()
|
||||
// 上传逻辑
|
||||
const uploadImgFun = async (list) => {
|
||||
console.log(list, '上传逻辑')
|
||||
return new Promise((resolve, reject) => {
|
||||
let successList = []
|
||||
let files = []
|
||||
|
||||
list.forEach((f) => {
|
||||
let d = {
|
||||
file: f.url,
|
||||
name: 'files',
|
||||
uri: f.url,
|
||||
}
|
||||
files.push(d)
|
||||
})
|
||||
|
||||
sendLoading.value = true
|
||||
|
||||
uni.uploadFile({
|
||||
url: '/imgTool/sys/file/uploadFile',
|
||||
files: files,
|
||||
name: 'files',
|
||||
formData: {
|
||||
params: JSON.stringify({
|
||||
uploadType: 5,
|
||||
sourceType: 9,
|
||||
sourceTypeName: '重要事项及宣传照片',
|
||||
}),
|
||||
},
|
||||
success: (res) => {
|
||||
sendLoading.value = false
|
||||
res = JSON.parse(res.data)
|
||||
|
||||
if (res.code === 200) {
|
||||
successList = res.data
|
||||
resolve(successList) // 上传成功,返回数据
|
||||
} else {
|
||||
uni.$u.toast('上传失败' + res.msg)
|
||||
reject(new Error('上传失败: ' + res.msg))
|
||||
}
|
||||
},
|
||||
fail: (err) => {
|
||||
sendLoading.value = false
|
||||
reject(new Error('网络错误: ' + err.errMsg))
|
||||
},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// 获取表单详情
|
||||
const getFormDetail = async () => {
|
||||
console.log(
|
||||
'%c🔍 获取重要事项及宣传类详情入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
props?.detailsId,
|
||||
)
|
||||
const res = await getImportantMattersDetailsByIdApi({ id: props?.detailsId })
|
||||
|
||||
console.log(
|
||||
'%c🔍 获取重要事项及宣传类详情出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
if (res.code === 200) {
|
||||
const {
|
||||
dataSource,
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
title, // 标题
|
||||
content, // 内容
|
||||
time, // 日期
|
||||
sysFileResourceList,
|
||||
} = res.data
|
||||
let correctionImgListEdit = []
|
||||
if (sysFileResourceList.length > 0) {
|
||||
correctionImgListEdit = sysFileResourceList.map((e) => {
|
||||
return {
|
||||
idEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
}
|
||||
})
|
||||
}
|
||||
Object.assign(addAndEditModel, {
|
||||
proId, // 工程id
|
||||
proName, // 工程名称
|
||||
majorId, // 专业id
|
||||
majorName, // 专业名称
|
||||
gxId, // 工序id
|
||||
gxName, // 工序名称
|
||||
title, // 标题
|
||||
content, // 内容
|
||||
time, // 日期
|
||||
imgList: correctionImgListEdit,
|
||||
})
|
||||
getProcedureData(majorId)
|
||||
}
|
||||
}
|
||||
|
||||
// 监听当前页面是新增还是修改
|
||||
watch(
|
||||
() => props.addAndEditFormType,
|
||||
(newValue) => {
|
||||
if (newValue != 1) {
|
||||
getFormDetail()
|
||||
}
|
||||
},
|
||||
{
|
||||
deep: true,
|
||||
immediate: true,
|
||||
},
|
||||
)
|
||||
|
||||
onMounted(async () => {
|
||||
projectList.value = await getProjectList()
|
||||
projectListAll.value = await getProjectList()
|
||||
majorList.push(await getMajorList())
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
|
@ -574,6 +674,20 @@ if (props.addAndEditFormType == 2) {
|
|||
.project-list {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
|
||||
.loading-mask {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background-color: #333;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
/>
|
||||
|
||||
<view class="container">
|
||||
<AddAndEditForm :addAndEditFormType="addAndEditFormType" />
|
||||
<AddAndEditForm :addAndEditFormType="addAndEditFormType" :detailsId="detailsId" />
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
|
@ -21,12 +21,16 @@ import { onLoad } from '@dcloudio/uni-app'
|
|||
|
||||
const { safeAreaInsets } = uni.getSystemInfoSync()
|
||||
const addAndEditFormType = ref(1)
|
||||
const detailsId = ref('')
|
||||
const uploadRecordUrl = ref('/pages/importantMatters/upload-record/index')
|
||||
|
||||
onLoad((query) => {
|
||||
if (query.type) {
|
||||
addAndEditFormType.value = query.type
|
||||
}
|
||||
if (query.id) {
|
||||
detailsId.value = query.id
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@
|
|||
<up-input
|
||||
clearable
|
||||
placeholder="输入搜索关键词"
|
||||
v-model.trim="onSearchKeyword"
|
||||
v-model.trim="queryParams.keyWord"
|
||||
suffixIconStyle="color: #909399"
|
||||
>
|
||||
<template #suffix>
|
||||
|
|
@ -18,109 +18,153 @@
|
|||
</view>
|
||||
</view>
|
||||
|
||||
<view class="upload-record-list">
|
||||
<view class="upload-record-list" v-if="importantMattersList.length > 0">
|
||||
<up-list @scrolltolower="onScrollTolower" style="width: 100%">
|
||||
<up-list-item v-for="item in 10" :key="item">
|
||||
<up-list-item v-for="item in importantMattersList" :key="item.id">
|
||||
<view class="record-item">
|
||||
<view @tap="onHandleViewDetails">
|
||||
<view @tap="onHandleViewDetails(item.id)">
|
||||
<!-- 日期 -->
|
||||
<view class="item-date">
|
||||
<text>2024-05-06</text>
|
||||
<text>{{ item.time }}</text>
|
||||
<view>
|
||||
<up-button
|
||||
size="mini"
|
||||
text="修改"
|
||||
type="primary"
|
||||
@tap="onHandleEditRecord"
|
||||
@tap="onHandleEditRecord(item.id)"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 名称 -->
|
||||
<view class="item-name">
|
||||
<text>N3917</text>
|
||||
<text>{{ item.title }}</text>
|
||||
</view>
|
||||
|
||||
<!-- 文字内容 -->
|
||||
<view class="text-content">
|
||||
<up-text
|
||||
:lines="2"
|
||||
text="关于uview-plus的取名来由,首字母u来自于uni-app首字母,
|
||||
uni-app是基Vuejs,Vue和View(延伸为UI、视图之意)同音,同时view组件uni-app中
|
||||
最础最重要的组件,故取名uview-plus,表达源于uni-app和Vue之意,同时在此也对它示感谢。"
|
||||
/>
|
||||
<up-text :lines="2" :text="item.content" />
|
||||
</view>
|
||||
</view>
|
||||
<!-- 图片内容 -->
|
||||
<view class="swiper-container">
|
||||
<up-swiper
|
||||
:list="list1"
|
||||
:indicator="true"
|
||||
:list="item.sysFileResourceList"
|
||||
interval="5000"
|
||||
@click="onClickSwiper"
|
||||
/>
|
||||
<view class="swiper-count"> 3张 </view>
|
||||
<view class="swiper-count">
|
||||
{{ item?.sysFileResourceList.length }}张
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 检查人 -->
|
||||
<view class="inspect-person">
|
||||
<view> 检查人:武松 </view>
|
||||
<view> 整改日期:2025-05-06 </view>
|
||||
<!-- <view> 检查人:武松 </view> -->
|
||||
</view>
|
||||
</view>
|
||||
</up-list-item>
|
||||
</up-list>
|
||||
|
||||
<view class="loading-text">
|
||||
{{ finish ? '没有更多数据了~' : '正在加载...' }}
|
||||
</view>
|
||||
</view>
|
||||
<up-empty mode="data" v-else />
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import NavBarModal from '@/components/NavBarModal/index'
|
||||
import { ref, reactive } from 'vue'
|
||||
import { ref, reactive, computed } from 'vue'
|
||||
import { debounce } from 'lodash-es' // 引入防抖函数
|
||||
const scrollTop = ref(0)
|
||||
const onSearchKeyword = ref('')
|
||||
const finish = ref(false)
|
||||
import { getImportantMattersListApi } from '@/services/importantMatters.js'
|
||||
const importantMattersList = ref([])
|
||||
const total = ref(0)
|
||||
|
||||
const list1 = reactive([
|
||||
'https://img1.baidu.com/it/u=1361177696,203903602&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1455',
|
||||
'https://img1.baidu.com/it/u=1361177696,203903602&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1455',
|
||||
'https://img1.baidu.com/it/u=1361177696,203903602&fm=253&fmt=auto&app=138&f=JPEG?w=800&h=1455',
|
||||
])
|
||||
// 查询条件
|
||||
const queryParams = ref({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
keyWord: '',
|
||||
})
|
||||
|
||||
// 获取上传记录列表数据
|
||||
const getImportantMattersListData = async (isTap = false) => {
|
||||
try {
|
||||
console.log(
|
||||
'%c🔍 获取重要事项及宣传类上传记录入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
queryParams.value,
|
||||
)
|
||||
const { data: res } = await getImportantMattersListApi(queryParams.value)
|
||||
|
||||
console.log(
|
||||
'%c🔍 获取重要事项及宣传类上传记录出参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
res,
|
||||
)
|
||||
|
||||
// 更新总数
|
||||
total.value = res.total
|
||||
// 处理数据
|
||||
if (isTap) {
|
||||
// 点击搜索时,直接替换数据
|
||||
importantMattersList.value = res?.list || []
|
||||
// 重置页码
|
||||
queryParams.value.pageNum = 1
|
||||
} else {
|
||||
// 下拉加载时,追加数据
|
||||
if (res.list && res.list.length > 0) {
|
||||
importantMattersList.value = [...importantMattersList.value, ...res.list]
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
// 发生错误时重置数据
|
||||
if (isTap) {
|
||||
importantMattersList.value = []
|
||||
}
|
||||
}
|
||||
}
|
||||
getImportantMattersListData()
|
||||
|
||||
// 滚动触底事件
|
||||
const onScrollTolower = debounce(() => {
|
||||
console.log('onScrollTolower')
|
||||
// 判断是否还有更多数据
|
||||
if (importantMattersList.value.length < total.value) {
|
||||
queryParams.value.pageNum++
|
||||
getImportantMattersListData(false)
|
||||
}
|
||||
}, 500)
|
||||
|
||||
// 判断数据是否加载完毕
|
||||
const finish = computed(() => {
|
||||
if (total.value === importantMattersList.value.length) return true
|
||||
})
|
||||
|
||||
// 搜索
|
||||
const onSearchRecord = () => {
|
||||
console.log('onSearchRecord', onSearchKeyword.value)
|
||||
getImportantMattersListData(true)
|
||||
}
|
||||
// 修改
|
||||
const onHandleEditRecord = () => {
|
||||
const onHandleEditRecord = (id) => {
|
||||
console.log('onHandleEditRecord')
|
||||
uni.redirectTo({
|
||||
url: `/pages/importantMatters/index?type=2&id=1`, // 强制跳转并传参
|
||||
url: `/pages/importantMatters/index?type=2&id=${id}`, // 强制跳转并传参
|
||||
})
|
||||
}
|
||||
|
||||
// 查看详情
|
||||
const onHandleViewDetails = () => {
|
||||
const onHandleViewDetails = (id) => {
|
||||
uni.redirectTo({
|
||||
url: `/pages/importantMatters/index?type=3&id=1`, // 强制跳转并传参
|
||||
url: `/pages/importantMatters/index?type=3&id=${id}`, // 强制跳转并传参
|
||||
})
|
||||
}
|
||||
|
||||
// 点击轮播图
|
||||
const onClickSwiper = (e) => {
|
||||
console.log(e, '点击了轮播图')
|
||||
}
|
||||
const onClickSwiper = (e) => {}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
|
@ -187,7 +231,7 @@ const onClickSwiper = (e) => {
|
|||
|
||||
.inspect-person {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
padding: 10rpx 16rpx;
|
||||
font-size: 14px;
|
||||
|
|
|
|||
|
|
@ -92,10 +92,12 @@
|
|||
</up-form-item>
|
||||
<up-form-item prop="vioDesc" label="检查描述" required>
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.vioDesc"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入检查描述'"
|
||||
/>
|
||||
</up-form-item>
|
||||
|
|
@ -141,9 +143,11 @@
|
|||
</up-form-item>
|
||||
<up-form-item prop="rectDesc" label="整改说明" required>
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
maxlength="200"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
v-model="addAndEditModel.rectDesc"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入整改说明'"
|
||||
/>
|
||||
|
|
@ -170,8 +174,8 @@
|
|||
text="提交"
|
||||
type="primary"
|
||||
@tap="onSubmitForm"
|
||||
style="width: 100%"
|
||||
v-if="addAndEditFormType != 3"
|
||||
v-if="props.addAndEditFormType != 3"
|
||||
style="width: 100%; margin-top: 10rpx"
|
||||
/>
|
||||
</up-form>
|
||||
|
||||
|
|
@ -284,6 +288,7 @@ const props = defineProps({
|
|||
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
const projectListAll = ref([])
|
||||
// 专业数据源
|
||||
const majorList = reactive([])
|
||||
// 工序数据源
|
||||
|
|
@ -330,6 +335,17 @@ const addAndEditModelRules = ref({
|
|||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
checkUserName: [
|
||||
{
|
||||
trigger: ['blur', 'change'],
|
||||
pattern: /^(?:[\u4e00-\u9fa5]{1,10}|[a-zA-Z][a-zA-Z\s\-.]{1,19})$/,
|
||||
// 正则检验前先将值转为字符串
|
||||
transform(value) {
|
||||
return String(value)
|
||||
},
|
||||
message: '请填写正确的人名',
|
||||
},
|
||||
],
|
||||
vioPlace: [
|
||||
{
|
||||
type: 'string',
|
||||
|
|
@ -375,10 +391,10 @@ const addAndEditModelRules = ref({
|
|||
// 获取工序
|
||||
const getProcedureData = async (pid) => {
|
||||
console.log(
|
||||
'%c🔍 获取专业请求入参 %c',
|
||||
'%c🔍 获取工序请求入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
pid,
|
||||
'pid=' + pid,
|
||||
)
|
||||
const { data: res } = await getProcedureApi({ pid })
|
||||
console.log(
|
||||
|
|
@ -410,7 +426,15 @@ const onSelectProject = () => {
|
|||
}
|
||||
// 搜索
|
||||
const onSearchInProjectPopup = () => {
|
||||
// console.log('---搜索', onSearchProjectName.value)
|
||||
if (!onSearchProjectName.value) {
|
||||
projectList.value = projectListAll.value // 如果搜索为空,返回所有项目
|
||||
return
|
||||
}
|
||||
|
||||
const searchTerm = onSearchProjectName.value.toLowerCase()
|
||||
projectList.value = projectListAll.value.filter(
|
||||
(e) => e.name && e.name.toLowerCase().includes(searchTerm),
|
||||
)
|
||||
}
|
||||
|
||||
// 滚动触底事件
|
||||
|
|
@ -548,28 +572,17 @@ const onSubmitForm = debounce(() => {
|
|||
let successCorrectionImgListNoEdit = []
|
||||
|
||||
if (addAndEditModel.vrImgList.length > 0) {
|
||||
successVrImgListNoEdit = addAndEditModel.vrImgList.map((e) => {
|
||||
if (!e.isEdit) {
|
||||
return {
|
||||
...e,
|
||||
}
|
||||
}
|
||||
})
|
||||
successVrImgListNoEdit = addAndEditModel.vrImgList.filter(
|
||||
(e) => !e.isEdit,
|
||||
)
|
||||
|
||||
if (successVrImgListNoEdit.length > 0) {
|
||||
successVrImgList = await uploadImgFun(successVrImgListNoEdit, 3)
|
||||
}
|
||||
}
|
||||
if (addAndEditModel.correctionImgList.length > 0) {
|
||||
successCorrectionImgListNoEdit = addAndEditModel.correctionImgList.map(
|
||||
(e) => {
|
||||
if (!e.isEdit) {
|
||||
return {
|
||||
...e,
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
successCorrectionImgListNoEdit =
|
||||
addAndEditModel.correctionImgList.filter((e) => !e.isEdit)
|
||||
|
||||
if (successCorrectionImgListNoEdit.length > 0) {
|
||||
successCorrectionImgList = await uploadImgFun(
|
||||
|
|
@ -752,7 +765,7 @@ const getFormDetail = async () => {
|
|||
if (rectPhotoList.length > 0) {
|
||||
rectPhotoListEdit = rectPhotoList.map((e) => {
|
||||
return {
|
||||
idEdit: true,
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
}
|
||||
|
|
@ -761,7 +774,7 @@ const getFormDetail = async () => {
|
|||
if (vioPhotoList.length > 0) {
|
||||
vioPhotoListEdit = vioPhotoList.map((e) => {
|
||||
return {
|
||||
idEdit: true,
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
}
|
||||
|
|
@ -793,6 +806,7 @@ const getFormDetail = async () => {
|
|||
|
||||
onMounted(async () => {
|
||||
projectList.value = await getProjectList()
|
||||
projectListAll.value = await getProjectList()
|
||||
majorList.push(await getMajorList())
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -80,8 +80,10 @@
|
|||
</up-form-item>
|
||||
<up-form-item prop="checkDesc" label="检查描述" required>
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
maxlength="200"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
v-model="addAndEditModel.checkDesc"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入检查描述'"
|
||||
|
|
@ -111,6 +113,7 @@
|
|||
type="primary"
|
||||
text="提交"
|
||||
@tap="onSubmitForm"
|
||||
v-if="props.addAndEditFormType != 3"
|
||||
style="width: 100%; margin-top: 10rpx"
|
||||
/>
|
||||
</up-form>
|
||||
|
|
@ -274,6 +277,7 @@ const addAndEditModelRules = ref({
|
|||
})
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
const projectListAll = ref([])
|
||||
// 专业数据源
|
||||
const majorList = ref([])
|
||||
|
||||
|
|
@ -297,10 +301,10 @@ const procedureList = reactive([])
|
|||
// 获取工序
|
||||
const getProcedureData = async (pid) => {
|
||||
console.log(
|
||||
'%c🔍 获取专业请求入参 %c',
|
||||
'%c🔍 获取工序请求入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
pid,
|
||||
'pid=' + pid,
|
||||
)
|
||||
const { data: res } = await getProcedureApi({ pid })
|
||||
console.log(
|
||||
|
|
@ -318,7 +322,15 @@ const onSelectProject = () => {
|
|||
}
|
||||
// 搜索
|
||||
const onSearchInProjectPopup = () => {
|
||||
// console.log('---搜索', onSearchProjectName.value)
|
||||
if (!onSearchProjectName.value) {
|
||||
projectList.value = projectListAll.value // 如果搜索为空,返回所有项目
|
||||
return
|
||||
}
|
||||
|
||||
const searchTerm = onSearchProjectName.value.toLowerCase()
|
||||
projectList.value = projectListAll.value.filter(
|
||||
(e) => e.name && e.name.toLowerCase().includes(searchTerm),
|
||||
)
|
||||
}
|
||||
|
||||
// 滚动触底事件
|
||||
|
|
@ -601,7 +613,7 @@ const getFormDetail = async () => {
|
|||
if (sysFileResourceList.length > 0) {
|
||||
correctionImgListEdit = sysFileResourceList.map((e) => {
|
||||
return {
|
||||
idEdit: true,
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
}
|
||||
|
|
@ -642,6 +654,7 @@ watch(
|
|||
|
||||
onMounted(async () => {
|
||||
projectList.value = await getProjectList()
|
||||
projectListAll.value = await getProjectList()
|
||||
majorList.value.push(await getMajorList())
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ getSafetyMeasureListData()
|
|||
const onScrollTolower = debounce(() => {
|
||||
// 判断是否还有更多数据
|
||||
if (safetyMeasureList.value.length < total.value) {
|
||||
queryParams.value.page++
|
||||
queryParams.value.pageNum++
|
||||
getSafetyMeasureListData(false)
|
||||
}
|
||||
}, 500)
|
||||
|
|
|
|||
|
|
@ -92,10 +92,12 @@
|
|||
</up-form-item>
|
||||
<up-form-item prop="vioDesc" label="违章描述" required>
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.vioDesc"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入违章描述'"
|
||||
/>
|
||||
</up-form-item>
|
||||
|
|
@ -141,10 +143,12 @@
|
|||
</up-form-item>
|
||||
<up-form-item prop="rectDesc" label="整改说明" required>
|
||||
<up-textarea
|
||||
count
|
||||
autoHeight
|
||||
border="none"
|
||||
:readonly="props.addAndEditFormType == 3"
|
||||
maxlength="200"
|
||||
v-model="addAndEditModel.rectDesc"
|
||||
:disabled="props.addAndEditFormType == 3"
|
||||
:placeholder="props.addAndEditFormType == 3 ? '' : '请输入整改说明'"
|
||||
/>
|
||||
</up-form-item>
|
||||
|
|
@ -170,8 +174,8 @@
|
|||
text="提交"
|
||||
type="primary"
|
||||
@tap="onSubmitForm"
|
||||
style="width: 100%"
|
||||
v-if="addAndEditFormType != 3"
|
||||
v-if="props.addAndEditFormType != 3"
|
||||
style="width: 100%; margin-top: 10rpx"
|
||||
/>
|
||||
</up-form>
|
||||
|
||||
|
|
@ -284,6 +288,7 @@ const props = defineProps({
|
|||
|
||||
// 项目数据源
|
||||
const projectList = ref([])
|
||||
const projectListAll = ref([])
|
||||
// 专业数据源
|
||||
const majorList = reactive([])
|
||||
// 工序数据源
|
||||
|
|
@ -375,10 +380,10 @@ const addAndEditModelRules = ref({
|
|||
// 获取工序
|
||||
const getProcedureData = async (pid) => {
|
||||
console.log(
|
||||
'%c🔍 获取专业请求入参 %c',
|
||||
'%c🔍 获取工序请求入参 %c',
|
||||
'background: linear-gradient(90deg, #FF6B6B, #4ECDC4); color: white; padding: 5px 10px; border-radius: 5px; font-weight: bold;',
|
||||
'',
|
||||
pid,
|
||||
'pid=' + pid,
|
||||
)
|
||||
const { data: res } = await getProcedureApi({ pid })
|
||||
console.log(
|
||||
|
|
@ -412,7 +417,15 @@ const onSelectProject = () => {
|
|||
}
|
||||
// 搜索
|
||||
const onSearchInProjectPopup = () => {
|
||||
// console.log('---搜索', onSearchProjectName.value)
|
||||
if (!onSearchProjectName.value) {
|
||||
projectList.value = projectListAll.value // 如果搜索为空,返回所有项目
|
||||
return
|
||||
}
|
||||
|
||||
const searchTerm = onSearchProjectName.value.toLowerCase()
|
||||
projectList.value = projectListAll.value.filter(
|
||||
(e) => e.name && e.name.toLowerCase().includes(searchTerm),
|
||||
)
|
||||
}
|
||||
|
||||
// 滚动触底事件
|
||||
|
|
@ -550,28 +563,17 @@ const onSubmitForm = debounce(() => {
|
|||
let successCorrectionImgListNoEdit = []
|
||||
|
||||
if (addAndEditModel.vrImgList.length > 0) {
|
||||
successVrImgListNoEdit = addAndEditModel.vrImgList.map((e) => {
|
||||
if (!e.isEdit) {
|
||||
return {
|
||||
...e,
|
||||
}
|
||||
}
|
||||
})
|
||||
successVrImgListNoEdit = addAndEditModel.vrImgList.filter(
|
||||
(e) => !e.isEdit,
|
||||
)
|
||||
|
||||
if (successVrImgListNoEdit.length > 0) {
|
||||
successVrImgList = await uploadImgFun(successVrImgListNoEdit, 1)
|
||||
}
|
||||
}
|
||||
if (addAndEditModel.correctionImgList.length > 0) {
|
||||
successCorrectionImgListNoEdit = addAndEditModel.correctionImgList.map(
|
||||
(e) => {
|
||||
if (!e.isEdit) {
|
||||
return {
|
||||
...e,
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
successCorrectionImgListNoEdit =
|
||||
addAndEditModel.correctionImgList.filter((e) => !e.isEdit)
|
||||
|
||||
if (successCorrectionImgListNoEdit.length > 0) {
|
||||
successCorrectionImgList = await uploadImgFun(
|
||||
|
|
@ -658,13 +660,13 @@ const onSubmitForm = debounce(() => {
|
|||
sendLoading.value = false
|
||||
if (res.code === 200) {
|
||||
uni.$u.toast(res.data)
|
||||
// setTimeout(() => {
|
||||
// uni.navigateBack({
|
||||
// delta: 1,
|
||||
// })
|
||||
// }, 500)
|
||||
setTimeout(() => {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
})
|
||||
}, 500)
|
||||
} else {
|
||||
uni.$u.toast(res.data)
|
||||
uni.$u.toast(res.msg)
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
|
|
@ -751,19 +753,19 @@ const getFormDetail = async () => {
|
|||
let rectPhotoListEdit = []
|
||||
let vioPhotoListEdit = []
|
||||
|
||||
if (rectPhotoList.length > 0) {
|
||||
if (rectPhotoList?.length > 0) {
|
||||
rectPhotoListEdit = rectPhotoList.map((e) => {
|
||||
return {
|
||||
idEdit: true,
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
}
|
||||
})
|
||||
}
|
||||
if (vioPhotoList.length > 0) {
|
||||
if (vioPhotoList?.length > 0) {
|
||||
vioPhotoListEdit = vioPhotoList.map((e) => {
|
||||
return {
|
||||
idEdit: true,
|
||||
isEdit: true,
|
||||
url: e.originalFilePath,
|
||||
...e,
|
||||
}
|
||||
|
|
@ -809,6 +811,7 @@ watch(
|
|||
|
||||
onMounted(async () => {
|
||||
projectList.value = await getProjectList()
|
||||
projectListAll.value = await getProjectList()
|
||||
majorList.push(await getMajorList())
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export const getProjectApi = (data) => {
|
|||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/sys/select/getProsSelect',
|
||||
isPassWord: true,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
|
|
|
|||
|
|
@ -0,0 +1,38 @@
|
|||
import { http } from '@/utils/http'
|
||||
|
||||
// 综合查询获取分类数量
|
||||
export const getClassCountApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/app/synthesisQuery/getImgNum',
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
isPassWord: true,
|
||||
data,
|
||||
})
|
||||
}
|
||||
// 综合查询获取分类数量
|
||||
export const getImgListApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
isPassWord: true,
|
||||
url: '/imgTool/app/synthesisQuery/getImgList',
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
data,
|
||||
})
|
||||
}
|
||||
// 综合查询收藏以及取消收藏
|
||||
export const editCollectTypeApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/app/synthesisQuery/collectData',
|
||||
isPassWord: true,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
data,
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import { http } from '@/utils/http'
|
||||
|
||||
// 协调照片表单提交接口
|
||||
export const addCoordinatePhotoApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/coordinatePhoto/addCoordinatePhoto',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
// 协调照片数据列表
|
||||
export const getCoordinatePhotoListApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/coordinatePhoto/getCoordinatePhotoList',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
// 协调照片表单获取详情
|
||||
export const getCoordinatePhotoDetailsByIdApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/coordinatePhoto/getCoordinatePhotoById',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
// 协调照片表单修改
|
||||
export const editCoordinatePhotoApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/coordinatePhoto/updateCoordinatePhoto',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
@ -0,0 +1,46 @@
|
|||
import { http } from '@/utils/http'
|
||||
|
||||
// 重要事项及宣传类表单提交接口
|
||||
export const addImportantMattersApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/importantMatter/addImportantMatter',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
// 重要事项及宣传类数据列表
|
||||
export const getImportantMattersListApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/importantMatter/getImportantMatterList',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
// 重要事项及宣传类表单获取详情
|
||||
export const getImportantMattersDetailsByIdApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/importantMatter/getImportantMatterById',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
// 重要事项及宣传类表单修改
|
||||
export const editImportantMattersApi = (data) => {
|
||||
return http({
|
||||
method: 'POST',
|
||||
url: '/imgTool/importantMatter/updateImportantMatter',
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
})
|
||||
}
|
||||
|
|
@ -6,6 +6,7 @@ export const loginApi = (data) => {
|
|||
method: 'POST',
|
||||
url: '/imgTool/login',
|
||||
isEncrypt: true,
|
||||
isPassWord: false,
|
||||
data,
|
||||
header: {
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
|
|
|
|||
|
|
@ -7,8 +7,10 @@ import { cloneDeep } from 'lodash-es' // 引入深拷贝函数
|
|||
* 拦截 request 请求
|
||||
* baseURL 设置请求ip地址和端口
|
||||
*/
|
||||
const ENV = process.env.NODE_ENV
|
||||
const baseURL = ENV === 'development' ? '/api' : 'http://192.168.0.133:11997'
|
||||
// const ENV = process.env.NODE_ENV
|
||||
// const baseURL = ENV === 'development' ? '/api' : 'http://192.168.0.133:11997'
|
||||
|
||||
const baseURL = import.meta.env.VITE_API_BASE_URL
|
||||
/**
|
||||
* httpInterceptor 分别拦截 request 和 uploadFile 请求
|
||||
*/
|
||||
|
|
@ -21,17 +23,20 @@ const httpInterceptor = {
|
|||
options.url = baseURL + options.url
|
||||
}
|
||||
|
||||
if (options.isEncrypt) {
|
||||
if (options.data) {
|
||||
options.data = cloneDeep(options.data) // 参数深拷贝 避免影响视图
|
||||
for (const key in options.data) {
|
||||
options.data[key] = encrypt(options.data[key])
|
||||
if (options?.isPassWord) {
|
||||
if (options.isEncrypt) {
|
||||
if (options.data) {
|
||||
options.data = cloneDeep(options.data) // 参数深拷贝 避免影响视图
|
||||
for (const key in options.data) {
|
||||
options.data[key] = encrypt(options.data[key])
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!options.isNull) {
|
||||
options.data = {
|
||||
encryptedData: encrypt(JSON.stringify(options.data)),
|
||||
} else {
|
||||
if (!options.isNull) {
|
||||
options.data = {
|
||||
// encryptedData: encrypt(JSON.stringify(options.data)),
|
||||
encryptedData: JSON.stringify(options.data),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
export function formatCustomNumber(num) {
|
||||
const str = num.toString()
|
||||
const len = str.length
|
||||
|
||||
if (len <= 2) return str // 不足2位直接返回
|
||||
|
||||
// 最后2位单独处理
|
||||
const lastTwo = str.slice(-2)
|
||||
const rest = str.slice(0, -2)
|
||||
|
||||
// 每3位加逗号
|
||||
const formattedRest = rest.replace(/\B(?=(\d{3})+(?!\d))/g, ',')
|
||||
|
||||
return `${formattedRest},${lastTwo}`
|
||||
}
|
||||
|
|
@ -10,7 +10,8 @@ export default defineConfig({
|
|||
'/api': {
|
||||
// target: 'http://192.168.0.133:11997', // 梁超
|
||||
// target: 'http://192.168.0.137:11997', // 方亮
|
||||
target: 'http://192.168.0.60:11997', // 赵福海
|
||||
// target: 'http://192.168.0.60:11997', // 赵福海
|
||||
target: 'http://192.168.0.39:11997', // 陈长文
|
||||
changeOrigin: true,
|
||||
rewrite: (path) => {
|
||||
return path.replace(/\/api/, '')
|
||||
|
|
|
|||
Loading…
Reference in New Issue