From 84ef8393fdd86649448671c037197c584a2a0c0e Mon Sep 17 00:00:00 2001 From: "wangmingyong@163.com" Date: Fri, 14 Aug 2026 11:40:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/enforcement/index.js | 2 +- .../register/EnforcementInfoSection.vue | 141 ++++++++++++++---- .../register/NonEnforcementInfoSection.vue | 16 +- .../enforcement/register/RegisterPopups.vue | 49 ++++-- .../components/EnforcementRecordList.vue | 2 +- .../enforce/enforcementRegister.vue | 76 ++++++++-- 6 files changed, 219 insertions(+), 67 deletions(-) diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js index 084455a8..bb689960 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/enforcement/index.js @@ -74,7 +74,7 @@ export const queryNonRegistrationDetail = (params, success, error) => _get(baseU // 非行政执法提交 export const addNonRegistration = (params, success, error) => _post(baseUrl + "/nonRegistration/add", params, success, error); -export const queryEnforcementNoticeList = (params, success, error) => _post(baseUrl + "/enforcement/queryList", params, success, error); +export const queryEnforcementNoticeList = (params, success, error) => _get(baseUrl + "/cpNotice/myList", params, success, error); // 执法预告列表 export const getLawNoticeList = (params, success, error) => _get(baseUrl + "/cpNotice/myList", params, success, error); diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue index 16fb3a92..5ec751b0 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnforcementInfoSection.vue @@ -8,7 +8,7 @@ + readonly :rules="[{ required: true, message: '请填写执法单位' }]" required />
@@ -27,7 +27,7 @@
-
+
请选择
@@ -88,8 +88,8 @@ - + @@ -108,21 +108,41 @@
- 创建新的联合执法 - - -
+ +
-
暂无联合执法数据
- - +
暂无联合执法数据
+
+
+
-
{{ item.bureauDeptName || '联合执法' }}
-
{{ item.deptTexts || item.lawText || '' }}
+ +
-
- +
+ +
+
+ +
+
创建新的联合执法
+
+
@@ -270,20 +290,48 @@ const fetchUnionList = () => { }); }; -const selectUnion = (item) => { - if (props.formData.uniteCheck === item.id) { +// 分组:hasUnion==1 且 unionNo 相同的项合并为一组,其他项单独一组 +const groupedUnionList = computed(() => { + if (!unionList.value || unionList.value.length === 0) return []; + const groups = []; + const unionNoMap = new Map(); // unionNo -> group index + + unionList.value.forEach((item) => { + const isGroupable = item.hasUnion == 1 && item.unionNo; + if (isGroupable) { + const existingIdx = unionNoMap.get(item.unionNo); + if (existingIdx !== undefined) { + groups[existingIdx].items.push(item); + } else { + unionNoMap.set(item.unionNo, groups.length); + groups.push({ + key: `group-${item.unionNo}`, + groupId: item.id, // 组id用于选中值(第一项的id) + unionNo: item.unionNo, + isGroup: true, + items: [item], + }); + } + } else { + groups.push({ + key: `single-${item.id}`, + groupId: item.id, + unionNo: item.unionNo || '', + isGroup: false, + items: [item], + }); + } + }); + return groups; +}); + +const selectUnion = (group) => { + if (props.formData.uniteCheck === group.groupId) { props.formData.unionNo = ''; props.formData.uniteCheck = ''; } else { - props.formData.unionNo = item.unionNo || ''; - props.formData.uniteCheck = item.id || ''; - } -}; - -const onUnionChange = (id) => { - const item = unionList.value.find(item => String(item.id) === id); - if (item) { - props.formData.unionNo = item.unionNo || ''; + props.formData.unionNo = group.unionNo || ''; + props.formData.uniteCheck = group.groupId || ''; } }; @@ -296,11 +344,21 @@ const openTimePicker = () => { const onTimeConfirm = ({ selectedValues }) => { const value = buildEnforcementTimeFromPicker(selectedValues); if (value) { - props.formData.enforcementTime = value; + // 补录模式(canEditTime)下时间统一为 00:00:00,仅保留日期 + const datePart = value.split(' ')[0]; + props.formData.enforcementTime = `${datePart} 00:00:00`; } showTimePicker.value = false; }; +// 显示值:补录模式下仅显示日期,其他模式显示完整时间 +const enforcementTimeDisplay = computed(() => { + if (!props.formData.enforcementTime) return ''; + return props.canEditTime + ? props.formData.enforcementTime.split(' ')[0] + : props.formData.enforcementTime; +}); + const selectReason = ({ selectedOptions }) => { props.formData.reason = selectedOptions[0]?.text || ''; const selectedValue = selectedOptions[0]?.value || ''; @@ -531,12 +589,15 @@ const onAfterReadImage = (file) => { .joint-enforcement-options { padding: 0.32rem; padding-bottom: 30px; + display: flex; + flex-direction: column; .union-list-container { margin-top: 0.24rem; padding: 0.24rem; background: #fbfdff; border-radius: 0.1rem; + flex: 1; .empty-tip { text-align: center; @@ -557,16 +618,25 @@ const onAfterReadImage = (file) => { padding: 0.2rem; background: #fff; border-radius: 0.08rem; - border: 1px solid #e8e8e8; + // border: 1px solid #e8e8e8; transition: all 0.2s; + display: flex; + align-items: center; + gap: 0.2rem; &:active { background: #f5f5f5; } + .union-radio { + flex-shrink: 0; + padding-top: 2px; + } + .union-item-content { flex: 1; - + min-width: 0; + height: 100%; .union-item-title { font-size: 14px; color: #333; @@ -574,12 +644,19 @@ const onAfterReadImage = (file) => { } .union-item-desc { - font-size: 12px; - color: #999; + font-size: 14px; + color: #333; margin-top: 0.08rem; } } } + + .union-item-group { + padding: 0.2rem; + display: flex; + align-items: center; + flex-wrap: wrap; + } } :deep(.van-field__value) { diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/NonEnforcementInfoSection.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/NonEnforcementInfoSection.vue index d8492d07..e5d2018a 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/NonEnforcementInfoSection.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/NonEnforcementInfoSection.vue @@ -4,7 +4,7 @@ + readonly :rules="[{ required: true, message: '请填写入企单位' }]" required />
@@ -83,7 +83,7 @@ - { const onTimeConfirm = ({ selectedValues }) => { const value = buildEnforcementTimeFromPicker(selectedValues); if (value) { - props.formData.enforcementTime = value; + // 补录模式(canEditTime)下时间统一为 00:00:00,仅保留日期 + const datePart = value.split(' ')[0]; + props.formData.enforcementTime = `${datePart} 00:00:00`; } showTimePicker.value = false; }; +// 显示值:补录模式下仅显示日期,其他模式显示完整时间 +const enforcementTimeDisplay = computed(() => { + if (!props.formData.enforcementTime) return ''; + return props.canEditTime + ? props.formData.enforcementTime.split(' ')[0] + : props.formData.enforcementTime; +}); + const props = defineProps({ formData: { type: Object, diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/RegisterPopups.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/RegisterPopups.vue index 587bc2f8..d90ad269 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/RegisterPopups.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/RegisterPopups.vue @@ -18,8 +18,8 @@ @load="loadNotices" class="popup-content">
-
执法事项:{{ notice.checkItem }}
-
执法时间:{{ notice.checkTime }}
+
执法事项:{{ notice.enforceContent }}
+
执法时间:{{ formatTime(notice.enforceDate) }}{{ getTimeText(notice.enforceTime) }}
一键关联 @@ -119,6 +119,7 @@ import { ref, reactive, watch, computed, onMounted } from 'vue'; import { showToast } from 'vant'; import { queryEnforcementNoticeList, getBureauUnitUsers, queryAccordingList, queryDeptList } from '@/api/enforcement/index'; import { loadDict } from '@/util/dictUtil'; +import { formatTime } from '@/util/util'; import EnterpriseSelector from './EnterpriseSelector.vue'; const { useCommon } = $globalStore; @@ -132,6 +133,11 @@ const props = defineProps({ selectedPersons: { type: Array, default: () => [] + }, + + currentEnforcementUnit: { + type: String, + default: '' } }); @@ -159,7 +165,10 @@ const loadCategoryDict = () => { categoryOptions.value = columns; }); }; - +const getTimeText = (time) => { + const map = { 1: '上午(9:00-12:00)', 2: '下午(14:00-18:00)', 3: '其他(18:00-21:00)' }; + return map[time] || ''; +}; // 加载检查类别字典 const loadTaskSourceDict = () => { loadDict('check_category', (columns) => { @@ -244,10 +253,13 @@ const loadPersonList = () => { if (res.code === 200 || res.code === 0) { let data = res.data || res.rows || []; // 前端过滤:移除已选择的人员 - const selectedIds = props.selectedPersons.map(p => p.userId || p.id).filter(Boolean); + console.log(props.selectedPersons); + const selectedIds = props.selectedPersons.map(p => Number( p.userId || p.id)).filter(Boolean); + console.log(selectedIds); if (selectedIds.length > 0) { data = data.filter(item => { const id = item.userId || ''; + console.log(id,selectedIds.includes(id),'333'); return !selectedIds.includes(id); }); } @@ -420,19 +432,25 @@ const loadAgencyList = () => { queryDeptList(params, (res) => { if (res.code === 200 || res.code === 0) { - const data = res.data || res.rows || []; + const rawData = res.data || res.rows || []; const total = res.total || res.count || 0; + + // 过滤掉当前执法单位 + const filteredData = rawData.filter(item => { + const itemName = item.deptName || item.name || ''; + return itemName != props.currentEnforcementUnit + + }); + + const mapped = filteredData.map(item => ({ + id: item.deptId || item.id || '', + name: item.deptName || item.name || '' + })); if (agencyPageNum.value === 1) { - agencyList.value = data.map(item => ({ - id: item.deptId || item.id || '', - name: item.deptName || item.name || '' - })); + agencyList.value = mapped; } else { - agencyList.value = [...agencyList.value, ...data.map(item => ({ - id: item.deptId || item.id || '', - name: item.deptName || item.name || '' - }))]; + agencyList.value = [...agencyList.value, ...mapped]; } if (total <= agencyPageSize.value * agencyPageNum.value) { @@ -498,7 +516,8 @@ const loadNotices = () => { const params = { pageNum: noticePage.value, pageSize: noticePageSize.value, - enterpriseNumber: enterpriseNumber + enterpriseNumber: enterpriseNumber, + status: 1 }; queryEnforcementNoticeList(params, (res) => { @@ -515,7 +534,7 @@ const loadNotices = () => { finished.value = true; } else { noticePage.value++; - } + } } else { console.error('获取预告列表失败:', res.msg); finished.value = true; diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/EnforcementRecordList.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/EnforcementRecordList.vue index d31e5d89..a36ed88b 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/EnforcementRecordList.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/EnforcementRecordList.vue @@ -19,7 +19,7 @@
{{ cityRecords[0].createTime }}
{{ enterpriseName }}
-
被执法次数:{{ listCount }}次
+
diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue index 3711ae3d..ea60dc65 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRegister.vue @@ -42,7 +42,8 @@ - { - console.log(isScanMode.value,'isScanMode.value'); return !isScanMode.value; }); @@ -219,11 +219,11 @@ const handleRemovePerson = (index) => { // 添加额外人员(最多3人) const handleAddPerson = () => { - const total = enforcementPersons.value.length + additionalPersons.value.length; - if (total >= 2) { - showToast('最多选择3名执法人员'); - return; - } + // const total = enforcementPersons.value.length + additionalPersons.value.length; + // if (total >= 2) { + // showToast('最多选择3名执法人员'); + // return; + // } additionalPersons.value.push({}); } @@ -277,9 +277,53 @@ const handleOutOfCityEnterprise = () => { // 关联预告 const handleLinkNotice = (notice) => { - formData.relatedNotice = `${notice.checkItem}`; - formData.checkCss = notice.id; + formData.relatedNotice = `${notice.enforceContent}`; + formData.noticeId = notice.id; formData.lawEnforcementItemText = notice.checkItem || ''; + formData.lawEnforcementItem = notice.id || ''; + formData.enforce = notice.enforceContent || ''; + formData.enforceReason = notice.enforceRequirement || ''; + formData.remark = notice.remark || ''; + formData.enforcementTime = notice.enforceDate || ''; + + // 回填执法单位 + if (notice.bureauDeptName) { + formData.enforcementUnit = notice.bureauDeptName; + } + + // 回填企业信息 + if (notice.enterpriseName) { + enterpriseData.value.enterpriseName = notice.enterpriseName; + } + if (notice.enterpriseNumber) { + enterpriseData.value.enterpriseNumber = notice.enterpriseNumber; + } + + // 回填执法人员 + const userNames = notice.enforceUserNames ? notice.enforceUserNames.split(',').map(s => s.trim()).filter(Boolean) : []; + const userIds = notice.enforceUserIds ? notice.enforceUserIds.split(',').map(s => s.trim()).filter(Boolean) : []; + const userTels = notice.enforceUserTels ? notice.enforceUserTels.split(',').map(s => s.trim()).filter(Boolean) : []; + if (userNames.length > 0) { + enforcementPersons.value = [{ + name: userNames[0], + userId: userIds[0] || '', + phonenumber: userTels[0] || '' + }]; + additionalPersons.value = userNames.slice(1).map((name, i) => ({ + name, + id: userIds[i + 1] || '', + phonenumber: userTels[i + 1] || '' + })); + } + + // 回填部门信息 + if (notice.deptName) { + formData.lawText = notice.deptName; + } + if (notice.deptId) { + formData.lawId = notice.deptId; + } + showPopups.notice = false; // showSuccessToast('关联成功'); }; @@ -641,10 +685,12 @@ const fetchDetail = (id) => { // 回填执法人员 if (data.lawEnforcer) { + const enforcerTel = data.lawEnforcerTel || ''; enforcementPersons.value = [{ - name: data.lawEnforcer, - id: data.lawEnforcerId || '', - phonenumber: data.lawEnforcerId || '' + name: parseEnforcer(data.lawEnforcer).name, + userId: data.lawEnforcerId || '', + phonenumber: enforcerTel, + lawCertificateNum: enforcerTel }]; } @@ -652,7 +698,7 @@ const fetchDetail = (id) => { additionalPersons.value = []; const extraNames = data.lawEnforcerTwo || data.lawEnforcerOther || ''; const extraIds = data.lawEnforcerIdTwo || data.lawEnforcerIdOther || ''; - const extraTels = data.lawEnforcerTelOther || ''; + const extraTels = data.lawEnforcerTelTwo || ''; if (extraNames) { const nameArr = extraNames.split(',').map(s => s.trim()).filter(Boolean); const idArr = extraIds ? extraIds.split(',').map(s => s.trim()).filter(Boolean) : []; @@ -661,7 +707,7 @@ const fetchDetail = (id) => { additionalPersons.value.push({ name: name, id: idArr[i] || '', - phonenumber: telArr[i] || idArr[i] || '' + phonenumber: telArr[i] || '' }); }); }