cxc-szcx-uniapp/pages/document/index.vue

322 lines
5.8 KiB
Vue

<template>
<view :class="['content',{'gray':store.isgray==1}]">
<customNav>
<view class="nav_box f-row aic jcb">
<view class="back f-row aic" @click="back">
<uni-icons type="left" size="20" color="#fff"></uni-icons>
</view>
<view class="search f-row aic">
<input type="text" v-model="searchKey" @confirm="search" @blur="showicon=true&&!searchKey"
@focus="showicon=false" />
<view class="f-row aic" v-if="showicon">
<image src="../../static/search.png" mode=""></image>
<text>搜索</text>
</view>
</view>
</view>
</customNav>
<view class="list">
<view class="item" v-for="item,i in list" :key="i"
@click="jump(`/pages/document/detail?data=${JSON.stringify(item)}&id=${id}`,item)">
<view class="title">
{{item._title}}
</view>
<view class="time_box f-row aic">
<view class="time">
{{item._time}}
</view>
<view class="look f-row aic" v-if="item._depart">
{{item._depart}}
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import {
ref,
watch
} from 'vue';
import {
onReachBottom,
onPullDownRefresh,
onLoad
} from '@dcloudio/uni-app';
import {
gongwenlistApi,
faguiApi,
zhiduApi,
gonggaolistApi,
cjzhiduApi
} from '@/api/api.js';
import {
useStore
} from '@/store';
const store = useStore();
import customNav from '@/bpm/customNav.vue';
import {
beforeJump,
opendocument
} from '@/utils/index.js';
const showicon = ref(true)
const searchKey = ref('')
const list = ref([])
let pageNo = 1
let pageSize = 15
let loading = false
/**公文接口*/
const bpmlist = () => {
loading = true
gongwenlistApi({
pageNo,
pageSize,
fwbt: formatSearchkey()
}).then((res) => {
if (res.success) {
list.value = [...list.value, ...formatObj(res.result.records, 'fwbt', 'fwtime', null)]
}
loading = false
}).catch((err) => {
console.log('err', err);
})
}
/**制度接口*/
const zhidu = () => {
loading = true
let getzhidu = zhiduid == 0 ? zhiduApi : cjzhiduApi
getzhidu({
pageNo,
pageSize,
zdmc: formatSearchkey()
}).then((res) => {
if (res.success) {
let str = zhiduid == 0 ? 'zbbm_dictText' : 'sbbm'
list.value = [...list.value, ...formatObj(res.result.records, 'zdmc', str, null)]
}
loading = false
}).catch((err) => {
console.log('err', err);
})
}
/**法规接口*/
const fagui = () => {
loading = true
faguiApi({
pageNo,
pageSize,
flfgmc: formatSearchkey()
}).then((res) => {
if (res.success) {
list.value = [...list.value, ...formatObj(res.result.records, 'flfgmc', 'ssbm', null)]
}
loading = false
}).catch((err) => {
console.log('err', err);
})
}
/**公告接口*/
const gonggaolist = () => {
loading = true
gonggaolistApi({
pageNo,
pageSize,
neirong:formatSearchkey()
}).then((res) => {
if (res.success) {
list.value = [...list.value, ...formatObj(res.result.records, 'neirong', 'fbdw', 'createTime')]
}
loading = false
}).catch((err) => {
console.log('err', err);
})
}
const formatObj = (arr, title, time, depart) => {
arr.map((item) => {
item['_title'] = item[title]
item['_time'] = item[time]
item['_depart'] = item[depart]
})
return arr
}
const formatSearchkey = () => {
if (searchKey.value.trim()) {
return '*' + searchKey.value + '*'
}
}
const search = () => {
pageNo = 1
loading = false
list.value = []
getlist()
}
watch(searchKey, (nval, oval) => {
if (!nval.trim()) {
getlist()
}
})
const back = () => {
uni.navigateBack()
}
const jump = (url, item) => {
if (id.value == 3) {
return opendocument(item.mingcheng)
}
beforeJump(url, () => {
uni.navigateTo({
url
})
})
}
const id = ref(null)
let zhiduid = null
onLoad((options) => {
id.value = options.id
zhiduid = options.zhiduid
getlist()
})
const getlist = () => {
if (id.value == 0) {
bpmlist()
} else if (id.value == 1) {
gonggaolist()
} else if (id.value == 2) {
zhidu()
} else if (id.value == 3) {
fagui()
}
}
onPullDownRefresh(() => {
pageNo = 1
loading = false
list.value = []
getlist()
uni.stopPullDownRefresh()
})
onReachBottom(() => {
if (loading) return
pageNo++
getlist()
})
</script>
<style>
page {
background-color: #f8f8f8;
}
</style>
<style lang="scss" scoped>
.content {
padding-top: v-bind(cusnavbarheight);
padding-bottom: 24rpx;
}
.list {
padding: 0 30rpx;
.item {
background: #FFFFFF;
box-shadow: 0rpx 2rpx 4rpx 0rpx rgba(0, 0, 0, 0.5);
border-radius: 16rpx;
padding: 30rpx;
margin-top: 24rpx;
position: relative;
.dot {
width: 12rpx;
height: 12rpx;
background: #ED361D;
position: absolute;
border-radius: 50%;
left: 9rpx;
top: 44rpx;
}
.title {
margin-bottom: 20rpx;
font-size: 28rpx;
color: #333333;
}
.time_box {
font-size: 24rpx;
color: #888888;
.look {
position: relative;
margin-left: 60rpx;
&::after {
position: absolute;
content: ' ';
width: 2rpx;
height: 20rpx;
background: #999999;
top: 50%;
transform: translateY(-50%);
left: -30rpx;
}
}
}
image {
width: 28rpx;
height: 22rpx;
margin-left: 62rpx;
margin-right: 8rpx;
}
}
}
.nav_box {
position: absolute;
bottom: 14rpx;
width: 100%;
left: 0;
}
.back {
padding: 0 30rpx;
}
.search {
position: relative;
padding-right: 30rpx;
flex: 1;
view {
position: absolute;
left: 28rpx;
top: 50%;
transform: translateY(-50%);
font-size: 28rpx;
color: #999999;
}
input {
flex: 1;
height: 72rpx;
background: #F8F8F8;
border-radius: 44rpx;
padding: 0 28rpx;
color: #333333;
}
image {
width: 34rpx;
height: 34rpx;
margin-right: 16rpx;
}
}
</style>