Browse Source

执法端 通知修改,补录数据页面新增企业数据

dev-v1.0.2
wangmingyong 4 months ago
parent
commit
af949eed25
  1. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js
  2. 109
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue
  3. 17
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue
  4. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js

@ -52,6 +52,8 @@ export const queryAccordingList = (params, success, error) => _get(baseUrl + "/a
export const queryEnfRegistrationList = (params, success, error) => _get(baseUrl + "/enfRegistration/queryList", params, success, error); export const queryEnfRegistrationList = (params, success, error) => _get(baseUrl + "/enfRegistration/queryList", params, success, error);
export const queryUnionByHour = (params, success, error) => _get(baseUrl + "/enfRegistration/queryUnionByHour", params, success, error);
// 行政执法保存 // 行政执法保存
export const saveEnfRegistration = (params, success, error) => _post(baseUrl + "/enfRegistration/add", params, success, error); export const saveEnfRegistration = (params, success, error) => _post(baseUrl + "/enfRegistration/add", params, success, error);

109
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue

@ -88,6 +88,24 @@
<!-- 联合执法选择"是"时显示的内容 --> <!-- 联合执法选择"是"时显示的内容 -->
<div v-if="formData.jointEnforcement === '1'" class="joint-enforcement-options"> <div v-if="formData.jointEnforcement === '1'" class="joint-enforcement-options">
<van-checkbox v-model="formData.isNewJoint">创建新的联合执法</van-checkbox> <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> </div>
<!-- 隐藏字段用于验证联合执法 --> <!-- 隐藏字段用于验证联合执法 -->
<van-field v-model="jointEnforcementValue" name="jointEnforcement" <van-field v-model="jointEnforcementValue" name="jointEnforcement"
@ -128,13 +146,15 @@
</template> </template>
<script setup name="EnforcementInfoSection"> <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 { uploadFile } from '@/util/fileUpload';
import { import {
getEnforcementTimeDateRange, getEnforcementTimeDateRange,
parseEnforcementTimeToPicker, parseEnforcementTimeToPicker,
buildEnforcementTimeFromPicker, buildEnforcementTimeFromPicker,
} from '@/util/enforcementTimePicker'; } from '@/util/enforcementTimePicker';
import { queryUnionByHour } from '@/api/enforcement';
const props = defineProps({ const props = defineProps({
formData: { formData: {
@ -148,6 +168,10 @@ const props = defineProps({
additionalPersons: { additionalPersons: {
type: Array, type: Array,
default: () => [] default: () => []
},
enterpriseNumber: {
type: String,
default: ''
} }
}); });
@ -170,6 +194,9 @@ const minDate = ref(new Date());
const maxDate = ref(new Date()); const maxDate = ref(new Date());
let defaultPickerValue = []; let defaultPickerValue = [];
const unionList = ref([]);
const unionLoading = ref(false);
onMounted(() => { onMounted(() => {
const range = getEnforcementTimeDateRange(10); const range = getEnforcementTimeDateRange(10);
minDate.value = range.minDate; minDate.value = range.minDate;
@ -178,6 +205,37 @@ onMounted(() => {
datePickerValue.value = [...range.currentDate]; 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 openTimePicker = () => {
const parsed = parseEnforcementTimeToPicker(props.formData.enforcementTime); const parsed = parseEnforcementTimeToPicker(props.formData.enforcementTime);
datePickerValue.value = parsed ? [...parsed] : [...defaultPickerValue]; datePickerValue.value = parsed ? [...parsed] : [...defaultPickerValue];
@ -385,6 +443,55 @@ const onAfterReadImage = (file) => {
.joint-enforcement-options { .joint-enforcement-options {
padding: 0.32rem; padding: 0.32rem;
padding-bottom: 30px; 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) { :deep(.van-field__value) {

17
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue

@ -15,6 +15,7 @@
<!-- 执法信息组件(行政执法模式) --> <!-- 执法信息组件(行政执法模式) -->
<EnforcementInfoSection v-if="!isNonEnforcement" :form-data="formData" <EnforcementInfoSection v-if="!isNonEnforcement" :form-data="formData"
:default-person="enforcementPersons[0]" :additional-persons="additionalPersons" :default-person="enforcementPersons[0]" :additional-persons="additionalPersons"
:enterprise-number="enterpriseData.enterpriseNumber"
@show-notice-picker="showPopups.notice = true" @open-person-picker="handleOpenPersonPicker" @show-notice-picker="showPopups.notice = true" @open-person-picker="handleOpenPersonPicker"
@remove-person="handleRemovePerson" @show-category-picker="showPopups.category = true" @remove-person="handleRemovePerson" @show-category-picker="showPopups.category = true"
@show-task-source-picker="showPopups.taskSource = true" @open-basis-picker="handleOpenBasisPicker" @show-task-source-picker="showPopups.taskSource = true" @open-basis-picker="handleOpenBasisPicker"
@ -88,6 +89,7 @@ const formData = reactive({
reason: '系统未能有效生成监管码', reason: '系统未能有效生成监管码',
enforcementTime: '', enforcementTime: '',
jointEnforcement: '0', jointEnforcement: '0',
isNewJoint: false,
entrustedEnforcement: '0', entrustedEnforcement: '0',
entrustedAgency: '', entrustedAgency: '',
entrustedAgencyId: '', entrustedAgencyId: '',
@ -316,6 +318,17 @@ const buildSubmitPayload = () => {
// 执法依据ID列表 // 执法依据ID列表
const lawEnforcementBasis = formData.enforcementBasesIds ? formData.enforcementBasesIds.join(',') : ''; const lawEnforcementBasis = formData.enforcementBasesIds ? formData.enforcementBasesIds.join(',') : '';
const getCurrentDateTime = () => {
const now = new Date();
const year = now.getFullYear();
const month = String(now.getMonth() + 1).padStart(2, '0');
const day = String(now.getDate()).padStart(2, '0');
const hour = String(now.getHours()).padStart(2, '0');
const minute = String(now.getMinutes()).padStart(2, '0');
const second = String(now.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hour}:${minute}:${second}`;
};
// 非行政执法payload // 非行政执法payload
if (isNonEnforcement.value) { if (isNonEnforcement.value) {
// 通过字典接口查询入企事由对应的数字值 // 通过字典接口查询入企事由对应的数字值
@ -327,7 +340,7 @@ const buildSubmitPayload = () => {
enterpriseName: enterpriseData.value.enterpriseName || '', enterpriseName: enterpriseData.value.enterpriseName || '',
enterpriseNumber: enterpriseData.value.enterpriseNumber || '', enterpriseNumber: enterpriseData.value.enterpriseNumber || '',
enterpriseAddress: enterpriseData.value.enterpriseAddress || '', enterpriseAddress: enterpriseData.value.enterpriseAddress || '',
enforcementTime: formData.enforcementTime || '', enforcementTime: formData.enforcementTime || getCurrentDateTime(),
lawEnforcer: lawEnforcer, lawEnforcer: lawEnforcer,
lawEnforcerId: lawEnforcerId, lawEnforcerId: lawEnforcerId,
lawEnforcerTel: lawEnforcerTel, lawEnforcerTel: lawEnforcerTel,
@ -374,7 +387,7 @@ const buildSubmitPayload = () => {
enterpriseName: enterpriseData.value.enterpriseName || '', enterpriseName: enterpriseData.value.enterpriseName || '',
enterpriseNumber: enterpriseData.value.enterpriseNumber || '', enterpriseNumber: enterpriseData.value.enterpriseNumber || '',
enterpriseAddress: enterpriseData.value.enterpriseAddress || '', enterpriseAddress: enterpriseData.value.enterpriseAddress || '',
enforcementTime: formData.enforcementTime || '', enforcementTime: formData.enforcementTime || getCurrentDateTime(),
updateTimeFlag: 0, updateTimeFlag: 0,
fileList: buildFileList(), fileList: buildFileList(),
fileListObj: formData.fileListObj || [], fileListObj: formData.fileListObj || [],

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue

@ -13,7 +13,7 @@
<div class="notice-bar"> <div class="notice-bar">
<img src="@/assets/images/icon_notice.png" class="notice-icon" alt="" /> <img src="@/assets/images/icon_notice.png" class="notice-icon" alt="" />
<van-notice-bar v-if="noticeList.length > 0" class="notice-scroll" <van-notice-bar v-if="noticeList.length > 0" class="notice-scroll"
:scrollable="noticeList.length > 1 || (noticeList[0]?.title || '').length > 16" :scrollable="noticeList.length > 0 || (noticeList[0]?.title || '').length > 16"
background="transparent" color="#8c8c8c" :text="noticeText" /> background="transparent" color="#8c8c8c" :text="noticeText" />
<span v-else class="notice-text">暂无新通知</span> <span v-else class="notice-text">暂无新通知</span>
</div> </div>

Loading…
Cancel
Save