|
|
@ -1,5 +1,59 @@ |
|
|
<template> |
|
|
<template> |
|
|
<div class="evaluate-detail-page"> |
|
|
<div class="evaluate-detail-page"> |
|
|
|
|
|
<!-- 非行政执法详情 --> |
|
|
|
|
|
<template v-if="!isAdmin"> |
|
|
|
|
|
<div class="content-area"> |
|
|
|
|
|
<!-- 企业信息卡片 --> |
|
|
|
|
|
<div class="info-card"> |
|
|
|
|
|
<div class="card-title">企业信息</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">企业名称</span> |
|
|
|
|
|
<span class="info-value">{{ detail.enterpriseName || '-' }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">统一社会信用代码</span> |
|
|
|
|
|
<span class="info-value">{{ detail.enterpriseNumber || '-' }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 入企信息卡片 --> |
|
|
|
|
|
<div class="info-card"> |
|
|
|
|
|
<div class="card-title">入企信息</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">入企单位</span> |
|
|
|
|
|
<span class="info-value">{{ detail.bureauDeptName || '-' }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">入企人员</span> |
|
|
|
|
|
<div class="info-value enforcer-value"> |
|
|
|
|
|
<div class="enforcer-line"> |
|
|
|
|
|
<span class="enforcer-name">{{ parseEnforcer(detail.lawEnforcer).name }}</span> |
|
|
|
|
|
<span v-if="parseEnforcer(detail.lawEnforcer).phone" class="enforcer-id">{{ parseEnforcer(detail.lawEnforcer).phone }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="enforcer-line"> |
|
|
|
|
|
<span class="enforcer-name">{{ parseEnforcer(detail.lawEnforcerOther).name }}</span> |
|
|
|
|
|
<span v-if="parseEnforcer(detail.lawEnforcerOther).phone" class="enforcer-id">{{ parseEnforcer(detail.lawEnforcerOther).phone }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">入企事由</span> |
|
|
|
|
|
<span class="info-value">{{ detail.lawEnforcementItemText}}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">入企事项</span> |
|
|
|
|
|
<span class="info-value">{{ detail.lawEnforcementTypeText }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="info-row"> |
|
|
|
|
|
<span class="info-label">入企时间</span> |
|
|
|
|
|
<span class="info-value">{{ detail.enforcementTime }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> |
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 行政执法详情(原内容) --> |
|
|
|
|
|
<template v-else> |
|
|
<!-- 顶部导航栏 --> |
|
|
<!-- 顶部导航栏 --> |
|
|
<!-- <van-nav-bar :title="detail.title || '执法反馈'" left-text="关闭" left-arrow @click-left="onClickLeft" /> --> |
|
|
<!-- <van-nav-bar :title="detail.title || '执法反馈'" left-text="关闭" left-arrow @click-left="onClickLeft" /> --> |
|
|
|
|
|
|
|
|
@ -54,28 +108,6 @@ |
|
|
<span class="info-label">执法时间</span> |
|
|
<span class="info-label">执法时间</span> |
|
|
<span class="info-value">{{ detail.enforcementTime }}</span> |
|
|
<span class="info-value">{{ detail.enforcementTime }}</span> |
|
|
</div> |
|
|
</div> |
|
|
<!-- <div class="info-row"> |
|
|
|
|
|
<span class="info-label">受委托执法</span> |
|
|
|
|
|
<span class="info-value"> |
|
|
|
|
|
<van-radio-group v-model="detail.hasAuto" direction="horizontal" disabled> |
|
|
|
|
|
<van-radio :name="1" shape="square">是</van-radio> |
|
|
|
|
|
<van-radio :name="0" shape="square">否</van-radio> |
|
|
|
|
|
</van-radio-group> |
|
|
|
|
|
</span> |
|
|
|
|
|
</div> --> |
|
|
|
|
|
<!-- <div class="info-row"> |
|
|
|
|
|
<span class="info-label">委托行政机关</span> |
|
|
|
|
|
<span class="info-value">{{ detail.entrustDeptName }}</span> |
|
|
|
|
|
</div> --> |
|
|
|
|
|
<!-- <div class="info-row result-row"> |
|
|
|
|
|
<span class="info-label">结果</span> |
|
|
|
|
|
<span class="info-value"> |
|
|
|
|
|
<span class="result-tag" :class="detail.reslut === 0 ? 'pass' : 'fail'">{{ detail.reslut === 0 ? |
|
|
|
|
|
'合格' : '不合格' |
|
|
|
|
|
}}</span> |
|
|
|
|
|
<span class="view-detail-link" @click="onViewCaseDetail">查看案件详情 ></span> |
|
|
|
|
|
</span> |
|
|
|
|
|
</div> --> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
<div class="info-card"> |
|
|
<div class="info-card"> |
|
|
<div class="info-has-auto"> |
|
|
<div class="info-has-auto"> |
|
|
@ -105,58 +137,6 @@ |
|
|
|
|
|
|
|
|
<!-- 反馈卡片(已反馈:仅当后端返回 enterpriseEvaluateInfoVo 有数据时显示;待反馈:始终显示) --> |
|
|
<!-- 反馈卡片(已反馈:仅当后端返回 enterpriseEvaluateInfoVo 有数据时显示;待反馈:始终显示) --> |
|
|
<div class="evaluate-card" v-if="showEvaluateCard"> |
|
|
<div class="evaluate-card" v-if="showEvaluateCard"> |
|
|
<!-- <div class="card-title">反馈</div> --> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 表情选择 --> |
|
|
|
|
|
<!-- <div class="emoji-section"> |
|
|
|
|
|
<div class="emoji-item" :class="{ active: evaluateForm.satisfactionLevel === 3, disabled: readonly }" |
|
|
|
|
|
@click="!readonly && (evaluateForm.satisfactionLevel = 3)"> |
|
|
|
|
|
<img class="emoji-img" :src="evaluateForm.satisfactionLevel === 3 ? veryGoodImg : veryGoodDisImg" |
|
|
|
|
|
alt="满意" /> |
|
|
|
|
|
<span class="emoji-label">满意</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="emoji-item" :class="{ active: evaluateForm.satisfactionLevel === 2, disabled: readonly }" |
|
|
|
|
|
@click="!readonly && (evaluateForm.satisfactionLevel = 2)"> |
|
|
|
|
|
<img class="emoji-img" :src="evaluateForm.satisfactionLevel === 2 ? goodImg : goodDisImg" |
|
|
|
|
|
alt="较满意" /> |
|
|
|
|
|
<span class="emoji-label">较满意</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="emoji-item" :class="{ active: evaluateForm.satisfactionLevel === 1, disabled: readonly }" |
|
|
|
|
|
@click="!readonly && (evaluateForm.satisfactionLevel = 1)"> |
|
|
|
|
|
<img class="emoji-img" :src="evaluateForm.satisfactionLevel === 1 ? badImg : badDisImg" |
|
|
|
|
|
alt="不满意" /> |
|
|
|
|
|
<span class="emoji-label">不满意</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> --> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 星级评分 --> |
|
|
|
|
|
<!-- <div class="rating-section"> |
|
|
|
|
|
<div class="rating-row"> |
|
|
|
|
|
<span class="rating-label">执法文明</span> |
|
|
|
|
|
<van-rate v-model="evaluateForm.civility" :size="20" color="#ffd21e" void-icon="star" |
|
|
|
|
|
void-color="#eee" :readonly="readonly" /> |
|
|
|
|
|
<span class="rating-text">{{ getRatingText(evaluateForm.civility) }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="rating-row"> |
|
|
|
|
|
<span class="rating-label">执法效率</span> |
|
|
|
|
|
<van-rate v-model="evaluateForm.efficiency" :size="20" color="#ffd21e" void-icon="star" |
|
|
|
|
|
void-color="#eee" :readonly="readonly" /> |
|
|
|
|
|
<span class="rating-text">{{ getRatingText(evaluateForm.efficiency) }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="rating-row"> |
|
|
|
|
|
<span class="rating-label">执法态度</span> |
|
|
|
|
|
<van-rate v-model="evaluateForm.attitude" :size="20" color="#ffd21e" void-icon="star" |
|
|
|
|
|
void-color="#eee" :readonly="readonly" /> |
|
|
|
|
|
<span class="rating-text">{{ getRatingText(evaluateForm.attitude) }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div class="rating-row"> |
|
|
|
|
|
<span class="rating-label">合 法 性</span> |
|
|
|
|
|
<van-rate v-model="evaluateForm.legality" :size="20" color="#ffd21e" void-icon="star" |
|
|
|
|
|
void-color="#eee" :readonly="readonly" /> |
|
|
|
|
|
<span class="rating-text">{{ getRatingText(evaluateForm.legality) }}</span> |
|
|
|
|
|
</div> |
|
|
|
|
|
</div> --> |
|
|
|
|
|
|
|
|
|
|
|
<!-- 其他问题开关 --> |
|
|
<!-- 其他问题开关 --> |
|
|
<div class="switch-section"> |
|
|
<div class="switch-section"> |
|
|
<span class="switch-label">反馈</span> |
|
|
<span class="switch-label">反馈</span> |
|
|
@ -189,6 +169,7 @@ |
|
|
<div class="footer-bar" v-if="!readonly"> |
|
|
<div class="footer-bar" v-if="!readonly"> |
|
|
<van-button type="primary" block round @click="onSubmit">提交反馈</van-button> |
|
|
<van-button type="primary" block round @click="onSubmit">提交反馈</van-button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
</template> |
|
|
</div> |
|
|
</div> |
|
|
</template> |
|
|
</template> |
|
|
|
|
|
|
|
|
@ -209,6 +190,7 @@ import badUnselectImg from '@/assets/images/onbad.png'; |
|
|
import { |
|
|
import { |
|
|
getEvaluateDetail, |
|
|
getEvaluateDetail, |
|
|
getEnforcementRegistrationDetailById, |
|
|
getEnforcementRegistrationDetailById, |
|
|
|
|
|
queryNonEnforcementRegistrationDetailById, |
|
|
submitEvaluate, |
|
|
submitEvaluate, |
|
|
} from '@/api/enterprise'; |
|
|
} from '@/api/enterprise'; |
|
|
import { loadDict, getDictText } from '@/util/dictUtil'; |
|
|
import { loadDict, getDictText } from '@/util/dictUtil'; |
|
|
@ -218,6 +200,8 @@ const router = useRouter(); |
|
|
const route = useRoute(); |
|
|
const route = useRoute(); |
|
|
|
|
|
|
|
|
const id = route.query.id; |
|
|
const id = route.query.id; |
|
|
|
|
|
// 行政/非行政分流标识:列表页跳过来时 lawType='1' 表示行政 |
|
|
|
|
|
const isAdmin = computed(() => String(route.query.lawType || '1') === '1'); |
|
|
// 只读标识:hasEvaluate=1 已反馈只能查看,0/空 为待反馈可提交 |
|
|
// 只读标识:hasEvaluate=1 已反馈只能查看,0/空 为待反馈可提交 |
|
|
const readonly = computed(() => String(route.query.hasEvaluate) === '1'); |
|
|
const readonly = computed(() => String(route.query.hasEvaluate) === '1'); |
|
|
// 已反馈返回的反馈信息对象(后端 enterpriseEvaluateInfoVo) |
|
|
// 已反馈返回的反馈信息对象(后端 enterpriseEvaluateInfoVo) |
|
|
@ -253,7 +237,6 @@ const detail = ref({ |
|
|
result: '', |
|
|
result: '', |
|
|
attachments: [], |
|
|
attachments: [], |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
// ========== 反馈表单(默认值:满意=3 / 5 星 / 其他问题打开)========== |
|
|
// ========== 反馈表单(默认值:满意=3 / 5 星 / 其他问题打开)========== |
|
|
// 满意度数值:1=不满意,2=较满意,3=满意 |
|
|
// 满意度数值:1=不满意,2=较满意,3=满意 |
|
|
const evaluateForm = ref({ |
|
|
const evaluateForm = ref({ |
|
|
@ -308,12 +291,24 @@ const getEnforcers = (data) => { |
|
|
// 获取执法详情 |
|
|
// 获取执法详情 |
|
|
const fetchRegistrationDetail = () => { |
|
|
const fetchRegistrationDetail = () => { |
|
|
if (!id) return; |
|
|
if (!id) return; |
|
|
getEnforcementRegistrationDetailById({ id }, (res) => { |
|
|
const lawType = String(route.query.lawType || ''); |
|
|
|
|
|
const isAdmin = lawType === '1'; |
|
|
|
|
|
const api = isAdmin |
|
|
|
|
|
? getEnforcementRegistrationDetailById |
|
|
|
|
|
: queryNonEnforcementRegistrationDetailById; |
|
|
|
|
|
|
|
|
|
|
|
api({ id }, (res) => { |
|
|
|
|
|
// 兼容多种返回包裹:行政接口是 { data: { enforcementRegistrationVo, enterpriseEvaluateInfoVo } } |
|
|
|
|
|
// 非行政接口可能是 { data: 详情对象 } 或 直接就是详情对象,这里做统一兜底 |
|
|
const data = (res && (res.data || res.rows?.[0] || res)) || {}; |
|
|
const data = (res && (res.data || res.rows?.[0] || res)) || {}; |
|
|
detail.value = data.enforcementRegistrationVo |
|
|
// 详情对象:优先取行政接口的 enforcementRegistrationVo,否则 data 本身就是详情 |
|
|
|| {}; |
|
|
const detailData = data.enforcementRegistrationVo |
|
|
// 保存企业反馈信息(可能为 null),用于已反馈识别反馈卡片是否显示 |
|
|
|| data.nonEnforcementRegistrationVo |
|
|
evaluateInfo.value = data.enterpriseEvaluateInfoVo || null; |
|
|
|| data.vo |
|
|
|
|
|
|| data; |
|
|
|
|
|
detail.value = detailData; |
|
|
|
|
|
// 反馈信息 |
|
|
|
|
|
evaluateInfo.value = data.enterpriseEvaluateInfoVo || data.evaluateInfo || null; |
|
|
// 已反馈:将后端反馈数据回填到表单供只读展示 |
|
|
// 已反馈:将后端反馈数据回填到表单供只读展示 |
|
|
if (evaluateInfo.value) fillEvaluateFormFromInfo(evaluateInfo.value); |
|
|
if (evaluateInfo.value) fillEvaluateFormFromInfo(evaluateInfo.value); |
|
|
}, () => { |
|
|
}, () => { |
|
|
|