Browse Source

Merge remote-tracking branch 'origin/dev' into dev

dev
zhuibobo 1 month ago
parent
commit
3adbfa6334
  1. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnterpriseSelector.vue
  2. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/HistoryActivityDetail.vue
  3. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementList.vue
  4. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementNoticeList.vue
  5. 8
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRecord.vue
  6. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enterpriseScanPreview.vue
  7. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/home/enforcementHome.vue
  8. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/law/lawServiceList.vue
  9. 13
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementReserveList.vue
  10. 6
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementTaskList.vue
  11. 4
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue
  12. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue
  13. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/enforcementMy.vue
  14. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_message.vue
  15. 152
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue
  16. 263
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue
  17. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/task/cp_task_mine.vue
  18. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/program/components/ProgramQuery.vue
  19. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/query/enforcementQuery.vue
  20. 4
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/register/EnterpriseSelector.vue

@ -228,7 +228,7 @@ const handleClose = () => {
.enterprise-qr {
width: 1.2rem;
height: 1.2rem;
background: #ebf3fb;
background: #fbfdff;
border-radius: 0.1rem;
display: flex;
align-items: center;

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/components/HistoryActivityDetail.vue

@ -114,7 +114,7 @@ onMounted(() => {
<style lang="less" scoped>
.history-activity-detail {
min-height: 100vh;
background-color: #ebf3fb;
background-color: #fbfdff;
box-sizing: border-box;
padding-top: 12px;

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementList.vue

@ -213,7 +213,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
height: 100%;
background-color: #ebf3fb;
background-color: #fbfdff;
.list-container {
flex: 1;

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementNoticeList.vue

@ -181,7 +181,7 @@ const onFeedback = (item) => {
display: flex;
flex-direction: column;
height: 100%;
background-color: #ebf3fb;
background-color: #fbfdff;
.list-container {
flex: 1;

8
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/enforce/enforcementRecord.vue

@ -405,7 +405,7 @@ const currentTableData = computed(() => {
flex-direction: column;
height: 100%;
overflow: hidden;
background: #f0f6ff;
background: #fbfdff;
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
@ -601,7 +601,7 @@ const currentTableData = computed(() => {
}
.stat-item {
background: #f0f6ff;
background: #fbfdff;
border-radius: 8px;
padding: 14px 10px;
text-align: center;
@ -789,7 +789,7 @@ const currentTableData = computed(() => {
.supervision-item,
.warning-item {
background: #f0f6ff;
background: #fbfdff;
border-radius: 8px;
padding: 16px 10px;
text-align: center;
@ -830,7 +830,7 @@ const currentTableData = computed(() => {
&.warning-grid-divider {
position: relative;
grid-template-columns: 1fr auto 1fr;
background: #f0f6ff;
background: #fbfdff;
border-radius: 8px;
margin-top: 10px;
.warning-item {

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

@ -306,7 +306,7 @@ const toSign = () => {
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #ebf3fb;
background-color: #fbfdff;
.warp_body {
position: relative;

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

@ -192,7 +192,7 @@ onMounted(() => {
flex-direction: column;
height: 100%;
overflow: hidden;
background: #f0f6ff;
background: #fbfdff;
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
}

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/law/lawServiceList.vue

@ -235,7 +235,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
height: 100%;
background-color: #ebf3fb;
background-color: #fbfdff;
.list-container {
flex: 1;

13
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementReserveList.vue

@ -19,11 +19,11 @@
<!-- <div class="card-header">
<span class="reserve-type">待确认预约:</span>
</div> -->
<div class="reserve-type">执行任务:</div>
<div class="reserve-type">确认预约:</div>
<div class="card-body">
<div class="reserve-row">
<span class="reserve-label">{{ item.reserveUnit ? '预约单位' : '执法单位' }}</span>
<span class="reserve-value">{{ item.reserveUnit || item.enforcementUnit || '-' }}</span>
<span class="reserve-value">{{ item.reserveUnit || item.bureauDeptName || '-' }}</span>
</div>
<div class="reserve-row">
<span class="reserve-label">企业名称</span>
@ -31,7 +31,7 @@
</div>
<div class="reserve-row">
<span class="reserve-label">检查时间</span>
<span class="reserve-value">{{ item.checkTime || '-' }}</span>
<span class="reserve-value">{{ formatDate(item.planDate) }}</span>
</div>
</div>
</div>
@ -108,6 +108,11 @@ const fetchReserveList = () => {
});
};
const formatDate = (dateStr) => {
if (!dateStr) return '-';
return dateStr.substring(0, 10);
};
const onLoad = () => {
if (loading.value || finished.value) return;
fetchReserveList();
@ -148,7 +153,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
height: 100%;
background: #ebf3fb;
background: #fbfdff;
}
.content-area {

6
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/enforcementTaskList.vue

@ -28,11 +28,11 @@
</div>
<div class="task-row">
<span class="task-label">检查时间</span>
<span class="task-value">{{ item.checkTime || '-' }}</span>
<span class="task-value">{{ item.planDate || '-' }}</span>
</div>
<div class="task-row">
<span class="task-label">执法事项</span>
<span class="task-value">{{ item.enforcementItem || '-' }}</span>
<span class="task-value">{{ item.enforceContent || '-' }}</span>
</div>
</div>
</div>
@ -156,7 +156,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
height: 100%;
background: #ebf3fb;
background: #fbfdff;
}
.content-area {

4
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/messageCenter.vue

@ -392,7 +392,7 @@ onMounted(() => {
flex-direction: column;
height: 100%;
overflow: hidden;
background: #f0f6ff;
background: #fbfdff;
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Microsoft YaHei', sans-serif;
}
@ -451,7 +451,7 @@ onMounted(() => {
}
:deep(.message-tabs .van-tabs__content) {
background: #f0f6ff;
background: #fbfdff;
padding: 12px 16px;
}

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/message/planNoticeList.vue

@ -199,7 +199,7 @@ onMounted(() => {
height: 100%;
display: flex;
flex-direction: column;
background-color: #ebf3fb;
background-color: #fbfdff;
}
/* ===== 导航栏样式 ===== */

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/enforcementMy.vue

@ -146,7 +146,7 @@ const onMenuClick = (item) => {
display: flex;
flex-direction: column;
height: 100%;
background: #f0f6ff;
background: #fbfdff;
font-family: none;
overflow: hidden;
}

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/notice/cp_notice_message.vue

@ -174,7 +174,7 @@ const onBack = () => {
display: flex;
flex-direction: column;
height: 100%;
background: #f0f6ff;
background: #fbfdff;
overflow: hidden;
}

152
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue

@ -14,35 +14,32 @@
</div> -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="reserve-list">
<section
v-for="item in reserveList"
:key="item.id"
class="reserve-card"
:class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3 }"
>
<div class="card-header">
<section v-for="item in reserveList" :key="item.id" class="reserve-card"
:class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3 }">
<!-- <div class="card-header">
<div class="card-label" :class="{ 'sent-label': isSentByMe(item) }">
{{ isSentByMe(item) ? '我发起的' : '收到预约' }}
</div>
<div class="status" :class="getStatusClass(item.opStatus)">
{{ getStatusText(item.opStatus) }}
</div>
</div>
</div> -->
<!-- 预约单位信息 -->
<div class="unit-block">
<div class="unit-block-header">
<!-- <div class="unit-block-header">
<span class="unit-block-tag">预约单位</span>
</div> -->
<div class="unit-block-content">
<div class="unit-block-title">企业{{ item.enterpriseName || item.bureauDeptName || '-' }}
</div>
<div class="unit-block-tip">已确认</div>
</div>
<div class="unit-block-title">企业{{ item.enterpriseName || item.bureauDeptName || '-' }}</div>
<div class="unit-block-subtitle">{{ formatPlanDate(item.planDate) }} {{ getPlanTimeText(item.planTime) }}</div>
<div class="unit-block-subtitle">{{ formatPlanDate(item.planDate) }} {{
getPlanTimeText(item.planTime) }}</div>
<div class="unit-block-divider"></div>
<div class="info-row">
<div class="label">执法单位</div>
@ -60,11 +57,18 @@
<!-- 被约单位信息 -->
<div class="unit-block unit-block-target">
<div class="unit-block-header">
<!-- <div class="unit-block-header">
<span class="unit-block-tag unit-block-tag-target">被约单位</span>
</div> -->
<div class="unit-block-content">
<div class="unit-block-title">企业{{ item.targetEnterpriseName ||
item.targetBureauDeptName
|| '-' }}</div>
<div class="unit-block-tip pending-tip">待确认</div>
</div>
<div class="unit-block-title">企业{{ item.targetEnterpriseName || item.targetBureauDeptName || '-' }}</div>
<div class="unit-block-text">联合单位</div>
<div class="unit-block-divider"></div>
<div class="info-row">
<div class="label">执法单位</div>
@ -80,19 +84,21 @@
</div>
<div class="info-row">
<div class="label">计划时间</div>
<div class="value">{{ formatPlanDate(item.targetPlanDate) }} {{ getPlanTimeText(item.targetPlanTime) }}</div>
<div class="value">{{ formatPlanDate(item.targetPlanDate) }} {{
getPlanTimeText(item.targetPlanTime) }}</div>
</div>
</div>
<div class="info-row reserve-time-row">
<!-- <div class="info-row reserve-time-row">
<div class="label">预约时间</div>
<div class="value">{{ formatDate(item.reserveTime) }}</div>
</div>
</div> -->
<!-- 待确认状态且收到的预约才显示操作按钮我发起的不能操作 -->
<div v-if="item.opStatus === 3 && !isSentByMe(item)" class="card-actions">
<div class="actions-left">
<div v-if="item.opMessage" class="action-item message-action" @click.stop="onShowMessage(item)">
<div v-if="item.opMessage" class="action-item message-action"
@click.stop="onShowMessage(item)">
<van-icon name="chat-o" />
<span>查看留言</span>
</div>
@ -264,7 +270,7 @@ const onApprove = (item) => {
showDialog({ title: '提示', message: res.msg || '操作失败' });
}
});
}).catch(() => {});
}).catch(() => { });
};
//
@ -281,7 +287,7 @@ const onReject = (item) => {
showDialog({ title: '提示', message: res.msg || '操作失败' });
}
});
}).catch(() => {});
}).catch(() => { });
};
</script>
@ -322,14 +328,15 @@ const onReject = (item) => {
}
.reserve-card {
background: #fff;
border-radius: 14px;
background: linear-gradient(220deg, #175cc4 1%, #3b8dda 20%, #0b3fb4 100%);
border-radius: 8px;
padding: 0;
box-shadow: 0 4px 16px rgba(44, 116, 190, 0.12), 0 1px 4px rgba(0, 0, 0, 0.06);
border: 2.5px solid #1a5fb4;
// border: 2.5px solid #1a5fb4;
overflow: hidden;
padding-bottom: 4px;
> .card-header {
>.card-header {
padding: 12px 16px;
background: linear-gradient(135deg, #0d4fad 0%, #1565c8 50%, #1e7fe0 100%);
@ -348,15 +355,11 @@ const onReject = (item) => {
}
}
> .reserve-time-row {
>.reserve-time-row {
margin: 0 16px;
padding: 10px 0;
}
> .card-actions {
margin: 0 16px;
padding-bottom: 14px;
}
}
.approved-card {
@ -368,7 +371,7 @@ const onReject = (item) => {
}
.pending-card {
border-color: #1a5fb4;
// border-color: #1a5fb4;
}
.card-header {
@ -396,10 +399,21 @@ const onReject = (item) => {
font-size: 14px;
font-weight: 500;
&.blue { color: #1f75c9; }
&.green { color: #07c160; }
&.red { color: #ee0a24; }
&.gray { color: #999; }
&.blue {
color: #1f75c9;
}
&.green {
color: #07c160;
}
&.red {
color: #ee0a24;
}
&.gray {
color: #999;
}
}
.plan-title {
@ -424,13 +438,14 @@ const onReject = (item) => {
.label {
width: 72px;
flex-shrink: 0;
color: #333;
color: #FFFFFF;
font-weight: 500;
font-size: 14px;
}
.value {
flex: 1;
color: #8a8a8a;
color: rgba(255, 255, 255, 0.6);
&.msg {
color: #666;
@ -439,10 +454,29 @@ const onReject = (item) => {
}
.unit-block {
background: linear-gradient(135deg, #0d4fad 0%, #1565c8 50%, #1e7fe0 100%);
padding: 14px 16px;
margin-bottom: 0;
border-bottom: 1px solid rgba(255,255,255,0.12);
// border-bottom: 1px solid rgba(255, 255, 255, 0.12);
.unit-block-content {
display: flex;
justify-content: space-between;
.unit-block-tip {
width: 52px;
height: 24px;
border-radius: 4px;
background: rgba(56, 255, 113, 0.1);
font-size: 12px;
color: #38FF71;
text-align: center;
line-height: 24px;
}
.pending-tip{
background: rgba(241, 116, 24, 0.1);
color: #F17418;
}
}
.unit-block-tag {
background: rgba(255, 255, 255, 0.18);
@ -451,22 +485,31 @@ const onReject = (item) => {
.unit-block-title {
color: #fff;
font-size: 14px;
}
.unit-block-subtitle {
color: rgba(255, 255, 255, 0.7);
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
}
.unit-block-divider {
border-bottom-color: rgba(255, 255, 255, 0.2);
}
.unit-block-text {
font-size: 14px;
color: #666666;
padding-bottom: 10px;
border-bottom: 1px solid #F6F6F6;
}
.label {
color: rgba(255, 255, 255, 0.85);
color: rgb(255, 255, 255);
}
.value {
color: rgba(255, 255, 255, 0.75);
color: rgba(255, 255, 255, 0.6);
}
}
@ -474,6 +517,8 @@ const onReject = (item) => {
padding: 14px 16px;
border-bottom: none;
background: #fff;
margin: 0px 4px 0px 4px;
border-radius: 4px;
.unit-block-tag {
background: #fff7e6;
@ -489,15 +534,17 @@ const onReject = (item) => {
}
.unit-block-divider {
border-bottom-color: #eef2f7;
// border-bottom-color: #eef2f7;
}
.label {
color: #333;
color: #1D1F24;
font-size: 14px;
}
.value {
color: #8a8a8a;
color: #666666;
font-size: 14px;
}
}
@ -547,12 +594,15 @@ const onReject = (item) => {
}
.card-actions {
margin-top: 14px;
padding-top: 12px;
margin: 4px;
padding: 12px;
border-top: 1px solid rgba(0, 0, 0, 0.06);
display: flex;
justify-content: space-between;
align-items: center;
background-color: #ffffff;
border-radius: 4px;
margin-bottom: 0px;
}
.actions-left {

263
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue

@ -14,92 +14,108 @@
</div> -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
@load="onLoad"
>
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="reserve-list">
<section
v-for="item in reserveList"
:key="item.id"
class="reserve-card"
:class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3 }"
>
<div class="card-header">
<section v-for="item in reserveList" :key="item.id" class="reserve-card"
:class="{ 'approved-card': item.opStatus === 1, 'rejected-card': item.opStatus === 2, 'pending-card': item.opStatus === 3 }">
<!-- <div class="card-header">
<div class="card-label">系统匹配</div>
</div>
</div> -->
<!-- 本单位信息 -->
<div class="unit-block">
<div class="unit-block-header">
<!-- <div class="unit-block-header">
<span class="unit-block-tag">本单位计划</span>
</div> -->
<div class="unit-block-content">
<div class="unit-block-title">{{ item.enterpriseName || '-' }}</div>
<div class="unit-block-tip" :class="'status-text' + getStatusClass(item.opStatus)">
{{ getStatusText(item.opStatus) }}
</div>
</div>
<div class="unit-block-title">{{ item.enterpriseName || '-' }}</div>
<div class="unit-block-subtitle">{{ formatDateShort(item.planDate) }} {{ getPlanTimeText(item.planTime) }}</div>
<div class="unit-block-subtitle">{{ formatDateShort(item.planDate) }} {{
getPlanTimeText(item.planTime) }}</div>
<div class="unit-block-divider"></div>
<div class="info-row">
<!-- <div class="info-row">
<div class="label">预约状态</div>
<div class="value">
<span :class="'status-text ' + getStatusClass(item.opStatus)">{{ getStatusText(item.opStatus) }}</span>
<span :class="'status-text ' + getStatusClass(item.opStatus)">{{
getStatusText(item.opStatus) }}</span>
</div>
</div>
</div> -->
<div class="info-row">
<div class="label">执法单位</div>
<div class="value">{{ item.bureauDeptName || '-' }}</div>
</div>
<div class="info-row">
<div class="label">执法人员</div>
<div class="value pre-line">{{ formatUserInfo(item.enforceUserNames, item.enforceUserTels) }}</div>
<div class="value pre-line">{{ formatUserInfo(item.enforceUserNames,
item.enforceUserTels) }}</div>
</div>
<div class="info-row">
<div class="label">执法事项</div>
<div class="value">{{ item.enforceContent || '-' }}</div>
</div>
<div class="info-row">
<!-- <div class="info-row">
<div class="label">匹配时间</div>
<div class="value">{{ formatDate(item.reserveTime) }}</div>
</div>
</div> -->
</div>
<!-- 关联计划默认展开 -->
<div v-if="groupMembersMap[item.id] && groupMembersMap[item.id].length > 0" class="unit-block unit-block-target">
<div class="unit-block-header">
<span class="unit-block-tag unit-block-tag-target">关联单位 ({{ groupMembersMap[item.id].length }})</span>
</div>
<div v-for="(member, idx) in groupMembersMap[item.id]" :key="member.id" class="member-section">
<div class="unit-block-title">{{ member.bureauDeptName || '-' }}</div>
<div v-if="groupMembersMap[item.id] && groupMembersMap[item.id].length > 0"
class="unit-block unit-block-target">
<!-- <div class="unit-block-header">
<span class="unit-block-tag unit-block-tag-target">关联单位 ({{
groupMembersMap[item.id].length }})</span>
</div> -->
<div v-for="(member, idx) in groupMembersMap[item.id]" :key="member.id"
class="member-section">
<div class="unit-block-content">
<div class="unit-block-title">{{ member.bureauDeptName || '-' }}</div>
<div class="unit-block-tip"
:class="'status-text' + getStatusClass(member.opStatus)">
{{ getStatusText(member.opStatus) }}
</div>
</div>
<!-- <div class="unit-block-title">{{ member.bureauDeptName || '-' }}</div> -->
<div class="unit-block-text">联合单位</div>
<div class="unit-block-divider"></div>
<div class="info-row">
<div class="label">计划时间</div>
<div class="value">{{ formatDateShort(member.planDate) }} {{ getPlanTimeText(member.planTime) }}</div>
<div class="value">{{ formatDateShort(member.planDate) }} {{
getPlanTimeText(member.planTime) }}</div>
</div>
<div class="info-row">
<!-- <div class="info-row">
<div class="label">预约状态</div>
<div class="value">
<span :class="'status-text ' + getStatusClass(member.opStatus)">{{ getStatusText(member.opStatus) }}</span>
<span :class="'status-text ' + getStatusClass(member.opStatus)">{{
getStatusText(member.opStatus) }}</span>
</div>
</div>
</div> -->
<div class="info-row">
<div class="label">执法人员</div>
<div class="value pre-line">{{ formatUserInfo(member.enforceUserNames, member.enforceUserTels) }}</div>
<div class="value pre-line">{{ formatUserInfo(member.enforceUserNames,
member.enforceUserTels) }}</div>
</div>
<div class="info-row">
<div class="label">执法事项</div>
<div class="value">{{ member.enforceContent || '-' }}</div>
</div>
<div v-if="idx < groupMembersMap[item.id].length - 1" class="member-divider"></div>
<!-- <div v-if="idx < groupMembersMap[item.id].length - 1" class="member-divider"></div> -->
</div>
</div>
<div v-else-if="item.planGroupId && groupLoadingSet.has(item.id)" class="unit-block unit-block-target">
<div v-else-if="item.planGroupId && groupLoadingSet.has(item.id)"
class="unit-block unit-block-target">
<div class="group-loading">加载关联计划中...</div>
</div>
<!-- 待确认状态直接显示操作按钮 -->
<div v-if="item.opStatus === 3" class="card-actions">
<div class="actions-left">
<div v-if="item.opMessage" class="action-item message-action" @click.stop="onShowMessage(item)">
<div v-if="item.opMessage" class="action-item message-action"
@click.stop="onShowMessage(item)">
<van-icon name="chat-o" />
<span>查看备注</span>
</div>
@ -126,24 +142,14 @@
<!-- 时间选择弹窗opOrder==0 时弹出 -->
<van-action-sheet v-model:show="showTimePicker" title="请选择执行计划的时间">
<div class="time-picker-content">
<div
v-for="(opt, idx) in timeOptions"
:key="idx"
class="time-option"
:class="{ 'time-option-selected': selectedTimeIdx === idx }"
@click="selectedTimeIdx = idx"
>
<div v-for="(opt, idx) in timeOptions" :key="idx" class="time-option"
:class="{ 'time-option-selected': selectedTimeIdx === idx }" @click="selectedTimeIdx = idx">
<div class="time-option-unit">{{ opt.bureauDeptName }}</div>
<div class="time-option-date">{{ opt.dateLabel }}</div>
</div>
<div v-if="timeOptions.length === 0" class="time-option-empty">没有可选的时间</div>
<van-button
type="primary"
block
:disabled="selectedTimeIdx === null"
class="time-confirm-btn"
@click="onConfirmTimeSelection"
>确认选择</van-button>
<van-button type="primary" block :disabled="selectedTimeIdx === null" class="time-confirm-btn"
@click="onConfirmTimeSelection">确认选择</van-button>
</div>
</van-action-sheet>
</div>
@ -353,7 +359,7 @@ const onApprove = (item) => {
cancelButtonText: '取消',
}).then(() => {
doApprove(item.id, null);
}).catch(() => {});
}).catch(() => { });
}
}, () => {
showDialog({ title: '提示', message: '网络异常,请稍后重试' });
@ -421,7 +427,7 @@ const onReject = (item) => {
showDialog({ title: '提示', message: res.msg || '操作失败' });
}
});
}).catch(() => {});
}).catch(() => { });
};
</script>
@ -462,14 +468,15 @@ const onReject = (item) => {
}
.reserve-card {
background: #fff;
border-radius: 14px;
background: linear-gradient(220deg, #175cc4 1%, #3b8dda 20%, #0b3fb4 100%);
border-radius: 8px;
padding: 0;
box-shadow: 0 4px 16px rgba(44, 116, 190, 0.12), 0 1px 4px rgba(0, 0, 0, 0.06);
border: 2.5px solid #1a5fb4;
// border: 2.5px solid #1a5fb4;
overflow: hidden;
padding-bottom: 4px;
> .card-header {
>.card-header {
padding: 12px 16px;
background: linear-gradient(135deg, #0d4fad 0%, #1565c8 50%, #1e7fe0 100%);
@ -483,16 +490,21 @@ const onReject = (item) => {
}
}
> .reserve-time-row {
>.reserve-time-row {
margin: 0 16px;
padding: 10px 0;
}
> .card-actions {
margin: 0 16px;
padding-bottom: 14px;
padding-top: 12px;
border-top: 1px solid #999;
>.card-actions {
margin: 4px;
padding: 12px;
border-top: 1px solid rgba(0, 0, 0, 0.06);
display: flex;
justify-content: space-between;
align-items: center;
background-color: #ffffff;
border-radius: 4px;
margin-bottom: 0px;
}
}
@ -528,18 +540,41 @@ const onReject = (item) => {
font-size: 14px;
font-weight: 500;
&.blue { color: #1f75c9; }
&.green { color: #07c160; }
&.red { color: #ee0a24; }
&.gray { color: #999; }
&.blue {
color: #1f75c9;
}
&.green {
color: #07c160;
}
&.red {
color: #ee0a24;
}
&.gray {
color: #999;
}
}
.status-text {
font-weight: 500;
&.blue { color: #1f75c9; }
&.green { color: #07c160; }
&.red { color: #ee0a24; }
&.gray { color: #999; }
&.blue {
color: #1f75c9;
}
&.green {
color: #07c160;
}
&.red {
color: #ee0a24;
}
&.gray {
color: #999;
}
}
.info-row {
@ -553,24 +588,55 @@ const onReject = (item) => {
.label {
width: 72px;
flex-shrink: 0;
color: #333;
color: #FFFFFF;
font-weight: 500;
font-size: 14px;
}
.value {
flex: 1;
color: #8a8a8a;
color: rgba(255, 255, 255, 0.6);
&.pre-line {
color: #666;
white-space: pre-line;
}
}
.unit-block {
background: linear-gradient(135deg, #0d4fad 0%, #1565c8 50%, #1e7fe0 100%);
padding: 14px 16px;
margin-bottom: 0;
border-bottom: 1px solid rgba(255,255,255,0.12);
// border-bottom: 1px solid rgba(255, 255, 255, 0.12);
padding-bottom: 0px;
.unit-block-content {
display: flex;
justify-content: space-between;
.unit-block-tip {
width: 52px;
height: 24px;
border-radius: 4px;
font-size: 12px;
text-align: center;
line-height: 24px;
}
.status-textblue {
background: rgba(241, 116, 24, 0.1);
color: #F17418;
}
.status-textgreen {
background: rgba(19, 103, 254, 0.1);
color: #1367FE;
}
.pending-tip {
background: rgba(241, 116, 24, 0.1);
color: #F17418;
}
}
.unit-block-tag {
background: rgba(255, 255, 255, 0.18);
@ -579,10 +645,12 @@ const onReject = (item) => {
.unit-block-title {
color: #fff;
font-size: 14px;
}
.unit-block-subtitle {
color: rgba(255, 255, 255, 0.7);
color: rgba(255, 255, 255, 0.6);
font-size: 14px;
}
.unit-block-divider {
@ -590,11 +658,11 @@ const onReject = (item) => {
}
.label {
color: rgba(255, 255, 255, 0.85);
color: rgb(255, 255, 255);
}
.value {
color: rgba(255, 255, 255, 0.75);
color: rgba(255, 255, 255, 0.6);
}
.status-text {
@ -603,10 +671,12 @@ const onReject = (item) => {
}
.unit-block-target {
padding: 14px 16px;
border-bottom: none;
background: #fff;
padding: 4px;
// border-bottom: none;
// background: #fff;
// margin: 0px 4px 0px 4px;
// border-radius: 4px;
.unit-block-tag {
background: #fff7e6;
color: #fa8c16;
@ -621,15 +691,17 @@ const onReject = (item) => {
}
.unit-block-divider {
border-bottom-color: #eef2f7;
// border-bottom-color: #eef2f7;
}
.label {
color: #333;
color: #1D1F24;
font-size: 14px;
}
.value {
color: #8a8a8a;
color: #666666;
font-size: 14px;
}
.status-text {
@ -676,14 +748,26 @@ const onReject = (item) => {
}
.member-section {
padding-bottom: 10px;
// padding-bottom: 10px;
// margin-bottom: 10px;
// border-bottom: 1px dashed #999;
padding: 14px 16px;
border-bottom: none;
background: #fff;
border-radius: 4px;
margin-bottom: 10px;
border-bottom: 1px dashed #999;
&:last-child {
padding-bottom: 0;
// padding-bottom: 0;
margin-bottom: 0;
border-bottom: none;
// border-bottom: none;
}
.unit-block-text {
font-size: 14px;
color: #666666;
padding-bottom: 10px;
border-bottom: 1px solid #F6F6F6;
}
}
@ -714,6 +798,9 @@ const onReject = (item) => {
display: flex;
justify-content: space-between;
align-items: center;
background-color: #ffffff;
border-radius: 4px;
margin-bottom: 0px;
}
.actions-left {

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/task/cp_task_mine.vue

@ -283,7 +283,7 @@ const onBack = () => {
//
const onTaskClick = (item) => {
router.push({ path: '/enforcement/task/detail', query: { planId: item.planId } });
// router.push({ path: '/enforcement/task/detail', query: { planId: item.planId } });
};
// ========== ==========

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/program/components/ProgramQuery.vue

@ -264,7 +264,7 @@ onMounted(() => {
height: 100%;
display: flex;
flex-direction: column;
background-color: #ebf3fb;
background-color: #fbfdff;
.search-button-list {
height: 0.7rem;

2
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/query/enforcementQuery.vue

@ -355,7 +355,7 @@ onMounted(() => {
display: flex;
flex-direction: column;
height: 100%;
background-color: #ebf3fb;
background-color: #fbfdff;
padding-bottom: calc(56px + env(safe-area-inset-bottom));
.list-container {

4
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/scanEntQRCode.vue

@ -498,7 +498,7 @@ onBeforeUnmount(() => {
flex-direction: column;
height: 100%;
overflow: hidden;
background-color: #ebf3fb;
background-color: #fbfdff;
.warp_body {
position: relative;
@ -743,7 +743,7 @@ onBeforeUnmount(() => {
.item-qr {
width: 1.2rem;
height: 1.2rem;
background: #ebf3fb;
background: #fbfdff;
border-radius: 0.1rem;
display: flex;
align-items: center;

Loading…
Cancel
Save