|
|
|
@ -88,6 +88,24 @@ |
|
|
|
<!-- 联合执法选择"是"时显示的内容 --> |
|
|
|
<div v-if="formData.jointEnforcement === '1'" class="joint-enforcement-options"> |
|
|
|
<van-checkbox v-model="formData.isNewJoint">创建新的联合执法</van-checkbox> |
|
|
|
|
|
|
|
<!-- 联合执法列表(未选择创建新的联合执法时显示) --> |
|
|
|
<div v-if="!formData.isNewJoint" class="union-list-container"> |
|
|
|
<van-loading v-if="unionLoading" size="20" /> |
|
|
|
<div v-else-if="unionList.length === 0" class="empty-tip">暂无联合执法数据</div> |
|
|
|
<div v-else class="union-list"> |
|
|
|
<div |
|
|
|
v-for="item in unionList" |
|
|
|
:key="item.id" |
|
|
|
class="union-item" |
|
|
|
:class="{ active: formData.uniteCheck === item.id }" |
|
|
|
@click="selectUnion(item)" |
|
|
|
> |
|
|
|
<div class="union-item-title">{{ item.bureauDeptName || '联合执法' }}</div> |
|
|
|
<div class="union-item-desc">{{ item.deptTexts || item.lawText || '' }}</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 隐藏字段用于验证联合执法 --> |
|
|
|
<van-field v-model="jointEnforcementValue" name="jointEnforcement" |
|
|
|
@ -128,13 +146,15 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script setup name="EnforcementInfoSection"> |
|
|
|
import { computed, ref, onMounted } from 'vue'; |
|
|
|
import { computed, ref, onMounted, watch } from 'vue'; |
|
|
|
import { showToast } from 'vant'; |
|
|
|
import { uploadFile } from '@/util/fileUpload'; |
|
|
|
import { |
|
|
|
getEnforcementTimeDateRange, |
|
|
|
parseEnforcementTimeToPicker, |
|
|
|
buildEnforcementTimeFromPicker, |
|
|
|
} from '@/util/enforcementTimePicker'; |
|
|
|
import { queryUnionByHour } from '@/api/enforcement'; |
|
|
|
|
|
|
|
const props = defineProps({ |
|
|
|
formData: { |
|
|
|
@ -148,6 +168,10 @@ const props = defineProps({ |
|
|
|
additionalPersons: { |
|
|
|
type: Array, |
|
|
|
default: () => [] |
|
|
|
}, |
|
|
|
enterpriseNumber: { |
|
|
|
type: String, |
|
|
|
default: '' |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
@ -170,6 +194,9 @@ const minDate = ref(new Date()); |
|
|
|
const maxDate = ref(new Date()); |
|
|
|
let defaultPickerValue = []; |
|
|
|
|
|
|
|
const unionList = ref([]); |
|
|
|
const unionLoading = ref(false); |
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|
const range = getEnforcementTimeDateRange(10); |
|
|
|
minDate.value = range.minDate; |
|
|
|
@ -178,6 +205,37 @@ onMounted(() => { |
|
|
|
datePickerValue.value = [...range.currentDate]; |
|
|
|
}); |
|
|
|
|
|
|
|
watch(() => props.formData.jointEnforcement, (newVal) => { |
|
|
|
if (newVal === '1') { |
|
|
|
if (!props.enterpriseNumber) { |
|
|
|
showToast('请先选择企业'); |
|
|
|
props.formData.jointEnforcement = '0'; |
|
|
|
return; |
|
|
|
} |
|
|
|
fetchUnionList(); |
|
|
|
} else { |
|
|
|
unionList.value = []; |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
const fetchUnionList = () => { |
|
|
|
unionLoading.value = true; |
|
|
|
queryUnionByHour({ enterpriseNumber: props.enterpriseNumber }, (res) => { |
|
|
|
unionLoading.value = false; |
|
|
|
if (res && res.data) { |
|
|
|
unionList.value = res.data; |
|
|
|
} |
|
|
|
}, (err) => { |
|
|
|
unionLoading.value = false; |
|
|
|
console.error('获取联合执法列表失败:', err); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
const selectUnion = (item) => { |
|
|
|
props.formData.unionNo = item.unionNo || ''; |
|
|
|
props.formData.uniteCheck = item.id || ''; |
|
|
|
}; |
|
|
|
|
|
|
|
const openTimePicker = () => { |
|
|
|
const parsed = parseEnforcementTimeToPicker(props.formData.enforcementTime); |
|
|
|
datePickerValue.value = parsed ? [...parsed] : [...defaultPickerValue]; |
|
|
|
@ -385,6 +443,55 @@ const onAfterReadImage = (file) => { |
|
|
|
.joint-enforcement-options { |
|
|
|
padding: 0.32rem; |
|
|
|
padding-bottom: 30px; |
|
|
|
|
|
|
|
.union-list-container { |
|
|
|
margin-top: 0.24rem; |
|
|
|
padding: 0.24rem; |
|
|
|
background: #f5f7fa; |
|
|
|
border-radius: 0.1rem; |
|
|
|
|
|
|
|
.empty-tip { |
|
|
|
text-align: center; |
|
|
|
color: #999; |
|
|
|
font-size: 14px; |
|
|
|
padding: 0.4rem; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.union-list { |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
gap: 0.16rem; |
|
|
|
} |
|
|
|
|
|
|
|
.union-item { |
|
|
|
padding: 0.2rem; |
|
|
|
background: #fff; |
|
|
|
border-radius: 0.08rem; |
|
|
|
border: 1px solid #e8e8e8; |
|
|
|
transition: all 0.2s; |
|
|
|
|
|
|
|
&:active { |
|
|
|
transform: scale(0.98); |
|
|
|
} |
|
|
|
|
|
|
|
&.active { |
|
|
|
border-color: #1367fe; |
|
|
|
background: rgba(19, 103, 254, 0.05); |
|
|
|
} |
|
|
|
|
|
|
|
.union-item-title { |
|
|
|
font-size: 14px; |
|
|
|
color: #333; |
|
|
|
font-weight: 500; |
|
|
|
} |
|
|
|
|
|
|
|
.union-item-desc { |
|
|
|
font-size: 12px; |
|
|
|
color: #999; |
|
|
|
margin-top: 0.08rem; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
:deep(.van-field__value) { |
|
|
|
|