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 7a00bc1b..140e607e 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 @@ -64,11 +64,18 @@ - + + + + + + + readonly :is-link="canEditTime" :clearable="canEditTime" @click="canEditTime && openTimePicker()" /> @@ -173,6 +180,14 @@ const props = defineProps({ enterpriseNumber: { type: String, default: '' + }, + canSelectReason: { + type: Boolean, + default: false + }, + canEditTime: { + type: Boolean, + default: true } }); @@ -198,6 +213,14 @@ let defaultPickerValue = []; const unionList = ref([]); const unionLoading = ref(false); +const showReasonPicker = ref(false); +const reasonOptions = [ + { text: '企业拒绝出示监管码', value: '企业拒绝出示监管码' }, + { text: '系统未能有效生成监管码', value: '系统未能有效生成监管码' }, + { text: '扫码未能显示企业信息', value: '扫码未能显示企业信息' }, + { text: '其他', value: '其他' } +]; + onMounted(() => { const range = getEnforcementTimeDateRange(7); minDate.value = range.minDate; @@ -264,6 +287,11 @@ const onTimeConfirm = ({ selectedValues }) => { showTimePicker.value = false; }; +const selectReason = ({ selectedOptions }) => { + props.formData.reason = selectedOptions[0]?.text || ''; + showReasonPicker.value = false; +}; + // 计算属性:是否有执法人员(转换为字符串用于表单验证) const hasPerson = computed(() => { return props.defaultPerson?.name || props.additionalPersons.some(p => p.name) ? '1' : ''; 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 41b4ccae..cd35bee5 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 @@ -225,7 +225,7 @@ const initPersonList = () => { const loadPersonList = () => { personLoading.value = true; - const selectedIds = props.selectedPersons.map(p => p.id).filter(Boolean); + const selectedIds = props.selectedPersons.map(p => p.userId).filter(Boolean); const notUserId = selectedIds.length > 0 ? selectedIds.join(',') : undefined; const params = { pageNum: personPageNum.value, 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 e2d59db1..a1fa54c8 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 @@ -15,7 +15,8 @@ { + return !isSignMode.value && !isScanMode.value; +}); + // 是否为非行政执法模式 const isNonEnforcement = ref(false); @@ -86,7 +95,7 @@ const formData = reactive({ lawEnforcementItemText: '', enforcementBases: [''], enforcementBasesIds: [''], - reason: '系统未能有效生成监管码', + reason: '', enforcementTime: '', jointEnforcement: '0', isNewJoint: false, @@ -140,12 +149,12 @@ const selectedPersonsList = computed(() => { const list = []; // 添加默认执法人员 if (enforcementPersons.value[0]) { - list.push({ id: enforcementPersons.value[0].id, name: enforcementPersons.value[0].name }); + list.push({ id: enforcementPersons.value[0].id, name: enforcementPersons.value[0].name, userId: enforcementPersons.value[0].userId }); } // 添加额外执法人员 additionalPersons.value.forEach(p => { if (p.id || p.name) { - list.push({ id: p.id, name: p.name, }); + list.push({ id: p.id, name: p.name, userId: p.userId }); } }); return list; @@ -231,6 +240,8 @@ const handleSelectEnterprise = (enterprise) => { enterpriseName: enterprise.enterpriseName, enterpriseNumber: enterprise.enterpriseNumber, }; + isScanMode.value = false; + sessionStorage.removeItem('enterpriseScanData'); showPopups.enterprise = false; }; @@ -592,10 +603,18 @@ onMounted(() => { return; // 编辑模式下不执行后续初始化逻辑 } - // 默认从缓存获取企业信息 - if (!isSignMode.value) { + // URL 参数可以覆盖缓存(用于直接跳转场景) + const urlEnterpriseName = route.query.enterpriseName; + const urlEnterpriseNumber = route.query.enterpriseNumber; + + // 默认从缓存获取企业信息(仅在非补录模式且没有URL参数时) + if (!isSignMode.value && !urlEnterpriseName) { const cached = sessionStorage.getItem('enterpriseScanData'); if (cached) { + // 如果是手动搜索模式,不设置 isScanMode + if (route.query.isManualSearch !== 'true') { + isScanMode.value = true; + } try { const data = JSON.parse(cached); enterpriseData.value = data; @@ -605,14 +624,14 @@ onMounted(() => { } } - // URL 参数可以覆盖缓存(用于直接跳转场景) - const urlEnterpriseName = route.query.enterpriseName; - const urlEnterpriseNumber = route.query.enterpriseNumber; + // URL 参数覆盖缓存(视为手动搜索模式) if (urlEnterpriseName) { enterpriseData.value.enterpriseName = urlEnterpriseName; + isScanMode.value = false; } if (urlEnterpriseNumber) { enterpriseData.value.enterpriseNumber = urlEnterpriseNumber; + isScanMode.value = false; } // 设置默认执法人员为当前登录人员 const useCommonStr = sessionStorage.getItem('useCommon'); @@ -620,16 +639,35 @@ onMounted(() => { const name = useCommon.userName || ''; const phonenumber = useCommon.phonenumber || ''; if (name || phonenumber) { - enforcementPersons.value = [{ name, phonenumber, id: phonenumber }]; + enforcementPersons.value = [{ name, phonenumber, userId: useCommon.userId || '' }]; } formData.enforcementUnit = useCommon.bureauUnitName || ''; - // 获取保存的扫码原因,如果没有则使用默认值 - const savedReason = sessionStorage.getItem('scanReason'); - if (savedReason) { - formData.reason = savedReason; + // 根据不同模式设置原因 + if (isSignMode.value) { + // 补录模式:默认值为"补录",不可选择 + formData.reason = '补录'; + } else if (isScanMode.value) { + // 扫码登记模式:原因为空,不可选择 + formData.reason = ''; } else { - formData.reason = '系统未能有效生成监管码'; + // 手动搜索企业:读取选择的原因作为初始值,可选择 + const savedReason = sessionStorage.getItem('scanReason'); + if (savedReason) { + formData.reason = savedReason; + } + } + + // 扫码和手动搜索进入登记时执法时间默认为当前时间 + if (!isSignMode.value) { + 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'); + formData.enforcementTime = `${year}-${month}-${day} ${hour}:${minute}:${second}`; } // 加载执法类别字典 diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/outOfCityEnterprise.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/outOfCityEnterprise.vue index 8e67bce4..ff96bfec 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/outOfCityEnterprise.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/outOfCityEnterprise.vue @@ -243,6 +243,7 @@ const handleSave = () => { isOutOfCity: true, enterpriseName: formData.enterpriseName, enterpriseNumber: formData.enterpriseNumber, + isManualSearch: 'true', }, }); } else { diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enterpriseScanPreview.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enterpriseScanPreview.vue index 81e53a17..16da83c0 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enterpriseScanPreview.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enterpriseScanPreview.vue @@ -286,9 +286,16 @@ const toSign = () => { // 缓存企业数据到 sessionStorage const enterpriseScanData = enterpriseData.value || {}; sessionStorage.setItem('enterpriseScanData', JSON.stringify(enterpriseScanData)); + + // 从 URL 参数中获取手动搜索标识 + const isManualSearch = route.query.isManualSearch === 'true'; + router.push({ path: '/enforcement/enforcementRegister', - query: { type: isNonEnforcement.value ? 'non-enforcement' : undefined } + query: { + type: isNonEnforcement.value ? 'non-enforcement' : undefined, + isManualSearch: isManualSearch ? 'true' : undefined + } }); }; diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue index 42ad4a9e..c2f2e255 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue @@ -35,10 +35,10 @@
-
行政执法
+
扫码入企
-
扫码入企
+
行政执法
@@ -49,10 +49,10 @@
-
非行政执法
+
扫码入企
-
扫码入企
+
非行政执法
diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue index 5cff2845..666b8947 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue @@ -176,7 +176,7 @@ const initTodoList = () => { }, { id: 103, - title: '执法预约', + title: '联合执法预约', desc: '', time: '', icon: 'check', @@ -260,8 +260,8 @@ const fetchTodoList = () => { }, { id: 103, - title: '执法预约', - desc: zfyyCount.value > 0 ? `您有${zfyyCount.value}条执法预约,请及时查看` : '暂无执法预约', + title: '联合执法预约', + desc: zfyyCount.value > 0 ? `您有${zfyyCount.value}条联合执法预约,请及时查看` : '暂无联合执法预约', time: '2026-04-15 09:30', icon: 'check', iconBg: 'icon-red', @@ -346,7 +346,7 @@ const onTodoClick = (item) => { router.push({ path: '/enforcement/enforcementTaskList', }); - } else if (item.title === '执法预约') { + } else if (item.title === '联合执法预约') { sessionStorage.setItem('messageReturnTab', '1'); router.push({ path: '/enforcement/enforcementReserveList', diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue index 511029d9..cbde9ad8 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue @@ -8,7 +8,7 @@
-
扫一扫企业二维码,即可查看企业信息
+
点击识别企业二维码
手动登记,请输入关键字搜索企业 >>
@@ -326,7 +326,7 @@ const isHttpLink = (url) => { // ========== 手动搜索企业弹窗 ========== const showSearchModal = ref(false); -const selectedReason = ref(4); // 默认选中"其他" +const selectedReason = ref(3); // 默认选中"其他" const searchKeyword = ref(''); const enterpriseList = ref([]); const loading = ref(false); @@ -337,7 +337,6 @@ const reasonOptions = [ '企业拒绝出示监管码', '系统未能有效生成监管码', '扫码未能显示企业信息', - '补录', '其他' ]; @@ -423,19 +422,20 @@ const selectEnterprise = (item) => { path: '/enforcement/enterpriseScanPreview', query: { enterpriseNumber: item.enterpriseNumber, - type: enforceType + type: enforceType, + isManualSearch: 'true' } }); }; // 市外注册企业信息录入 const handleOutOfCityEnterprise = () => { - // 保存无法扫码原因到 sessionStorage const selectedReasonText = reasonOptions[selectedReason.value]; sessionStorage.setItem('scanReason', selectedReasonText); showSearchModal.value = false; router.push({ path: '/enforcement/outOfCityEnterprise', + query: { isManualSearch: 'true' } }); }; diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/statistics/statisticsAnalysis.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/statistics/statisticsAnalysis.vue index 3675bfa4..e7c1f0d8 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/statistics/statisticsAnalysis.vue +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/statistics/statisticsAnalysis.vue @@ -27,7 +27,7 @@
年度
-
筛选 +
自定义
diff --git a/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue b/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue index d4ea8251..321de4a4 100644 --- a/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue +++ b/zdxt-web-client/zdxt-efcode-enterprise-app/src/views/enterprise/enforcement/enforcementEvaluateDetail.vue @@ -88,10 +88,10 @@
-
评价
+
反馈
-
+ -
+
@@ -149,16 +149,16 @@
-
+
{{ idx + 1 }}、{{ q.text }}
+ @click="!readonly && setAnswer(q, '是')"> 是 是
+ @click="!readonly && setAnswer(q, '否')"> 否 否
@@ -249,11 +249,12 @@ const evaluateForm = ref({ // ========== 问题列表(默认模板)========== const questionList = ref([ - { text: '是否存在和执法,接受被执法企业的馈赠、报酬、福利等?', answer: '否' }, - { text: '是否存在要求被执法企业提供宴请、娱乐、旅游等活动?', answer: '否' }, - { text: '是否存在干扰企业正常生产经营、刻意要求企业法人到场的行为?', answer: '否' }, - { text: '是否存在任性处罚企业、乱查封、乱扣押、乱冻结、违规责令停产停业的行为?', answer: '否' }, - { text: '是否存在变相执法,以咨询、培训、考核等名义行执法之实?', answer: '否' }, + { text: '是否存在和执法,接受被执法企业的馈赠、报酬、福利等?', answer: '否', inputText: '', isOther: false }, + { text: '是否存在要求被执法企业提供宴请、娱乐、旅游等活动?', answer: '否', inputText: '', isOther: false }, + { text: '是否存在干扰企业正常生产经营、刻意要求企业法人到场的行为?', answer: '否', inputText: '', isOther: false }, + { text: '是否存在任性处罚企业、乱查封、乱扣押、乱冻结、违规责令停产停业的行为?', answer: '否', inputText: '', isOther: false }, + { text: '是否存在变相执法,以咨询、培训、考核等名义行执法之实?', answer: '否', inputText: '', isOther: false }, + { text: '其他', answer: '否', inputText: '', isOther: true }, ]); // ========== 字段映射工具:对后端多种字段名容错 ========== @@ -313,6 +314,7 @@ const fillEvaluateFormFromInfo = (info) => { questionList.value = questionList.value.map((q, idx) => ({ ...q, answer: String(info['problem' + (idx + 1)]) === '1' ? '是' : '否', + inputText: q.isOther ? (info.otherProblemText || '') : '', })); }; @@ -326,6 +328,14 @@ const getRatingText = (score) => { return map[score] || ''; }; +// ========== 设置问题答案 ========== +const setAnswer = (q, answer) => { + q.answer = answer; + if (q.isOther && answer === '否') { + q.inputText = ''; + } +}; + // ========== 返回上一页 ========== const onClickLeft = () => { router.back(); @@ -339,6 +349,11 @@ const onViewCaseDetail = () => { // ========== 提交评价 ========== const onSubmit = () => { if (readonly.value) return; + const otherQuestion = questionList.value.find(q => q.isOther); + if (otherQuestion && otherQuestion.answer === '是' && !otherQuestion.inputText.trim()) { + showToast('请输入其他问题的具体内容'); + return; + } showConfirmDialog({ title: '确认提交', message: '确认提交本次评价吗?提交后将无法修改。', @@ -356,6 +371,9 @@ const onSubmit = () => { questionList.value.forEach((q, idx) => { const val = evaluateForm.value.hasOtherIssues ? (q.answer === '是' ? 1 : 0) : 0; params['problem' + (idx + 1)] = val; + if (q.isOther) { + params.otherProblemText = q.inputText; + } }); submitEvaluate(params, () => { showToast('评价提交成功'); @@ -420,7 +438,7 @@ const onSubmit = () => { color: #333; margin-bottom: 0.25rem; padding-bottom: 0.15rem; - border-bottom: 1px solid #f0f0f0; + // border-bottom: 1px solid #f0f0f0; display: flex; align-items: baseline; .union-tag { @@ -599,6 +617,7 @@ const onSubmit = () => { padding: 0.25rem 0; padding-right: 2.2rem; border-bottom: 1px solid #f5f5f5; + min-height: 0.8rem; &:last-child { border-bottom: none; @@ -615,10 +634,10 @@ const onSubmit = () => { .question-options { position: absolute; right: 0; - top: 50%; - transform: translateY(-50%); + top: 0.25rem; display: flex; gap: 0.2rem; + z-index: 10; } .option-btn { @@ -645,6 +664,19 @@ const onSubmit = () => { } } } + + .question-input-wrap { + margin-top: 0.15rem; + padding-left: 0.6rem; + + :deep(.van-field__control) { + font-size: 0.3rem; + } + + :deep(.van-field) { + margin: 0; + } + } } /* ===== 底部提交栏 ===== */