Merge remote-tracking branch 'origin/master'
| | |
| | | } |
| | | } |
| | | |
| | | .el-select__wrapper.is-disabled .el-select__selected-item { |
| | | color: #a8abb2; |
| | | } |
| | | |
| | | .el-select { |
| | | --el-select-border-color-hover: rgb(0, 162, 255) !important; |
| | | } |
| | |
| | | <div class="val">{{ formData.areaName || '-' }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">部署模式</div> |
| | | <div class="val">{{ deploymentModeLabel(formData.deploymentMode) }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">排序</div> |
| | | <div class="val">{{ formData.sort }}</div> |
| | | </el-col> |
| | |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="部署模式" prop="deploymentMode"> |
| | | <el-radio-group v-model="formData.deploymentMode" class="command-radio-group"> |
| | | <el-radio :label="0">统一部署</el-radio> |
| | | <el-radio :label="1">独立部署</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="备注" prop="remark"> |
| | | <el-input class="command-input" v-model="formData.remark" type="textarea" :rows="3" placeholder="请输入" clearable /> |
| | |
| | | deptNature: null, |
| | | areaCode: [], |
| | | areaName: '', |
| | | deploymentMode: 0, |
| | | sort: 0, |
| | | remark: '', |
| | | }) |
| | |
| | | deptCategory: fieldRules(true), |
| | | deptNature: fieldRules(true), |
| | | areaCode: fieldRules(true), |
| | | deploymentMode: fieldRules(true), |
| | | sort: fieldRules(true), |
| | | } |
| | | |
| | | function deploymentModeLabel(value) { |
| | | if (value === 1) return '独立部署' |
| | | if (value === 0) return '统一部署' |
| | | return value ?? '-' |
| | | } |
| | | |
| | | function normalizeAreaCode(value) { |
| | |
| | | <el-table-column prop="sort" show-overflow-tooltip width="80" label="排序" /> |
| | | <el-table-column prop="bingId" show-overflow-tooltip width="100" label="组织id" /> |
| | | <el-table-column prop="areaName" show-overflow-tooltip width="180" label="行政区划" /> |
| | | <el-table-column prop="deploymentMode" show-overflow-tooltip width="120" label="部署模式"> |
| | | <template v-slot="{ row }"> |
| | | {{ deploymentModeLabel(row.deploymentMode) }} |
| | | </template> |
| | | </el-table-column> |
| | | |
| | | <el-table-column label="操作" class-name="operation-btns" width="220"> |
| | | <template v-slot="{ row }"> |
| | | <el-link @click="handleView(row)">查看</el-link> |
| | |
| | | |
| | | provide('dictObj', dictObj) |
| | | provide('deptTree', deptTree) |
| | | |
| | | function deploymentModeLabel(value) { |
| | | if (value === 1) return '独立部署' |
| | | if (value === 0) return '统一部署' |
| | | return value ?? '-' |
| | | } |
| | | |
| | | async function getList() { |
| | | loading.value = true |
| | |
| | | <div class="label">账号状态</div> |
| | | <div class="val">{{ formData.statusName }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">到期时间</div> |
| | | <div class="val">{{ formData.expireTime }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">次数限制</div> |
| | | <div class="val">{{ formData.maxLoginNum }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">飞行开始时间</div> |
| | | <div class="val">{{ formData.flightStartTime }}</div> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <div class="label">飞行结束时间</div> |
| | | <div class="val">{{ formData.flightEndTime }}</div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | |
| | | <div class="detail-title">登录限制</div> |
| | | <el-row :gutter="16"> |
| | | <el-col :span="12"> |
| | | <el-form-item label="到期时间" prop="expireTime"> |
| | | <el-date-picker |
| | | class="command-date-picker" |
| | | popper-class="command-date-picker-popper" |
| | | v-model="formData.expireTime" |
| | | type="datetime" |
| | | placeholder="请选择" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="次数限制" prop="maxLoginNum"> |
| | | <el-input class="command-input" v-model="formData.maxLoginNum" placeholder="请输入" clearable /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="飞行开始时间" prop="flightStartTime"> |
| | | <el-time-picker |
| | | class="command-date-picker" |
| | | popper-class="command-date-picker-popper" |
| | | v-model="formData.flightStartTime" |
| | | placeholder="请选择" |
| | | format="HH:mm" |
| | | value-format="HH:mm" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="飞行结束时间" prop="flightEndTime"> |
| | | <el-time-picker |
| | | class="command-date-picker" |
| | | popper-class="command-date-picker-popper" |
| | | v-model="formData.flightEndTime" |
| | | placeholder="请选择" |
| | | format="HH:mm" |
| | | value-format="HH:mm" |
| | | clearable |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | |
| | | <template #footer> |
| | |
| | | code: '', |
| | | roleId: '', |
| | | deptId: '', |
| | | expireTime: '', |
| | | maxLoginNum: '', |
| | | flightStartTime: '', |
| | | flightEndTime: '', |
| | | }) |
| | | |
| | | const treeProps = { |
| | |
| | | visible.value = false |
| | | } |
| | | |
| | | function validateFlightTime() { |
| | | if (formData.value.flightStartTime && formData.value.flightEndTime) { |
| | | const [startHours, startMinutes] = formData.value.flightStartTime.split(':').map(Number) |
| | | const [endHours, endMinutes] = formData.value.flightEndTime.split(':').map(Number) |
| | | const startTotalMinutes = startHours * 60 + startMinutes |
| | | const endTotalMinutes = endHours * 60 + endMinutes |
| | | if (endTotalMinutes < startTotalMinutes) { |
| | | ElMessage.error('飞行结束时间不能小于飞行开始时间') |
| | | return false |
| | | } |
| | | } |
| | | return true |
| | | } |
| | | |
| | | async function handleSubmit() { |
| | | const isValid = await formRef.value?.validate().catch(() => false) |
| | | if (!isValid) return |
| | | if (!validateFlightTime()) return |
| | | submitting.value = true |
| | | try { |
| | | const submitData = { ...formData.value } |
| | |
| | | |
| | | # xt接口地址 |
| | | VITE_APP_URL_XT=http://218.202.104.82:8200 |
| | | |
| | | # 预览地址 previewURL |
| | | VITE_APP_PREVIEW_URL=http://192.168.1.204:8012 |
| | |
| | | <el-table-column prop="resourceName" show-overflow-tooltip label="资源名称" /> |
| | | <el-table-column prop="resourceCode" show-overflow-tooltip label="资源编码" /> |
| | | <el-table-column prop="caseDesc" show-overflow-tooltip label="案例描述" /> |
| | | <el-table-column label="操作" class-name="operation-btns" width="240"> |
| | | <el-table-column label="操作" class-name="operation-btns" width="150"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openForm('view', row)">查看</el-link> |
| | | <!-- <el-link type="primary" @click="openForm('edit', row)">编辑</el-link>--> |
| | |
| | | <el-table-column prop="handleUnit" show-overflow-tooltip label="处理单位" /> |
| | | <el-table-column prop="objectionDesc" show-overflow-tooltip label="异议描述" /> |
| | | <el-table-column prop="objectionBasis" show-overflow-tooltip label="异议依据" /> |
| | | <el-table-column prop="attachName" show-overflow-tooltip label="附件名称" /> |
| | | <el-table-column prop="attachNames" show-overflow-tooltip label="附件名称" /> |
| | | <el-table-column prop="reviewOpinion" show-overflow-tooltip label="审核意见" /> |
| | | <el-table-column label="操作" class-name="operation-btns" width="240"> |
| | | <el-table-column label="操作" class-name="operation-btns" width="150"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openForm('view', row)">查看</el-link> |
| | | <el-link type="primary" @click="openForm('edit', row)" v-if="!['1', '2'].includes(row.objectionStatus)">编辑</el-link> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="evaluationContent" show-overflow-tooltip label="评价内容" /> |
| | | <el-table-column label="操作" class-name="operation-btns" width="240"> |
| | | <el-table-column label="操作" class-name="operation-btns" width="150"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openForm('view', row)">查看</el-link> |
| | | <el-link type="primary" @click="openForm('edit', row)">编辑</el-link> |
| | |
| | | </div> |
| | | <template #footer> |
| | | <template v-if="detailDemandStatus === '1' && !requesterProvider"> |
| | | <el-button color="#F2F3F5" @click="rejectTheApplication">拒绝申请</el-button> |
| | | <el-button class="" color="#4C34FF" @click="approvedByTheReview">审核通过</el-button> |
| | | <el-button color="#F2F3F5" :loading="submitting" :disabled="submitting" @click="rejectTheApplication">拒绝申请</el-button> |
| | | <el-button class="" color="#4C34FF" :loading="submitting" :disabled="submitting" @click="approvedByTheReview">审核通过</el-button> |
| | | </template> |
| | | <template v-if="detailDemandStatus === '2'"> |
| | | <el-button class="" color="#4C34FF" @click="downloadAllFiles">全部下载</el-button> |
| | |
| | | const fileList = ref([]) // 上传文件列表 |
| | | const uploadedFiles = ref([]) // 已上传文件列表 |
| | | const responseData = ref(null) |
| | | const submitting = ref(false) // 提交中状态 |
| | | // 自定义上传请求函数 |
| | | const handleHttpRequest = async (options) => { |
| | | try { |
| | |
| | | const tableData = ref([]) // 附件表格数据 |
| | | // 文件移除 |
| | | const handleFileRemove = (file, fileList) => { |
| | | console.log('删除文件', fileList); |
| | | uploadedFiles.value = fileList |
| | | // 从已上传文件列表中移除对应文件 |
| | | if (file.response && file.response.attachId) { |
| | | uploadedFiles.value = uploadedFiles.value.filter(item => item.attachId !== file.response.attachId) |
| | | } |
| | | // if (file.response && file.response.attachId) { |
| | | // // uploadedFiles.value = uploadedFiles.value.filter(item => item.attachId !== file.response.attachId) |
| | | // // 找到 id=1 的对象的索引 |
| | | // const index = uploadedFiles.value.findIndex(item => item.attachId !== file.response.attachId) |
| | | |
| | | // // 如果找到了,移除该对象 |
| | | // if (index !== -1) { |
| | | // uploadedFiles.value.splice(index, 1) |
| | | // } |
| | | // console.log('删除文件', uploadedFiles.value); |
| | | |
| | | // } |
| | | // 清空响应数据 |
| | | if (responseData.value && responseData.value.attachId === file.response?.attachId) { |
| | | responseData.value = null |
| | |
| | | // 从 uploadedFiles.value 中提取所有 attachId |
| | | const id = uploadedFiles.value.map(file => file.attachId) |
| | | |
| | | submitting.value = true |
| | | gdSupplyDemandAuditRejectApi({ attachIds: id, auditOpinion: reason, demandId: demandId.value }) |
| | | .then(() => { |
| | | ElMessage.success('拒绝申请成功') |
| | |
| | | ElMessage.error('拒绝申请失败,请重试') |
| | | emit('success') |
| | | }) |
| | | .finally(() => { |
| | | submitting.value = false |
| | | }) |
| | | } |
| | | // 审核通过 |
| | | const approvedByTheReview = () => { |
| | | if (uploadedFiles.value.length === 0) { |
| | | return ElMessage.warning('请上传数据') |
| | | } |
| | | } |
| | | // 从 uploadedFiles.value 中提取所有 attachId |
| | | const id = uploadedFiles.value.map(file => file.attachId) |
| | | gdSupplyDemandAuditPassApi({ attachIds: id, demandId: demandId.value }).then(() => { |
| | | ElMessage.success('审核通过成功') |
| | | visible.value = false |
| | | emit('success') |
| | | }) |
| | | submitting.value = true |
| | | gdSupplyDemandAuditPassApi({ attachIds: id, demandId: demandId.value }) |
| | | .then(() => { |
| | | ElMessage.success('审核通过成功') |
| | | visible.value = false |
| | | emit('success') |
| | | }) |
| | | .finally(() => { |
| | | submitting.value = false |
| | | }) |
| | | } |
| | | |
| | | defineExpose({ open }) |
| | |
| | | :deep(.el-upload-list) { |
| | | margin-top: 10px; |
| | | } |
| | | .el-upload-list__item.is-success:focus .el-upload-list__item-status-label, .el-upload-list__item.is-success:hover .el-upload-list__item-status-label{ |
| | | display: none !important;} |
| | | </style> |
| | |
| | | <el-table-column prop="responsibleDeptName" show-overflow-tooltip label="责任部门" /> |
| | | <el-table-column prop="dataSource" show-overflow-tooltip label="数据来源依据" /> |
| | | <el-table-column prop="demandInfo" show-overflow-tooltip label="需求信息项" /> |
| | | <el-table-column label="操作" class-name="operation-btns" width="240"> |
| | | <el-table-column label="操作" class-name="operation-btns" width="150"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openForm('view', row)">查看</el-link> |
| | | <!-- 只对非审批状态显示编辑和删除按钮 --> |
| | |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import PreviewFiles from '@/components/PreviewFiles/PreviewFiles.vue' |
| | | import { getDictionaryByCode } from '@/api/system/dictbiz' |
| | | import { Base64 } from 'js-base64' |
| | | |
| | | const store = useStore() |
| | | const userInfo = computed(() => store.getters.userInfo) |
| | |
| | | editParams.value.link = row.link |
| | | } |
| | | |
| | | |
| | | // 'zip', 'rar', 'jar', 'tar', 'gzip', '7z', |
| | | const allSupportedExtensions = [ |
| | | 'doc', 'docx', 'xls', 'xlsx', 'xlsm', 'ppt', 'pptx', 'csv', 'tsv', 'dotm', 'xlt', 'xltm', 'dot', 'dotx', 'xlam', 'xla', |
| | | 'wps', 'dps', 'et', 'ett', 'wpt', |
| | | 'odt', 'ods', 'ots', 'odp', 'otp', 'six', 'ott', 'fodt', 'fods', |
| | | 'vsd', 'vsdx', 'wmf', 'emf', 'psd', |
| | | 'pdf', 'ofd', 'rtf', 'epub', |
| | | 'xmind', 'bpmn', 'eml', |
| | | 'obj', '3ds', 'stl', 'ply', 'gltf', 'glb', 'off', '3dm', 'fbx', 'dae', 'wrl', '3mf', 'ifc', 'brep', 'step', 'iges', 'fcstd', 'bim', |
| | | 'dwg', 'dxf', |
| | | 'txt', 'xml', 'md', 'java', 'php', 'py', 'js', 'css', |
| | | 'jpg', 'jpeg', 'png', 'gif', 'bmp', 'ico', 'jfif', 'webp', 'tif', 'tiff', 'tga', 'svg', |
| | | 'mp3', 'wav', 'mp4', 'flv', 'avi', 'mov', 'rm', 'webm', 'ts', 'mkv', 'mpeg', 'ogg', 'mpg', 'rmvb', 'wmv', '3gp', 'swf' |
| | | ]; |
| | | const { VITE_APP_PREVIEW_URL } = import.meta.env |
| | | |
| | | // 在线查看文档 |
| | | function seeOnlineWord(row) { |
| | | // 获取点之后的文件格式名 |
| | | const fileType = row?.link?.split('.').pop() || '' |
| | | if (!row.link) { |
| | | ElMessage.warning('文件链接不存在') |
| | | return |
| | | } else if ( |
| | | !row.link.includes('docx') && |
| | | !row.link.includes('pdf') && |
| | | !row.link.includes('png') && |
| | | !row.link.includes('jpg') |
| | | ) { |
| | | }else if (allSupportedExtensions.includes(fileType)){ |
| | | window.open(`${VITE_APP_PREVIEW_URL}/onlinePreview?url=`+encodeURIComponent(Base64.encode(row.link))); |
| | | }else { |
| | | ElMessage.warning(`${fileType}文件格式,可以下载再查看`) |
| | | return |
| | | } else if (row.link.includes('png') || row.link.includes('jpg')) { |
| | | previewVisibleImg.value = true |
| | | searchUrl.value = row.link |
| | | return |
| | | } else if (row.link.includes('docx') || row.link.includes('pdf')) { |
| | | previewVisible.value = true |
| | | searchUrl.value = row.link |
| | | return |
| | | } |
| | | } |
| | | |
| | |
| | | > |
| | | {{ gdStatusObj[gdStatus].reason }} |
| | | </el-button> |
| | | <el-button @click="addDescription" v-if="['20', '24', '25', '50'].includes(gdStatus)" color="#F2F3F5"> |
| | | {{ gdStatus === '50' ? '结算' : '申请取消' }} |
| | | <el-button @click="addDescription" v-if="['20', '24', '25'].includes(gdStatus)" color="#F2F3F5"> |
| | | 申请取消 |
| | | </el-button> |
| | | <el-button color="#4C34FF" @click="requestModification" v-if="['20', '25'].includes(gdStatus)"> |
| | | 申请修改 |
| | |
| | | <el-button v-if="['21', '23'].includes(gdStatus)" @click="viewDescription" color="#F2F3F5"> |
| | | {{ gdStatusObj[gdStatus].reason }} |
| | | </el-button> |
| | | <el-button v-if="gdStatus === '50'" @click="addDescription" color="#F2F3F5">结算</el-button> |
| | | <el-button v-if="gdStatus === '10'" @click="addDescription" color="#F2F3F5">拒绝接单</el-button> |
| | | <el-button v-if="gdStatus === '10'" @click="statusChange(1)" color="#4C34FF">接单</el-button> |
| | | <el-button v-if="gdStatus === '22'" @click="addDescription" color="#F2F3F5">不同意修改</el-button> |
| | |
| | | {{ getDictLabel(row.status, dictObj.institutionStatus) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" class-name="operation-btns" width="400"> |
| | | <el-table-column label="操作" class-name="operation-btns" width="200"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openForm('view', row)">查看</el-link> |
| | | <el-link type="primary" @click="openForm('edit', row)">编辑</el-link> |
| | |
| | | {{ getDictLabel(row.status, dictObj.zoningStatus) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" class-name="operation-btns" width="400"> |
| | | <el-table-column label="操作" class-name="operation-btns" width="200"> |
| | | <template v-slot="{ row }"> |
| | | <el-link type="primary" @click="openForm('view', row)">查看</el-link> |
| | | <el-link type="primary" @click="openForm('edit', row)">编辑</el-link> |