Browse Source

计划、预告bug修复

dev-V1.0.6
wangmingyong@163.com 3 months ago
parent
commit
5493ad1db7
  1. 92
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue
  2. 53
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_mine.vue
  3. 25
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_other.vue
  4. 2
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_list.vue
  5. 22
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_manual.vue
  6. 22
      zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/reserve/cp_reserve_system.vue

92
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_edit.vue

@ -1,8 +1,8 @@
<template>
<div class="plan-edit-page app_content">
<div class="plan-edit-page app_content" :class="{ 'is-readonly': isReadonly }">
<!-- 顶部导航 -->
<!-- <van-nav-bar
:title="isEdit ? '编辑计划' : '新增计划'"
:title="isReadonly ? '计划详情' : (isEdit ? '编辑计划' : '新增计划')"
left-arrow
@click-left="onBack"
/> -->
@ -24,9 +24,9 @@
<!-- 表单 -->
<div class="form-card">
<!-- 计划类别 -->
<van-field name="planType" label="计划类别" required>
<van-field name="planType" label="计划类别" :required="!isReadonly">
<template #input>
<van-radio-group v-model="form.planType" direction="horizontal">
<van-radio-group v-model="form.planType" direction="horizontal" :disabled="isReadonly">
<van-radio :name="1">日常计划</van-radio>
<van-radio :name="2">专项计划</van-radio>
</van-radio-group>
@ -38,17 +38,17 @@
v-model="planDateDisplay"
label="计划时间"
placeholder="请选择时间"
required
:required="!isReadonly"
readonly
:is-link="!isPrefillMode"
:disabled="isPrefillMode"
@click="!isPrefillMode && (showDatePicker = true)"
:is-link="!isPrefillMode && !isReadonly"
:disabled="isPrefillMode || isReadonly"
@click="!isPrefillMode && !isReadonly && (showDatePicker = true)"
/>
<!-- 执行时段 -->
<van-field name="planTime" label="执行时段" required :disabled="isPrefillMode">
<van-field name="planTime" label="执行时段" :required="!isReadonly" :disabled="isPrefillMode || isReadonly">
<template #input>
<van-radio-group v-model="form.planTime" direction="horizontal" :disabled="isPrefillMode">
<van-radio-group v-model="form.planTime" direction="horizontal" :disabled="isPrefillMode || isReadonly">
<van-radio :name="1">上午(9:00-12:00)</van-radio>
<van-radio :name="2">下午(14:00-18:00)</van-radio>
<van-radio :name="3">其他(18:00-21:00)</van-radio>
@ -62,18 +62,19 @@
label="执法事项"
type="textarea"
placeholder="请输入执法事项"
required
:required="!isReadonly"
:maxlength="1000"
show-word-limit
rows="3"
autosize
:disabled="isReadonly"
/>
<!-- 执法单位 -->
<van-field
v-model="form.bureauDeptName"
label="执法单位"
required
:required="!isReadonly"
readonly
/>
@ -82,15 +83,15 @@
v-model="form.enterpriseName"
label="企业名称"
placeholder="请选择企业"
required
:required="!isReadonly"
readonly
:is-link="!isPrefillMode"
:disabled="isPrefillMode"
@click="!isPrefillMode && onOpenEnterprisePicker()"
:is-link="!isPrefillMode && !isReadonly"
:disabled="isPrefillMode || isReadonly"
@click="!isPrefillMode && !isReadonly && onOpenEnterprisePicker()"
/>
<!-- 执法人员 -->
<van-field label="执法人员" required>
<van-field label="执法人员" :required="!isReadonly">
<template #input>
<div class="person-box">
<div
@ -101,13 +102,13 @@
<span class="person-name">{{ person.name }}</span>
<span class="person-phone">{{ person.phone }}</span>
<van-icon
v-if="personList.length > 1 && person.phone !== useCommon.phonenumber"
v-if="!isReadonly && personList.length > 1 && person.phone !== useCommon.phonenumber"
name="close"
class="person-remove"
@click="removePerson(index)"
/>
</div>
<div class="add-person-line" @click="onAddPerson">
<div v-if="!isReadonly" class="add-person-line" @click="onAddPerson">
<span class="placeholder-text">请输入</span>
<van-icon name="add-o" color="#2382cf" size="20" />
</div>
@ -116,9 +117,9 @@
</van-field>
<!-- 是否公开 -->
<van-field name="isPublic" label="是否公开" required :disabled="isPrefillMode">
<van-field name="isPublic" label="是否公开" :required="!isReadonly" :disabled="isPrefillMode || isReadonly">
<template #input>
<van-radio-group v-model="form.isPublic" direction="horizontal" :disabled="isPrefillMode">
<van-radio-group v-model="form.isPublic" direction="horizontal" :disabled="isPrefillMode || isReadonly">
<van-radio :name="1">是</van-radio>
<van-radio :name="0">否</van-radio>
</van-radio-group>
@ -126,9 +127,9 @@
</van-field>
<!-- 参与联合 -->
<van-field name="isUnion" label="参与联合" required :disabled="isPrefillMode">
<van-field name="isUnion" label="参与联合" :required="!isReadonly" :disabled="isPrefillMode || isReadonly">
<template #input>
<van-radio-group v-model="form.isUnion" direction="horizontal" :disabled="isPrefillMode">
<van-radio-group v-model="form.isUnion" direction="horizontal" :disabled="isPrefillMode || isReadonly">
<van-radio :name="1">是</van-radio>
<van-radio :name="0">否</van-radio>
</van-radio-group>
@ -137,7 +138,7 @@
</div>
<!-- 提交按钮 -->
<div class="submit-wrap">
<div class="submit-wrap" v-if="!isReadonly">
<van-button
type="primary"
block
@ -258,6 +259,8 @@ const route = useRoute();
const {useCommon} = $globalStore;
const isEdit = computed(() => !!route.query.id);
// 是否为只读查看模式
const isReadonly = computed(() => route.query.readonly === '1');
// 是否为预填模式(从其他计划页面点击"添加计划"跳转过来)
const isPrefillMode = computed(() => !isEdit.value && !!route.query.prefillPlanDate);
const showNotice = ref(true);
@ -700,6 +703,7 @@ const validate = () => {
// 提交(reserveStatus 固定=1,草稿功能暂不实现)
const onSubmit = () => {
if (isReadonly.value) return;
if (!validate()) return;
// 检柡是否需要确认Dialog
@ -1056,4 +1060,44 @@ const doSubmit = () => {
}
}
}
/* 只读模式样式优化 */
.plan-edit-page.is-readonly {
.form-card {
:deep(.van-field) {
background: #f7f8fa;
}
:deep(.van-field__control) {
color: #969799;
-webkit-text-fill-color: #969799;
}
:deep(.van-field__control::placeholder) {
color: #c8c9cc;
}
:deep(.van-radio) {
&--disabled {
opacity: 0.5;
}
.van-radio__label {
color: #969799;
}
}
:deep(.van-radio__icon) {
&--disabled {
background: #ebedf0;
border-color: #dcdee0;
}
}
.person-line .person-name,
.person-line .person-phone {
color: #969799;
}
}
}
</style>

53
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_mine.vue

@ -20,11 +20,14 @@
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
finished-text=""
@load="onLoad"
>
<div class="plan-list">
<section
<div v-if="!loading && planList.length === 0" class="plan-empty">
<van-empty description="暂无计划" />
</div>
<div v-else class="plan-list">
<!-- <section
v-for="(item, index) in planList"
:key="item.id"
class="plan-card normal-card"
@ -33,6 +36,12 @@
'expanded-card': expandedId === item.id
}"
@click="onToggleExpand(item)"
> -->
<section
v-for="item in planList"
:key="item.id"
class="plan-card normal-card"
@click="onViewDetail(item)"
>
<!-- <div class="card-header">
<div class="card-type">{{ item.isUnion === 1 ? '联合执法' : '非联合执法' }} / {{ item.isPublic === 1 ? '公开' : '非公开' }}</div>
@ -129,9 +138,7 @@
</div>
</section>
</div>
<!-- 空状态 -->
<van-empty v-if="!loading && planList.length === 0" description="暂无计划" />
<div v-if="finished && planList.length > 0" class="list-finished">没有更多了</div>
</van-list>
</van-pull-refresh>
</div>
@ -201,7 +208,18 @@ const pageNum = ref(1);
const pageSize = 10;
const expandedId = ref(null);
// 切换展开/收起
// 点击卡片查看详情
const onViewDetail = (item) => {
if (item.editEnable !== 0) {
// 可编辑:跳转编辑模式
router.push({ path: '/enforcement/plan/edit', query: { id: item.id } });
} else {
// 不可编辑:跳转只读模式
router.push({ path: '/enforcement/plan/edit', query: { id: item.id, readonly: '1' } });
}
};
// 切换展开/收起(保留兼容)
const onToggleExpand = (item) => {
expandedId.value = expandedId.value === item.id ? null : item.id;
};
@ -343,11 +361,11 @@ onMounted(() => {
cursor: pointer;
transition: all 0.2s;
&.active {
color: #fff;
background: linear-gradient(135deg, #1890ff, #0b63d1);
font-weight: 500;
}
// &.active {
// color: #fff;
// background: linear-gradient(135deg, #1890ff, #0b63d1);
// font-weight: 500;
// }
}
}
@ -358,6 +376,17 @@ onMounted(() => {
box-sizing: border-box;
}
.plan-empty {
padding: 40px 0;
}
.list-finished {
text-align: center;
font-size: 13px;
color: #969799;
padding: 16px 0;
}
/* 卡片通用 */
.plan-card {
border-radius: 14px;

25
zdxt-web-client/zdxt-efcode-enforcement-app/src/views/enforcement/my/plan/cp_plan_other.vue

@ -15,10 +15,13 @@
<van-list
v-model:loading="loading"
:finished="finished"
finished-text="没有更多了"
finished-text=""
@load="onLoad"
>
<div class="plan-list">
<div v-if="!loading && planList.length === 0" class="plan-empty">
<van-empty description="暂无可预约的计划" />
</div>
<div v-else class="plan-list">
<section
v-for="(item, index) in planList"
:key="item.id"
@ -64,9 +67,7 @@
</div>
</section>
</div>
<!-- 空状态 -->
<van-empty v-if="!loading && planList.length === 0" description="暂无可预约的计划" />
<div v-if="finished && planList.length > 0" class="list-finished">没有更多了</div>
</van-list>
</van-pull-refresh>
@ -311,7 +312,7 @@ const onConfirmReserve = () => {
.plan-other {
height: 100%;
overflow-y: auto;
padding: 12px;
// padding: 12px;
padding-top: 0;
box-sizing: border-box;
}
@ -320,6 +321,18 @@ const onConfirmReserve = () => {
display: flex;
flex-direction: column;
gap: 14px;
padding:10px 12px;
}
.plan-empty {
padding: 40px 0;
}
.list-finished {
text-align: center;
font-size: 13px;
color: #969799;
padding: 16px 0;
}
/* 卡片通用 */

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

@ -76,7 +76,7 @@ const onAutoMatch = () => {
display: flex;
flex-direction: column;
height: 100%;
background: #EBF4FB;
background: #fbfdff;
position: relative;
overflow: hidden;
}

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

@ -14,8 +14,11 @@
</div> -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="reserve-list">
<van-list v-model:loading="loading" :finished="finished" finished-text="" @load="onLoad">
<div v-if="!loading && reserveList.length === 0" class="reserve-empty">
<van-empty description="暂无手动预约记录" />
</div>
<div v-else 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">
@ -116,9 +119,7 @@
</div>
</section>
</div>
<!-- 空状态 -->
<van-empty v-if="!loading && reserveList.length === 0" description="暂无手动预约记录" />
<div v-if="finished && reserveList.length > 0" class="list-finished">没有更多了</div>
</van-list>
</van-pull-refresh>
</div>
@ -327,6 +328,17 @@ const onReject = (item) => {
gap: 14px;
}
.reserve-empty {
padding: 40px 0;
}
.list-finished {
text-align: center;
font-size: 13px;
color: #969799;
padding: 16px 0;
}
.reserve-card {
background: linear-gradient(220deg, #175cc4 1%, #3b8dda 20%, #0b3fb4 100%);
border-radius: 8px;

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

@ -14,8 +14,11 @@
</div> -->
<van-pull-refresh v-model="refreshing" @refresh="onRefresh">
<van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad">
<div class="reserve-list">
<van-list v-model:loading="loading" :finished="finished" finished-text="" @load="onLoad">
<div v-if="!loading && reserveList.length === 0" class="reserve-empty">
<van-empty description="暂无系统匹配记录" />
</div>
<div v-else 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">
@ -133,9 +136,7 @@
</div>
</section>
</div>
<!-- 空状态 -->
<van-empty v-if="!loading && reserveList.length === 0" description="暂无系统匹配记录" />
<div v-if="finished && reserveList.length > 0" class="list-finished">没有更多了</div>
</van-list>
</van-pull-refresh>
@ -467,6 +468,17 @@ const onReject = (item) => {
gap: 14px;
}
.reserve-empty {
padding: 40px 0;
}
.list-finished {
text-align: center;
font-size: 13px;
color: #969799;
padding: 16px 0;
}
.reserve-card {
background: linear-gradient(220deg, #175cc4 1%, #3b8dda 20%, #0b3fb4 100%);
border-radius: 8px;

Loading…
Cancel
Save