524 lines
12 KiB
Vue
524 lines
12 KiB
Vue
<template>
|
||
<view class="job-list" style="background-image: url('/packageRc/static/pageBg.png');">
|
||
<!-- <view class="top_box_bg">
|
||
<image src="/packageRc/static/pageBg.png" width="750rpx" height="496rpx" />
|
||
</view> -->
|
||
<view class="job-list__content" style="height: calc(-32rpx + 100vh)">
|
||
<view style="display: flex; justify-content: space-between;">
|
||
<input style="border: 1px solid #e4e4e4;height: 64rpx;padding: 0 16rpx;flex-grow: 1;border-radius: 30rpx;"
|
||
placeholder="输入经办人姓名进行搜索"
|
||
border="surround"
|
||
v-model="queryParams.agentUserName"
|
||
shape="circle"
|
||
:customStyle="customInputStyle"
|
||
/>
|
||
<!-- <view slot="suffix">
|
||
<u-icon
|
||
@tap="handleSearch"
|
||
name="search"
|
||
color="#2979ff"
|
||
size="28"
|
||
></u-icon>
|
||
</view> -->
|
||
<button
|
||
class="custom-style"
|
||
@click="openshow"
|
||
>{{ filterTotal > 0 ? '筛选+' + filterTotal : '筛选' }}</button>
|
||
</view>
|
||
<view
|
||
v-if="total"
|
||
style="position: relative; padding-top: 16px; color: #000"
|
||
>
|
||
<text>共 {{ total }} 条</text>
|
||
</view>
|
||
<scroll-view
|
||
class="job-list__scroll"
|
||
scroll-y="true"
|
||
@scrolltolower="loadMoreJobs"
|
||
>
|
||
<view
|
||
class="jobSearchListview"
|
||
v-for="(item, index) in tableList"
|
||
:key="item.id"
|
||
@click="goNeedsDetail(item)"
|
||
>
|
||
|
||
<view class="custom_timeline_marker">
|
||
<view class="custom_timeline_line" :class="{ last: index === item.length - 1 }"></view>
|
||
<view class="custom_timeline_point active"></view>
|
||
</view>
|
||
<view class="job-list__item inner">
|
||
<view class="job-list__item-detail" style="margin: 0">{{ item.practicalSolutionTime }}</view>
|
||
<div style="display: flex;justify-content: space-between;">
|
||
<view class="job-list__item-detail" style="color: #333">{{ selectDictLabel(serviceTypeList, item.demandType) }}</view>
|
||
<view class="job-list__item-detail">
|
||
<text>经办人:</text>
|
||
<text>{{ item.agentUserName || "-" }}</text>
|
||
</view>
|
||
</div>
|
||
</view>
|
||
</view>
|
||
</scroll-view>
|
||
</view>
|
||
<uni-popup ref="show" @close="close" @open="open" background-color="#fff" type="bottom">
|
||
<view class="dialog_div">
|
||
<view class="dialog_div_top">
|
||
<view @click="close">取消</view>
|
||
<view @click="handleSearch">确定</view>
|
||
</view>
|
||
<view>
|
||
<view class="df_flex">
|
||
<view class="text">服务类别:</view>
|
||
<view class="df_flex_items">
|
||
<view
|
||
class="item"
|
||
@click="handleServiceStatus('demandType', item)"
|
||
:class="
|
||
item.dictValue == queryParams.demandType ? 'item-active' : ''
|
||
"
|
||
v-for="item in serviceTypeList"
|
||
:key="item.dictValue"
|
||
>{{ item.dictLabel }}</view
|
||
>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
<view class="dialog_div_btn">
|
||
<u-button class="reset-style" text="重 置" @click="reset"></u-button>
|
||
<u-button
|
||
class="sure-style"
|
||
text="确 定"
|
||
@click="handleSearch"
|
||
></u-button>
|
||
</view>
|
||
</view>
|
||
</uni-popup>
|
||
</view>
|
||
</template>
|
||
|
||
<script>
|
||
import { timeList } from "@/packageRc/apiRc/timeLine";
|
||
export default {
|
||
name: "serviceRecord",
|
||
data() {
|
||
return {
|
||
total: 0,
|
||
tableList: [],
|
||
serviceTypeList: [
|
||
{
|
||
dictLabel: "全部",
|
||
dictValue: "",
|
||
},
|
||
],
|
||
loading: false,
|
||
status: "more", // 加载更多状态
|
||
customInputStyle: {
|
||
background: "#fff",
|
||
height: "40rpx",
|
||
},
|
||
filterTotal: 0,
|
||
show: false,
|
||
userId:"",
|
||
queryParams: {
|
||
page: 1,
|
||
size: 10,
|
||
demandType: "",
|
||
serviceObjectName: "",
|
||
userId:""
|
||
},
|
||
};
|
||
},
|
||
onLoad(options) {
|
||
this.queryParams.userId = options.userId;
|
||
this.userId = options.userId;
|
||
this.$getDict("qcjy_fwlx").then((res) => {
|
||
this.serviceTypeList = this.serviceTypeList.concat(res.data);
|
||
});
|
||
},
|
||
mounted() {
|
||
this.getList();
|
||
},
|
||
methods: {
|
||
openshow() {
|
||
this.$refs.show.open();
|
||
},
|
||
selectDictLabel(datas, value) {
|
||
if (value === undefined) {
|
||
return ''
|
||
}
|
||
var actions = []
|
||
Object.keys(datas).some((key) => {
|
||
if (datas[key].dictValue == ('' + value)) {
|
||
actions.push(datas[key].dictLabel)
|
||
return true
|
||
}
|
||
})
|
||
if (actions.length === 0) {
|
||
actions.push(value)
|
||
}
|
||
return actions.join('')
|
||
},
|
||
open() {
|
||
// console.log('open');
|
||
},
|
||
reset() {
|
||
this.queryParams = {
|
||
page: 1,
|
||
size: 10,
|
||
demandType: "",
|
||
serviceObjectName: "",
|
||
userId:this.userId
|
||
};
|
||
this.filterTotal = 0;
|
||
},
|
||
close() {
|
||
this.$refs.show.close();
|
||
// console.log('close');
|
||
},
|
||
goNeedsDetail(item) {
|
||
let needsType = "";
|
||
// 走访调查和电话沟通,统一页面,不查需求
|
||
if (item.demandType == 4||item.demandType == 5) {
|
||
uni.navigateTo({
|
||
url: `/pages/community/investigationDetails?id=${item.id}`,
|
||
});
|
||
} else {
|
||
if (item.demandType == 1) {
|
||
needsType = 1;
|
||
}
|
||
if (item.demandType == 2) {
|
||
needsType = 3;
|
||
}
|
||
if (item.demandType == 3) {
|
||
needsType = 4;
|
||
}
|
||
if (item.demandType == 9) {
|
||
needsType = 5;
|
||
}
|
||
|
||
uni.navigateTo({
|
||
url: `/packageRc/pages/needs/needDetail?id=${item.businessId}&type=${needsType}&showTab=1`,
|
||
});
|
||
}
|
||
},
|
||
handleServiceStatus(label, item) {
|
||
this.filterTotal = 0;
|
||
this.queryParams[label] = item.dictValue;
|
||
for (const key in this.queryParams) {
|
||
if (key == "demandType" || key == "personType" || key == "gender") {
|
||
this.filterTotal += this.queryParams[key] ? 1 : 0;
|
||
}
|
||
}
|
||
},
|
||
// 加载更多
|
||
loadMoreJobs() {
|
||
if (this.tableList.length >= this.total || this.status === "noMore")
|
||
return;
|
||
this.queryParams.pageNum += 1;
|
||
this.getList();
|
||
},
|
||
// 获取列表
|
||
async getList(reset = false) {
|
||
if (this.loading) return;
|
||
this.loading = true;
|
||
|
||
// 重置数据
|
||
if (reset) {
|
||
this.tableList = [];
|
||
this.queryParams.pageNum = 1;
|
||
}
|
||
const { code, rows, total } = await timeList(this.queryParams);
|
||
if (code === 200) {
|
||
this.tableList = [...this.tableList, ...rows];
|
||
this.tableList.forEach((element) => {
|
||
this.$set(element, "isEye", false);
|
||
});
|
||
this.total = total;
|
||
this.status = this.tableList.length >= this.total ? "noMore" : "more";
|
||
}
|
||
this.loading = false;
|
||
},
|
||
// 搜索功能处理
|
||
handleSearch() {
|
||
console.log(this.queryParams,"查询参数")
|
||
this.show = false;
|
||
this.$refs.show.close();
|
||
this.getList(true);
|
||
},
|
||
getTimeList() {
|
||
timeList(this.queryParams).then((res) => {
|
||
if (res.code == 200) {
|
||
this.tableList = res.rows;
|
||
this.total = res.total;
|
||
}
|
||
});
|
||
},
|
||
},
|
||
};
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.job-list__content {
|
||
overflow: auto;
|
||
box-sizing: border-box;
|
||
}
|
||
.job-list {
|
||
padding:32rpx;
|
||
background-color: #f4f4f4;
|
||
box-sizing: border-box;
|
||
width: 100%;
|
||
margin: 0 auto;
|
||
background-repeat: no-repeat;
|
||
&__navbar {
|
||
height: 80rpx;
|
||
}
|
||
|
||
&__content {
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
padding: 32rpx;
|
||
z-index: 10;
|
||
width: 100%;
|
||
background-color: #fff;
|
||
border-radius: 32rpx 32rpx 0 0;
|
||
border: 1px solid #fff;
|
||
}
|
||
|
||
&__scroll {
|
||
margin-top: 10rpx;
|
||
height: calc(100vh - 320rpx);
|
||
}
|
||
|
||
&__item {
|
||
position: relative;
|
||
padding: 32rpx;
|
||
background-color: #d0dcee;
|
||
border-radius: 16rpx;
|
||
font-size: 28rpx;
|
||
|
||
.tips {
|
||
position: absolute;
|
||
right: 0;
|
||
top: 0;
|
||
min-width: 40rpx;
|
||
padding: 0 24rpx;
|
||
height: 40rpx;
|
||
line-height: 40rpx;
|
||
color: #1ace62;
|
||
border-radius: 0px 16rpx 0px 16rpx;
|
||
background-color: #d9f9ed;
|
||
border: 1px solid #58e6a2;
|
||
}
|
||
}
|
||
|
||
&__item-detail {
|
||
margin-top: 20rpx;
|
||
color: #8e8e8e;
|
||
|
||
view,
|
||
text:last-child {
|
||
margin-left: 10rpx;
|
||
color: #333;
|
||
}
|
||
}
|
||
|
||
.tab_list {
|
||
margin-top: 30rpx;
|
||
height: 86rpx;
|
||
color: #ce6b1a;
|
||
border-top: 1px solid #eff2f6;
|
||
}
|
||
|
||
.items {
|
||
margin-top: 30rpx;
|
||
border-top: 1px solid #d0dcee;
|
||
}
|
||
|
||
.post_job_btn {
|
||
position: fixed;
|
||
bottom: 120rpx;
|
||
right: 16rpx;
|
||
width: 150rpx;
|
||
height: 150rpx;
|
||
border-radius: 50%;
|
||
z-index: 20;
|
||
background: url("https://rc.jinan.gov.cn/qcwjyH5/static/images/addPersonnel.png") no-repeat;
|
||
background-size: 100% 100%;
|
||
}
|
||
|
||
.dialog_form {
|
||
padding: 30rpx;
|
||
width: 80vw;
|
||
|
||
.tadio {
|
||
height: 100rpx;
|
||
}
|
||
|
||
.btn {
|
||
margin-top: 100rpx;
|
||
}
|
||
}
|
||
}
|
||
.jobSearchListview {
|
||
margin-top: 20rpx;
|
||
width: 100%;
|
||
// padding: 30rpx;
|
||
box-sizing: border-box;
|
||
position: relative;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
.inner{
|
||
flex-grow: 1;flex-shrink: 1;
|
||
border-radius: 8px;
|
||
// background: #ffffff;
|
||
}
|
||
.custom_timeline_marker {
|
||
position: relative;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
margin-right: 40rpx;
|
||
// width: 16rpx;
|
||
|
||
/* 虚线样式 */
|
||
.custom_timeline_line {
|
||
position: absolute;
|
||
width: 4rpx;
|
||
top: 0;
|
||
bottom: 0;
|
||
height: 160rpx;
|
||
background: repeating-linear-gradient(to bottom,
|
||
#76A0DF 0px,
|
||
#76A0DF 8rpx,
|
||
transparent 8rpx,
|
||
transparent 16rpx);
|
||
|
||
&.last {
|
||
display: none;
|
||
}
|
||
}
|
||
|
||
.custom_timeline_point {
|
||
z-index: 1;
|
||
/* 确保点覆盖在线条之上 */
|
||
width: 16rpx;
|
||
height: 16rpx;
|
||
background-color: #fff;
|
||
border-radius: 50%;
|
||
border: 10rpx solid #e0e0e0;
|
||
|
||
&.active {
|
||
border: 10rpx solid #007aff;
|
||
}
|
||
}
|
||
}
|
||
|
||
.jobSearchListview_currentStatus {
|
||
position: absolute;
|
||
right: 40rpx;
|
||
top: 40rpx;
|
||
}
|
||
.jobSearchListview_name {
|
||
font-size: 38rpx;
|
||
font-weight: bold;
|
||
color: #282828;
|
||
}
|
||
.salaryExpectation {
|
||
margin-top: 20rpx;
|
||
display: flex;
|
||
align-items: center;
|
||
.salary {
|
||
font-size: 38rpx;
|
||
font-weight: bold;
|
||
color: #fa6553;
|
||
}
|
||
}
|
||
}
|
||
.job-list__item-btn {
|
||
height: 60rpx;
|
||
margin-top: 40rpx;
|
||
border-top: 1px solid #eee;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
color: #1a62ce;
|
||
font-size: 26rpx;
|
||
.btn {
|
||
width: 50%;
|
||
display: flex;
|
||
justify-content: center;
|
||
align-items: center;
|
||
height: 100%;
|
||
margin-top: 10rpx;
|
||
}
|
||
}
|
||
.custom-style {
|
||
background-color: #4d89e3;
|
||
width: 150rpx;
|
||
color: #fff;
|
||
margin-left: 30rpx;
|
||
line-height: 64rpx;
|
||
font-size: 24rpx;
|
||
border: 1px solid #1a62ce;
|
||
border-radius: 50px;
|
||
}
|
||
.dialog_div {
|
||
.dialog_div_top {
|
||
height: 100rpx;
|
||
border-bottom: 1px solid #e6e6e6;
|
||
padding: 30rpx;
|
||
box-sizing: border-box;
|
||
display: flex;
|
||
justify-content: space-between;
|
||
color: #077dfe;
|
||
}
|
||
.df_flex_items {
|
||
display: flex;
|
||
flex-wrap: wrap;
|
||
flex: 1;
|
||
}
|
||
.df_flex {
|
||
display: flex;
|
||
margin-top: 30rpx;
|
||
margin-left: 30rpx;
|
||
.text {
|
||
width: 140rpx;
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
}
|
||
.item-active {
|
||
background: linear-gradient(90deg, #1a62ce 0%, #1d8ace 100%) !important;
|
||
color: #fff;
|
||
}
|
||
.item {
|
||
background: #f2f4f7;
|
||
margin: 0 20rpx;
|
||
margin-bottom: 10rpx;
|
||
padding: 10rpx 20rpx;
|
||
border-radius: 8px;
|
||
}
|
||
}
|
||
.dialog_div_btn {
|
||
display: flex;
|
||
margin: 40rpx;
|
||
.reset-style {
|
||
width: 200rpx;
|
||
background: #ffffff;
|
||
margin-right: 40rpx;
|
||
color: #3d3d3d;
|
||
}
|
||
.sure-style {
|
||
background: linear-gradient(270deg, #4370e5 0%, #53a0ea 100%);
|
||
color: #ffffff;
|
||
}
|
||
}
|
||
}
|
||
.describe {
|
||
//最多显示两行
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
display: -webkit-box;
|
||
-webkit-line-clamp: 2;
|
||
-webkit-box-orient: vertical;
|
||
}
|
||
</style>
|