|
@@ -58,7 +58,15 @@
|
|
|
<span>下载PDF</span>
|
|
|
</el-button>
|
|
|
</HcTooltip>
|
|
|
-
|
|
|
+ <HcTooltip keys="image-data-download">
|
|
|
+ <el-button
|
|
|
+ :disabled="tableCheckedKeys.length <= 0" :loading="downPdfLoading" hc-btn
|
|
|
+ @click="combineAlbumClick"
|
|
|
+ >
|
|
|
+ <HcIcon name="play-list-add" />
|
|
|
+ <span>组成相册</span>
|
|
|
+ </el-button>
|
|
|
+ </HcTooltip>
|
|
|
<HcTooltip keys="image-data-del">
|
|
|
<el-button
|
|
|
:disabled="tableCheckedKeys.length <= 0" :loading="delLoading" hc-btn
|
|
@@ -138,6 +146,24 @@
|
|
|
您的浏览器不支持 video
|
|
|
</video>
|
|
|
</hc-new-dialog>
|
|
|
+ <!-- 组成相册 弹框 -->
|
|
|
+ <hc-new-dialog v-model="albumDialog" title="预览" widths="47rem" :loading="albumDialogLoading" @save="saveAlbum">
|
|
|
+ <el-form ref="albumFormRef" :model="albumForm" label-width="auto" :rules="albumRules">
|
|
|
+ <el-form-item label="相册文件题名" prop="imagesName">
|
|
|
+ <el-input v-model="albumForm.imagesName" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="主要拍摄人" prop="photographer">
|
|
|
+ <el-input v-model="albumForm.photographer" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="分组号">
|
|
|
+ <el-input v-model="albumForm.groupNumber" />
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="拍摄起止日期">
|
|
|
+ <!-- <el-input v-model="albumForm.dateValue" /> -->
|
|
|
+ <hc-date-picker :dates="betweenTime" clearable @change="betweenTimeUpdate" />
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ </hc-new-dialog>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
@@ -149,10 +175,11 @@ import WbsTree from './components/WbsTree.vue'
|
|
|
import HcTreeData from './components/HcTreeData.vue'
|
|
|
import imageApi from '~api/other-file/imageData'
|
|
|
import { getStoreValue, setStoreValue } from '~src/utils/storage'
|
|
|
-import { arrToId, downloadBlob, getArrValue } from 'js-fast-way'
|
|
|
+import { arrToId, arrToKey, downloadBlob, getArrValue } from 'js-fast-way'
|
|
|
import { HcDelMsg } from 'hc-vue3-ui'
|
|
|
import { toPdfPage } from '~uti/btn-auth'
|
|
|
import website from '~src/config'
|
|
|
+import albumApi from '~api/other-file/album'
|
|
|
|
|
|
//变量
|
|
|
const router = useRouter()
|
|
@@ -545,6 +572,101 @@ const onmousedown = () => {
|
|
|
document.onmouseup = null
|
|
|
}
|
|
|
}
|
|
|
+//组成相册
|
|
|
+const albumDialog = ref(false)
|
|
|
+const albumFormRef = ref(null)
|
|
|
+const albumForm = ref({})
|
|
|
+const albumRules = ref({
|
|
|
+ imagesName: [
|
|
|
+ { required: true, message: '请输入相册文件题名', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+ photographer: [
|
|
|
+ { required: true, message: '请输入相册文件题名', trigger: 'blur' },
|
|
|
+ ],
|
|
|
+})
|
|
|
+
|
|
|
+//日期时间被选择
|
|
|
+const betweenTime = ref([])
|
|
|
+const betweenTimeUpdate = ({ arr, val, query }, row) => {
|
|
|
+ betweenTime.value = arr
|
|
|
+ albumForm.value.dateValue = query
|
|
|
+ console.log(arr, 'val')
|
|
|
+
|
|
|
+ console.log(query, 'query')
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+const combineAlbumClick = ()=>{
|
|
|
+ albumForm.value = {
|
|
|
+ imagesName: '',
|
|
|
+ photographer: '',
|
|
|
+ groupNumber: '',
|
|
|
+ dateValue: '',
|
|
|
+ }
|
|
|
+ betweenTime.value = []
|
|
|
+ albumDialog.value = true
|
|
|
+const arr = getDateRangeFromShootTime(tableCheckedKeys.value)
|
|
|
+console.log(arr, 'arr')
|
|
|
+// albumForm.value.dateValue = arr
|
|
|
+betweenTime.value = arr
|
|
|
+
|
|
|
+ albumForm.value.dateValue = arr.join('~')
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|
|
|
+const getDateRangeFromShootTime = (items) =>{
|
|
|
+ if (!items || items.length === 0) return [null, null]
|
|
|
+
|
|
|
+ // 提取并格式化所有有效日期
|
|
|
+ const dates = items
|
|
|
+ .map(item => item.shootingTimeStr)
|
|
|
+ .filter(time => typeof time === 'string' && time.trim() !== '')
|
|
|
+ .map(time => {
|
|
|
+ const date = new Date(time)
|
|
|
+ return isNaN(date.getTime()) ? null : date
|
|
|
+ })
|
|
|
+ .filter(Boolean)
|
|
|
+
|
|
|
+ if (dates.length === 0) return [null, null]
|
|
|
+
|
|
|
+ // 获取最早和最晚日期
|
|
|
+ const minDate = new Date(Math.min(...dates))
|
|
|
+ const maxDate = new Date(Math.max(...dates))
|
|
|
+
|
|
|
+ // 格式化为 YYYY-MM-DD
|
|
|
+ const formatDate = (date) => date.toISOString().split('T')[0]
|
|
|
+
|
|
|
+ return [formatDate(minDate), formatDate(maxDate)]
|
|
|
+}
|
|
|
+
|
|
|
+// 使用示例
|
|
|
+const [startDate, endDate] = getDateRangeFromShootTime(tableCheckedKeys.value)
|
|
|
+console.log('日期范围:', [startDate, endDate]) // 输出: ["2025-07-01", "2025-07-31"]
|
|
|
+const albumDialogLoading = ref(false)
|
|
|
+const saveAlbum = async () => {
|
|
|
+ const rows = tableCheckedKeys.value
|
|
|
+ const margePdfUrls = arrToKey(rows, 'margePdfUrl', ',')
|
|
|
+ console.log(margePdfUrls, 'margePdfUrls')
|
|
|
+
|
|
|
+ albumDialogLoading.value = true
|
|
|
+ const { error, code, msg } = await albumApi.save(
|
|
|
+ { ...albumForm.value,
|
|
|
+ projectId:projectId.value,
|
|
|
+ contractId: contractId.value,
|
|
|
+ classifyId:dataId.value,
|
|
|
+ margePdfUrls: margePdfUrls.split(','),
|
|
|
+ },
|
|
|
+ )
|
|
|
+ //判断状态
|
|
|
+ if (!error && code === 200) {
|
|
|
+ window.$message?.success(msg)
|
|
|
+ getTableData()
|
|
|
+ albumDialog.value = false
|
|
|
+ }
|
|
|
+ albumDialogLoading.value = false
|
|
|
+}
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|