This commit is contained in:
2026-03-10 17:13:44 +08:00
3 changed files with 431 additions and 383 deletions

View File

@@ -5,7 +5,7 @@
-->
<template>
<!-- @scroll="handleScroll" @scrolltolower="scrollBottom" -->
<scroll-view :scroll-y="true" class="container" style="background-image: url('../../../packageRc/static/pageBgIndex.png');">
<scroll-view :scroll-y="true" class="container" style="background-image: url(../../../packageRc/static/pageBgIndex.png);">
<view style="padding: 40rpx 28rpx;">
<!-- #ifdef MP-WEIXIN -->
<view class="kinggang">
@@ -91,6 +91,7 @@
</view>
<view class="bottom-line">
<view><uni-icons color="#A2A2A2" type="info" size="12"></uni-icons>发布日期:{{item.createTime}}</view>
<view><uni-icons color="#A2A2A2" type="eye" size="12"></uni-icons>浏览量:{{item.viewNum || 0}}</view>
</view>
</view>
</template>

View File

@@ -1,5 +1,5 @@
<template>
<view class="page" style="background-image: url('../../../packageRc/static/pageBg.png');">
<view class="page" style="background-image: url(../../../packageRc/static/pageBg.png);">
<scroll-view :scroll-y="true" style="height: 100vh;position: relative;z-index: 1;">
<view class="input-outer-part"
style="padding: 24rpx 32rpx 0;max-height: unset;">
@@ -21,6 +21,7 @@
<view class="infos">
<view class="info">发文单位{{ policyDetail.sourceUnit }}</view>
<view class="info">发布时间{{ policyDetail.publishTime || '--' }}</view>
<view class="info">浏览量{{ policyDetail.viewNum || 0 }}</view>
</view>
</view>
<view class="main-ceontent-list">

View File

@@ -1,388 +1,434 @@
<template>
<view class="page" style="background-image: url('../../../packageRc/static/pageBg.png');">
<view class="input-outer-part"
style="padding: 24rpx 32rpx 0;max-height: unset;">
<view class="search-line">
<input style="width: 100%;" placeholder="请输入政策名称进行搜索" v-model="queryParams.searchValue" border="none" />
<img src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/search.png" class="search-icon" @click="search()" />
</view>
<view v-if="total" style="position: relative;padding: 32rpx 0;color: #000;">
<!-- <view v-if="total" style="position: relative;padding-bottom: 16px;color: #000;"> -->
<text> {{ total }} </text>
</view>
<!-- <scroll-view :scroll-y="true" style="height: calc(100vh - 342rpx);position: relative;z-index: 1;" -->
<scroll-view :scroll-y="true" style="height: calc(100vh - 232rpx);position: relative;z-index: 1;"
@scrolltolower="getBottomList">
<view style="margin-bottom: 24rpx;border-radius: 16rpx;" class="policy-list" v-for="(item, index) in tableData" :key="index" @click="goPolicyDetail(item)">
<view
class="page"
style="
background-image: url(../../../packageRc/static/pageBg.png);
"
>
<view
class="input-outer-part"
style="padding: 24rpx 32rpx 0; max-height: unset"
>
<view class="search-line">
<input
style="width: 100%"
placeholder="请输入政策名称进行搜索"
v-model="queryParams.searchValue"
border="none"
/>
<img
src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/search.png"
class="search-icon"
@click="search()"
/>
</view>
<view
v-if="total"
style="position: relative; padding: 32rpx 0; color: #000"
>
<!-- <view v-if="total" style="position: relative;padding-bottom: 16px;color: #000;"> -->
<text> {{ total }} </text>
</view>
<!-- <scroll-view :scroll-y="true" style="height: calc(100vh - 342rpx);position: relative;z-index: 1;" -->
<scroll-view
:scroll-y="true"
style="height: calc(100vh - 232rpx); position: relative; z-index: 1"
@scrolltolower="getBottomList"
>
<view
style="margin-bottom: 24rpx; border-radius: 16rpx"
class="policy-list"
v-for="(item, index) in tableData"
:key="index"
@click="goPolicyDetail(item)"
>
<view class="title">
<image src="../../../packageRc/static/zcLeft.png"/>
{{item.zcmc}}</view>
<image src="../../../packageRc/static/zcLeft.png" />
{{ item.zcmc }}</view
>
<view class="infos">
<view v-if="item.zcLevel">{{item.zcLevel}}</view>
<view v-if="item.sourceUnit">{{item.sourceUnit}}</view>
<view v-if="item.zcLevel">{{ item.zcLevel }}</view>
<view v-if="item.sourceUnit">{{ item.sourceUnit }}</view>
</view>
<view class="bottom-line">
<view><uni-icons color="#A2A2A2" type="info" size="12"></uni-icons>发文日期{{item.publishTime}}</view>
<view
><uni-icons color="#A2A2A2" type="info" size="12"></uni-icons
>发文日期{{ item.publishTime }}</view
>
<view
><uni-icons color="#A2A2A2" type="eye" size="12"></uni-icons
>浏览量{{ item.viewNum || 0 }}</view
>
</view>
</view>
<view style="padding-bottom: 24rpx;">
<img v-if="!total&&!loading" src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/empty.png"
style="width: 100%;display: block;margin: 0 auto;" />
<view v-if="loading"><u-loading-icon></u-loading-icon>
<view style="text-align: center;color: #8E8E8E;font-size: 24rpx;">加载中~</view>
</view>
<view v-else-if="showMorePage" style="text-align: center;color: #1A62CE;font-size: 24rpx;">加载更多
</view>
<view style="text-align: center;color: #8E8E8E;font-size: 24rpx;" v-else>没有更多数据了~</view>
</view>  
</scroll-view>
</view>
</view>
<view style="padding-bottom: 24rpx">
<img
v-if="!total && !loading"
src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/empty.png"
style="width: 100%; display: block; margin: 0 auto"
/>
<view v-if="loading"
><u-loading-icon></u-loading-icon>
<view style="text-align: center; color: #8e8e8e; font-size: 24rpx"
>加载中~</view
>
</view>
<view
v-else-if="showMorePage"
style="text-align: center; color: #1a62ce; font-size: 24rpx"
>加载更多
</view>
<view
style="text-align: center; color: #8e8e8e; font-size: 24rpx"
v-else
>没有更多数据了~</view
> </view
>  
</scroll-view>
</view>
</view>
</template>
<script>
import PopupList from "/packageRc/components/PopupLists.vue";
import PopupList from "/packageRc/components/PopupLists.vue";
import { getPolicyList } from "@/packageRc/apiRc/policy";
export default {
components: {
PopupList,
},
data() {
return {
queryParams: {
pageNum: 1,
pageSize: 10,
},
total: 0,
showMorePage: true,
tableData: [],
loading: false,
}
},
onLoad(options) {
this.queryParams.zclx = options.zclx
},
onShow() {
this.search();
},
methods: {
goPolicyDetail(item) {
uni.navigateTo({
url: `/packageRc/pages/policy/policyDetail?id=${item.id}`
})
},
search() {
this.showMorePage = true;
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 20;
this.tableData = [];
this.total = 0;
this.getList();
},
// 触底加载
getBottomList() {
if (
this.queryParams.pageNum * this.queryParams.pageSize >=
this.total
) {
this.showMorePage = false;
} else if (
this.queryParams.pageNum * this.queryParams.pageSize <
this.total
) {
this.queryParams.pageNum++;
this.getList();
if (
this.queryParams.pageNum * this.queryParams.pageSize >=
this.total
) {
this.showMorePage = false;
}
}
},
// 获取列表
async getList() {
this.loading = true;
getPolicyList(this.queryParams).then((res) => {
this.gettedData(res)
export default {
components: {
PopupList,
},
data() {
return {
queryParams: {
pageNum: 1,
pageSize: 10,
},
total: 0,
showMorePage: true,
tableData: [],
loading: false,
};
},
onLoad(options) {
this.queryParams.zclx = options.zclx;
},
onShow() {
this.search();
},
methods: {
goPolicyDetail(item) {
uni.navigateTo({
url: `/packageRc/pages/policy/policyDetail?id=${item.id}`,
});
},
search() {
this.showMorePage = true;
this.queryParams.pageNum = 1;
this.queryParams.pageSize = 20;
this.tableData = [];
this.total = 0;
this.getList();
},
// 触底加载
getBottomList() {
if (this.queryParams.pageNum * this.queryParams.pageSize >= this.total) {
this.showMorePage = false;
} else if (
this.queryParams.pageNum * this.queryParams.pageSize <
this.total
) {
this.queryParams.pageNum++;
this.getList();
if (
this.queryParams.pageNum * this.queryParams.pageSize >=
this.total
) {
this.showMorePage = false;
}
}
},
// 获取列表
async getList() {
this.loading = true;
getPolicyList(this.queryParams).then((res) => {
this.gettedData(res);
});
},
gettedData(res) {
if (res.code == 200) {
if (res.rows.length < 10) {
this.showMorePage = false;
}
this.loading = false;
this.tableData = this.tableData.concat(res.rows);
this.total = res.total;
} else {
this.loading = false;
uni.showToast({
title: res.msg,
icon: "none",
});
},
gettedData(res) {
if (res.code == 200) {
if (res.rows.length < 10) {
this.showMorePage = false;
}
this.loading = false;
this.tableData = this.tableData.concat(res.rows);
this.total = res.total;
} else {
this.loading = false;
uni.showToast({
title: res.msg,
icon: "none",
});
}
},
}
}
}
},
},
};
</script>
<style lang="scss" scoped>
.page {
background-color: #f4f4f4 !important;
height: 100vh;
background-repeat: no-repeat;
background-size: 100% auto;
}
.search-line {
border-radius: 32px;
background: #FFFFFF;
box-sizing: border-box;
border: 1px solid #107AFD;
height: 64rpx;
border-radius: 32rpx;
padding: 0 32rpx;
display: flex;
align-items: center;
position: relative;
z-index: 1;
margin-top: 24rpx;
.search-icon {
width: 40rpx;
height: 40rpx;
}
}
.job-item {
position: relative;
margin-bottom: 24rpx;
background: #fff;
border-radius: 16rpx;
.item_btn{
height: 100rpx;
border-top: 1px solid #e3e8ee;
}
.line{
position: absolute;
right: 50%;
bottom: 20rpx;
width: 1px;
height: 60rpx;
background-color: #e3e8ee;
}
.status-card {
position: absolute;
right: 0;
top: 0;
border-radius: 0 16rpx 0 16rpx;
width: 160rpx;
line-height: 40rpx;
text-align: center;
color: #fff;
background: #B2C0D1;
border: 1px solid #9BA9B9;
font-size: 24rpx;
&.in {
background: #29D297;
border: 1px solid #1BBA83;
}
&.out {
background: #ECB83D;
border: 1px solid #D7892B;
}
&.far {
background: #EC7737;
border: 1px solid #C24F1A;
}
}
.top-container {
padding: 32rpx;
// margin-bottom: 24rpx;
.title-line {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 16rpx;
.type-tag {
line-height: 40rpx;
width: 128rpx;
font-size: 24rpx;
color: #fff;
text-align: center;
&.qz {
background: #28CB5E;
}
&.yz {
background: #DD6728;
}
&.cy {
background: #23B5C5;
}
&.px {
background: #DDA728;
}
&.qt {
background: #2870DD;
}
}
.title {
color: #3D3D3D;
width: calc(100% - 137rpx);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 40rpx;
}
.salary {
width: 33%;
color: #FA6553;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: right
}
}
.info {
color: #3D3D3D;
margin-bottom: 7rpx;
font-size: 28rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text {
color: #8E8E8E;
}
.not {
color: #EC7737;
font-weight: bold;
}
.ing {
color: #ECB83D;
font-weight: bold;
}
.finish {
color: #21C88D;
font-weight: bold;
}
}
}
.function-btn {
color: #BF5818;
border-top: 1px solid #E2E8EF;
padding-bottom: 6rpx;
line-height: 90rpx;
text-align: center;
}
}
.self-form {
padding: 32rpx;
.bordered {
border: 1rpx solid #dadbde;
padding: 9px;
border-radius: 4px;
}
}
.button-area {
padding: 24rpx 32rpx 68rpx;
background: #fff;
display: flex;
box-sizing: border-box;
border-radius: 16px 16px 0px 0px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
.btn {
line-height: 72rpx;
width: 176rpx;
margin-right: 16rpx;
font-size: 28rpx;
border: 1px solid #B8C5D4;
color: #282828;
text-align: center;
border-radius: 8rpx;
}
.reset {
background: #DCE2E9;
}
.save {
background: linear-gradient(103deg, #1D64CF 0%, #1590D4 99%);
color: #fff;
border: 0;
flex-grow: 1;
}
}
.noValue {
color: rgb(192, 196, 204);
}
.addNeeds {
position: fixed;
right: 0;
bottom: 150rpx;
width: 150rpx;
overflow: hidden;
z-index: 10;
border-radius: 44rpx;
border-radius: 75rpx;
img {
display: block;
width: 100%;
}
}
.df_flex{
display: flex;
view{
flex-grow: 1;
text-align: center;
color: #4c6efb;
}
.page {
background-color: #f4f4f4 !important;
height: 100vh;
background-repeat: no-repeat;
background-size: 100% auto;
}
.df_flex_1{
flex: 1;
.search-line {
border-radius: 32px;
background: #ffffff;
box-sizing: border-box;
border: 1px solid #107afd;
height: 64rpx;
border-radius: 32rpx;
padding: 0 32rpx;
display: flex;
align-items: center;
position: relative;
z-index: 1;
margin-top: 24rpx;
.search-icon {
width: 40rpx;
height: 40rpx;
}
}
.job-item {
position: relative;
margin-bottom: 24rpx;
background: #fff;
border-radius: 16rpx;
.item_btn {
height: 100rpx;
border-top: 1px solid #e3e8ee;
}
.line {
position: absolute;
right: 50%;
bottom: 20rpx;
width: 1px;
height: 60rpx;
background-color: #e3e8ee;
}
.status-card {
position: absolute;
right: 0;
top: 0;
border-radius: 0 16rpx 0 16rpx;
width: 160rpx;
line-height: 40rpx;
text-align: center;
color: #fff;
background: #b2c0d1;
border: 1px solid #9ba9b9;
font-size: 24rpx;
&.in {
background: #29d297;
border: 1px solid #1bba83;
}
&.out {
background: #ecb83d;
border: 1px solid #d7892b;
}
&.far {
background: #ec7737;
border: 1px solid #c24f1a;
}
}
.top-container {
padding: 32rpx;
// margin-bottom: 24rpx;
.title-line {
display: flex;
align-items: center;
justify-content: space-between;
font-size: 32rpx;
font-weight: bold;
margin-bottom: 16rpx;
.type-tag {
line-height: 40rpx;
width: 128rpx;
font-size: 24rpx;
color: #fff;
text-align: center;
&.qz {
background: #28cb5e;
}
&.yz {
background: #dd6728;
}
&.cy {
background: #23b5c5;
}
&.px {
background: #dda728;
}
&.qt {
background: #2870dd;
}
}
.title {
color: #3d3d3d;
width: calc(100% - 137rpx);
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 40rpx;
}
.salary {
width: 33%;
color: #fa6553;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
text-align: right;
}
}
.info {
color: #3d3d3d;
margin-bottom: 7rpx;
font-size: 28rpx;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
text {
color: #8e8e8e;
}
.not {
color: #ec7737;
font-weight: bold;
}
.ing {
color: #ecb83d;
font-weight: bold;
}
.finish {
color: #21c88d;
font-weight: bold;
}
}
}
.function-btn {
color: #bf5818;
border-top: 1px solid #e2e8ef;
padding-bottom: 6rpx;
line-height: 90rpx;
text-align: center;
}
}
.self-form {
padding: 32rpx;
.bordered {
border: 1rpx solid #dadbde;
padding: 9px;
border-radius: 4px;
}
}
.button-area {
padding: 24rpx 32rpx 68rpx;
background: #fff;
display: flex;
box-sizing: border-box;
border-radius: 16px 16px 0px 0px;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
.btn {
line-height: 72rpx;
width: 176rpx;
margin-right: 16rpx;
font-size: 28rpx;
border: 1px solid #b8c5d4;
color: #282828;
text-align: center;
border-radius: 8rpx;
}
.reset {
background: #dce2e9;
}
.save {
background: linear-gradient(103deg, #1d64cf 0%, #1590d4 99%);
color: #fff;
border: 0;
flex-grow: 1;
}
}
.noValue {
color: rgb(192, 196, 204);
}
.addNeeds {
position: fixed;
right: 0;
bottom: 150rpx;
width: 150rpx;
overflow: hidden;
z-index: 10;
border-radius: 44rpx;
border-radius: 75rpx;
img {
display: block;
width: 100%;
}
}
.df_flex {
display: flex;
view {
flex-grow: 1;
text-align: center;
color: #4c6efb;
}
}
.df_flex_1 {
flex: 1;
}
.df__direction_column {
flex-direction: column;
flex-direction: column;
}
.df_align_center{
align-items: center;
.df_align_center {
align-items: center;
}
.df_justify_center{
justify-content: center;
.df_justify_center {
justify-content: center;
}
.df_content_between{
justify-content: space-between;
.df_content_between {
justify-content: space-between;
}
.df_shrink_0{
flex-shrink: 0;
.df_shrink_0 {
flex-shrink: 0;
}
/* 日期选择器样式 */
@@ -405,72 +451,72 @@ import { getPolicyList } from "@/packageRc/apiRc/policy";
.date-value {
color: #333;
width: 100%
width: 100%;
}
.policy-list{
.policy-list {
width: 100%;
margin: 0 auto;
color: #333333;
border-radius: 24rpx;
background: #FFFFFF;
background: #ffffff;
padding: 32rpx;
margin-bottom: 24rpx;
box-sizing: border-box;
position: relative;
.sign{
.sign {
position: absolute;
font-size: 24rpx;
right: 0;
top: 0;
padding: 4rpx 14rpx;
border: 1rpx solid #EC4827;
border: 1rpx solid #ec4827;
background: rgba(227, 79, 49, 0.09);
border-top-right-radius: 24rpx;
border-bottom-left-radius: 24rpx;
color: #EC4827;
color: #ec4827;
}
.top-line{
.top-line {
display: flex;
justify-content: space-between;
font-size: 24rpx;
color: #A2A2A2;
color: #a2a2a2;
margin-bottom: 16rpx;
.salary{
.salary {
font-size: 32rpx;
color: #4C6EFB;
color: #4c6efb;
font-weight: bold;
}
}
.title{
.title {
font-size: 32rpx;
font-weight: bold;
color: #282828;
margin-bottom: 16rpx;
display: flex;
image{
image {
width: 46rpx;
height: 46rpx;
margin-right: 11rpx;
}
}
.infos{
.infos {
display: flex;
flex-wrap: wrap;
font-size: 24rpx;
margin-bottom: 16rpx;
line-height: 42rpx;
view{
view {
padding: 0 16rpx;
margin-right: 10rpx;
background: #F2F2F2;
background: #f2f2f2;
}
}
.bottom-line{
.bottom-line {
display: flex;
justify-content: space-between;
font-size: 24rpx;
color: #A2A2A2;
color: #a2a2a2;
margin-top: 12rpx;
}
}