Merge remote-tracking branch 'origin/main'
This commit is contained in:
17
apiRc/policy/index.js
Normal file
17
apiRc/policy/index.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import request from "@/utilsRc/request";
|
||||
//政策列表
|
||||
export function getPolicyList(queryParams) {
|
||||
return request({
|
||||
url: "/portal/policyInfo/portalList",
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
//政策详情
|
||||
export function getPolicyDetail(queryParams) {
|
||||
return request({
|
||||
url: "/portal/policyInfo/getInfo",
|
||||
method: "get",
|
||||
params: queryParams,
|
||||
});
|
||||
}
|
||||
@@ -1,497 +1,500 @@
|
||||
<template>
|
||||
<view class="help-filter-page">
|
||||
<view class="header">
|
||||
<view class="back-btn" @click="goBack">
|
||||
<uni-icons type="arrowleft" size="24" color="#fff" />
|
||||
<AppLayout :title="title" :show-bg-image="false" @onScrollBottom="getDataList('add')">
|
||||
<!-- <template #headerleft>
|
||||
<view class="btnback">
|
||||
<image src="@/static/icon/back.png" @click="navBack"></image>
|
||||
</view>
|
||||
</template> -->
|
||||
<view class="main-list" :style="getBackgroundStyle('k.png')">
|
||||
<view class="list-top">
|
||||
<view class="list-title">
|
||||
<text>筛选条件</text>
|
||||
<view class="title-line"></view>
|
||||
</view>
|
||||
<view class="title-right button-sp-area">
|
||||
<button class="mini-btn search-box-btn" type="primary" size="mini" @click="handleSearch">查询</button>
|
||||
<button class="mini-btn reset-box-btn" type="default" size="mini">重置</button>
|
||||
</view>
|
||||
<view class="title">筛选和帮扶</view>
|
||||
</view>
|
||||
|
||||
<!-- 筛选条件区域 -->
|
||||
<view class="filter-section">
|
||||
<view class="filter-item">
|
||||
<view class="filter-label">人员姓名:</view>
|
||||
<input class="filter-input" v-model="filters.personName" placeholder="请输入人员姓名" />
|
||||
<view class="search-container">
|
||||
<!-- 人员姓名 -->
|
||||
<view class="search-item">
|
||||
<text class="label">人员姓名:</text>
|
||||
<input
|
||||
v-model="formData.name"
|
||||
class="input"
|
||||
type="text"
|
||||
placeholder="请输入人员姓名"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<view class="filter-item">
|
||||
<view class="filter-label">身份证号:</view>
|
||||
<input class="filter-input" v-model="filters.idCard" placeholder="请输入身份证号" />
|
||||
<!-- 身份证号 -->
|
||||
<view class="search-item">
|
||||
<text class="label">身份证号:</text>
|
||||
<input
|
||||
v-model="formData.idCard"
|
||||
class="input"
|
||||
type="text"
|
||||
placeholder="请输入身份证号"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<view class="filter-item">
|
||||
<view class="filter-label">帮扶类型:</view>
|
||||
<picker class="filter-picker" mode="selector" range="{{helpTypes}}" bindchange="onHelpTypeChange">
|
||||
<view class="picker-text">{{filters.helpType || '请选择帮扶类型'}}</view>
|
||||
<!-- 帮扶类型(下拉选择) -->
|
||||
<view class="search-item">
|
||||
<text class="label">帮扶类型:</text>
|
||||
<picker
|
||||
mode="selector"
|
||||
:range="helpTypes"
|
||||
:value="helpTypeIndex"
|
||||
@change="onHelpTypeChange"
|
||||
class="picker"
|
||||
>
|
||||
<view class="picker-value">{{ helpTypes[helpTypeIndex] || '请选择帮扶类型' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="filter-item">
|
||||
<view class="filter-label">帮扶人员:</view>
|
||||
<input class="filter-input" v-model="filters.helperName" placeholder="请输入帮扶人员姓名" />
|
||||
<!-- 帮扶人员 -->
|
||||
<view class="search-item">
|
||||
<text class="label">帮扶人员:</text>
|
||||
<input
|
||||
v-model="formData.helperName"
|
||||
class="input"
|
||||
type="text"
|
||||
placeholder="请输入帮扶人员姓名"
|
||||
/>
|
||||
</view>
|
||||
|
||||
<view class="filter-item">
|
||||
<view class="filter-label">所属区域:</view>
|
||||
<picker class="filter-picker" mode="selector" range="{{regions}}" bindchange="onRegionChange">
|
||||
<view class="picker-text">{{filters.region || '请选择所属区域'}}</view>
|
||||
<!-- 所属区域(下拉选择) -->
|
||||
<view class="search-item">
|
||||
<text class="label">所属区域:</text>
|
||||
<picker
|
||||
mode="selector"
|
||||
:range="regions"
|
||||
:value="regionIndex"
|
||||
@change="onRegionChange"
|
||||
class="picker"
|
||||
>
|
||||
<view class="picker-value">{{ regions[regionIndex] || '请选择所属区域' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="date-range">
|
||||
<view class="filter-label">帮扶时间:</view>
|
||||
<view class="date-inputs">
|
||||
<input class="date-input" v-model="filters.startDate" type="date" placeholder="开始日期" />
|
||||
<view class="date-separator">至</view>
|
||||
<input class="date-input" v-model="filters.endDate" type="date" placeholder="结束日期" />
|
||||
</view>
|
||||
<!-- 开始时间 -->
|
||||
<view class="search-item">
|
||||
<text class="label">开始时间:</text>
|
||||
<picker
|
||||
mode="date"
|
||||
:value="formData.startTime"
|
||||
@change="onStartTimeChange"
|
||||
class="picker"
|
||||
>
|
||||
<view class="picker-value">{{ formData.startTime || '请选择开始时间' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="filter-buttons">
|
||||
<button class="query-btn" type="primary" @click="queryData">查询</button>
|
||||
<button class="reset-btn" @click="resetFilters">重置</button>
|
||||
<!-- 结束时间 -->
|
||||
<view class="search-item">
|
||||
<text class="label">结束时间:</text>
|
||||
<picker
|
||||
mode="date"
|
||||
:value="formData.endTime"
|
||||
@change="onEndTimeChange"
|
||||
class="picker"
|
||||
>
|
||||
<view class="picker-value">{{ formData.endTime || '请选择结束时间' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 帮扶记录列表 -->
|
||||
<view class="list-section">
|
||||
<view class="list-header">
|
||||
<view class="list-title">帮扶记录列表</view>
|
||||
<view class="list-count">共{{helpRecords.length}}条记录</view>
|
||||
<!-- <empty v-else pdTop="200"></empty> -->
|
||||
</view>
|
||||
|
||||
<view class="records-list">
|
||||
<view class="record-item" v-for="record in helpRecords" :key="record.id">
|
||||
<view class="record-header">
|
||||
<view class="person-name">{{record.personName}}</view>
|
||||
<view class="job-tag" @click="showJobRecommend(record)">{{record.jobTag}}</view>
|
||||
<view class="main-list" :style="getBackgroundStyle('k.png')">
|
||||
<view class="list-top">
|
||||
<view class="list-title">
|
||||
<text>帮扶记录列表</text>
|
||||
<view class="title-line"></view>
|
||||
</view>
|
||||
|
||||
<view class="record-info">
|
||||
<view class="info-row">
|
||||
<uni-icons type="call" size="14" color="#999" />
|
||||
<span class="info-label">联系电话:</span>
|
||||
<span class="info-value">{{record.phone}}</span>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<uni-icons type="card" size="14" color="#999" />
|
||||
<span class="info-label">身份证号:</span>
|
||||
<span class="info-value">{{record.idCard}}</span>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<uni-icons type="location" size="14" color="#999" />
|
||||
<span class="info-label">所属区域:</span>
|
||||
<span class="info-value">{{record.region}}</span>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<uni-icons type="person" size="14" color="#999" />
|
||||
<span class="info-label">帮扶人员:</span>
|
||||
<span class="info-value">{{record.helperName}}</span>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<uni-icons type="briefcase" size="14" color="#999" />
|
||||
<span class="info-label">帮扶单位:</span>
|
||||
<span class="info-value">{{record.helperUnit}}</span>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<uni-icons type="calendar" size="14" color="#999" />
|
||||
<span class="info-label">帮扶日期:</span>
|
||||
<span class="info-value">{{record.helpDate}}</span>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<uni-icons type="time" size="14" color="#999" />
|
||||
<span class="info-label">下次联系:</span>
|
||||
<span class="info-value">{{record.nextContactDate}}</span>
|
||||
<view class="title-total">
|
||||
共<text class="total-num">7</text>条记录
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="record-actions">
|
||||
<button class="detail-btn" @click="showDetail(record)">详情</button>
|
||||
<button class="follow-btn" @click="followUp(record)">跟进</button>
|
||||
<button class="recommend-btn" @click="showJobRecommend(record)">智能推荐</button>
|
||||
</view>
|
||||
<!-- v-if="dataList.length>0" -->
|
||||
<view class="list-box" >
|
||||
<view class="con-box" v-for="(item,index) in dataList" :key="index">
|
||||
<view class="form-title">
|
||||
<view class="form-name">
|
||||
{{item.name}}
|
||||
</view>
|
||||
<view class="form-type">
|
||||
{{item.type}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/tele.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
联系电话:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.phone}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/num.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
身份证号:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.idCard}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/base.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
所属区域:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.region}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/person.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
帮扶人员:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.helperName}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/help.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
帮扶单位:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.unit}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/date.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
帮扶日期:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.assistanceDate}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-item">
|
||||
<view class="item-left">
|
||||
<image class="item-img" :src="baseUrl+'/dispatch/next.png'" mode=""></image>
|
||||
<view class="item-label">
|
||||
下次联系:
|
||||
</view>
|
||||
</view>
|
||||
<view class="item-right">
|
||||
{{item.nextContact}}
|
||||
</view>
|
||||
</view>
|
||||
<view class="form-btns">
|
||||
<button class="mini-btn form-box-btn detail-btn" size="mini" >详情</button>
|
||||
<button class="mini-btn form-box-btn follow-btn" size="mini" @click="goFollow(item)">跟进</button>
|
||||
<button class="mini-btn form-box-btn recommend-btn" size="mini" >智能推荐</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <empty v-else pdTop="200"></empty> -->
|
||||
</view>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { useRouter } from 'uni-app'
|
||||
<script setup>
|
||||
import { inject, ref, reactive } from 'vue';
|
||||
import { onLoad } from '@dcloudio/uni-app';
|
||||
const { $api, navTo, navBack } = inject('globalFunction');
|
||||
import config from "@/config.js"
|
||||
|
||||
export default {
|
||||
name: 'HelpFilter',
|
||||
setup() {
|
||||
const router = useRouter()
|
||||
|
||||
// 筛选条件
|
||||
const filters = reactive({
|
||||
personName: '',
|
||||
// state
|
||||
const title = ref('');
|
||||
const formData = reactive({
|
||||
name: '',
|
||||
idCard: '',
|
||||
helpType: '',
|
||||
helperName: '',
|
||||
region: '',
|
||||
startDate: '',
|
||||
endDate: ''
|
||||
startTime: '',
|
||||
endTime: ''
|
||||
})
|
||||
|
||||
const searchKeyword = ref('');
|
||||
const dataList=ref([])
|
||||
const pageSize=ref(10)
|
||||
const pageNum=ref(1)
|
||||
const totalNum=ref(0)
|
||||
const baseUrl = config.imgBaseUrl
|
||||
const getBackgroundStyle = (imageName) => ({
|
||||
backgroundImage: `url(${baseUrl}/dispatch/${imageName})`,
|
||||
backgroundSize: 'cover', // 覆盖整个容器
|
||||
backgroundPosition: 'center', // 居中
|
||||
backgroundRepeat: 'no-repeat'
|
||||
});
|
||||
const trainVideoImgUrl=config.trainVideoImgUrl
|
||||
// 帮扶类型选项
|
||||
const helpTypes = ref(['就业帮扶', '技能培训', '创业支持', '政策咨询'])
|
||||
const helpTypes = ['经济帮扶', '教育帮扶', '医疗帮扶', '就业帮扶']
|
||||
const helpTypeIndex = ref(0)
|
||||
|
||||
// 区域选项
|
||||
const regions = ref(['喀什地区/疏勒县', '喀什地区/疏附县', '喀什地区/伽师县', '喀什地区/岳普湖县'])
|
||||
// 所属区域选项(可根据实际替换为动态数据)
|
||||
const regions = ['北京市', '上海市', '广州市', '深圳市', '杭州市']
|
||||
const regionIndex = ref(0)
|
||||
|
||||
// 帮扶记录数据
|
||||
const helpRecords = ref([
|
||||
{
|
||||
id: 1,
|
||||
personName: '王小明',
|
||||
jobTag: '招聘岗位推荐',
|
||||
phone: '13912345678',
|
||||
idCard: '371302198801112024',
|
||||
region: '喀什地区/疏勒县',
|
||||
helperName: '新兴社区管理员',
|
||||
helperUnit: '新兴社区',
|
||||
helpDate: '2023-11-05',
|
||||
nextContactDate: '2023-11-06'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
personName: '赵小美',
|
||||
jobTag: '招聘岗位推荐',
|
||||
phone: '15912345678',
|
||||
idCard: '371302198801112024',
|
||||
region: '喀什地区/疏勒县',
|
||||
helperName: '新兴社区管理员',
|
||||
helperUnit: '新兴社区',
|
||||
helpDate: '2023-11-05',
|
||||
nextContactDate: '2023-11-06'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
personName: '赵小美',
|
||||
jobTag: '招聘岗位推荐',
|
||||
phone: '15912345678',
|
||||
idCard: '371302198801112024',
|
||||
region: '喀什地区/疏勒县',
|
||||
helperName: '新兴社区管理员',
|
||||
helperUnit: '新兴社区',
|
||||
helpDate: '2023-11-05',
|
||||
nextContactDate: '2023-11-06'
|
||||
}
|
||||
])
|
||||
|
||||
// 返回上一页
|
||||
const goBack = () => {
|
||||
router.back()
|
||||
}
|
||||
|
||||
// 重置筛选条件
|
||||
const resetFilters = () => {
|
||||
Object.keys(filters).forEach(key => {
|
||||
filters[key] = ''
|
||||
})
|
||||
}
|
||||
|
||||
// 查询数据
|
||||
const queryData = () => {
|
||||
// 这里是模拟查询,实际项目中应该调用API
|
||||
console.log('查询条件:', filters)
|
||||
// 实际开发中这里应该调用接口获取数据
|
||||
// fetchHelpRecords(filters)
|
||||
}
|
||||
|
||||
// 显示详情
|
||||
const showDetail = (record) => {
|
||||
console.log('查看详情:', record)
|
||||
// 跳转到详情页面
|
||||
// router.push({ path: '/detail', query: { id: record.id } })
|
||||
}
|
||||
|
||||
// 跟进
|
||||
const followUp = (record) => {
|
||||
console.log('跟进记录:', record)
|
||||
// 跳转到跟进页面
|
||||
router.push({ path: '/packageB/priority/helpFollow', query: { personId: record.id, personName: record.personName } })
|
||||
}
|
||||
|
||||
// 智能推荐
|
||||
const showJobRecommend = (record) => {
|
||||
console.log('智能推荐:', record)
|
||||
// 跳转到推荐页面
|
||||
// router.push({ path: '/recommend', query: { id: record.id } })
|
||||
}
|
||||
|
||||
// 帮扶类型选择变化
|
||||
// 事件处理
|
||||
const onHelpTypeChange = (e) => {
|
||||
filters.helpType = helpTypes.value[e.detail.value]
|
||||
helpTypeIndex.value = e.detail.value
|
||||
}
|
||||
|
||||
// 区域选择变化
|
||||
const onRegionChange = (e) => {
|
||||
filters.region = regions.value[e.detail.value]
|
||||
regionIndex.value = e.detail.value
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 组件挂载时的初始化逻辑
|
||||
const onStartTimeChange = (e) => {
|
||||
formData.startTime = e.detail.value
|
||||
}
|
||||
|
||||
const onEndTimeChange = (e) => {
|
||||
formData.endTime = e.detail.value
|
||||
}
|
||||
|
||||
const handleSearch = () => {
|
||||
console.log('当前搜索条件:', {
|
||||
...formData,
|
||||
helpType: helpTypes[helpTypeIndex.value],
|
||||
region: regions[regionIndex.value]
|
||||
})
|
||||
// 在这里调用接口进行搜索
|
||||
}
|
||||
onLoad(() => {
|
||||
getDataList('refresh');
|
||||
});
|
||||
|
||||
return {
|
||||
filters,
|
||||
helpTypes,
|
||||
regions,
|
||||
helpRecords,
|
||||
goBack,
|
||||
resetFilters,
|
||||
queryData,
|
||||
showDetail,
|
||||
followUp,
|
||||
showJobRecommend,
|
||||
onHelpTypeChange,
|
||||
onRegionChange
|
||||
}
|
||||
|
||||
|
||||
// 获取视频列表
|
||||
function getDataList(type = 'add') {
|
||||
// let maxPage=Math.ceil(totalNum.value/pageSize.value)
|
||||
// let params={}
|
||||
// if (type === 'refresh') {
|
||||
// pageNum.value = 1;
|
||||
// params={
|
||||
// category:'',
|
||||
// hour:'',
|
||||
// level:'',
|
||||
// searchValue:searchKeyword.value,
|
||||
// orderStr:'',
|
||||
// pageSize:pageSize.value,
|
||||
// pageNum:pageNum.value
|
||||
// }
|
||||
// $api.myRequest('/train/public/trainVideo/trainVideoList', params).then((resData) => {
|
||||
// dataList.value=resData.rows
|
||||
// totalNum.value=resData.total
|
||||
// });
|
||||
// }
|
||||
// if (type === 'add' && pageNum.value < maxPage) {
|
||||
// pageNum.value += 1;
|
||||
// params={
|
||||
// category:'',
|
||||
// hour:'',
|
||||
// level:'',
|
||||
// searchValue:searchKeyword.value,
|
||||
// orderStr:'',
|
||||
// pageSize:pageSize.value,
|
||||
// pageNum:pageNum.value
|
||||
// }
|
||||
// $api.myRequest('/train/public/trainVideo/trainVideoList', params).then((resData) => {
|
||||
// dataList.value=dataList.value.concat(resData.rows)
|
||||
// totalNum.value=resData.total
|
||||
// });
|
||||
|
||||
// }
|
||||
dataList.value=[
|
||||
{
|
||||
name: '王小明',
|
||||
idCard: '370781199107166029',
|
||||
helperName: '喀什',
|
||||
startTime: '2025/11/24',
|
||||
endTime: '2025/11/25',
|
||||
phone:'18340050862',
|
||||
region:'喀什地区',
|
||||
unit:'新生社区',
|
||||
type:'招聘单位推荐',
|
||||
assistanceDate:'2025/11/25',
|
||||
nextContact:'2025/11/30',
|
||||
id:'1'
|
||||
},
|
||||
{
|
||||
name: '王大明',
|
||||
idCard: '370781199107166029',
|
||||
helperName: '喀什',
|
||||
startTime: '2025/11/24',
|
||||
endTime: '2025/11/25',
|
||||
phone:'18340050862',
|
||||
region:'喀什地区',
|
||||
unit:'新生社区',
|
||||
type:'招聘单位推荐',
|
||||
assistanceDate:'2025/11/25',
|
||||
nextContact:'2025/11/30',
|
||||
id:'2'
|
||||
},
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
// 播放视频
|
||||
function goFollow(item) {
|
||||
navTo(`/packageB/priority/helpFollow?id=${item.id}`);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.help-filter-page {
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
}
|
||||
<style lang="stylus" scoped>
|
||||
.btnback
|
||||
width: 64rpx
|
||||
height: 64rpx
|
||||
|
||||
.header {
|
||||
background-color: #1989fa;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20rpx 30rpx;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
image
|
||||
height: 100%
|
||||
width: 100%
|
||||
|
||||
.back-btn {
|
||||
padding: 10rpx;
|
||||
}
|
||||
.main-list
|
||||
background-color: #ffffff
|
||||
padding: 20rpx 20rpx 28rpx 20rpx
|
||||
margin: 30rpx 30rpx
|
||||
box-shadow: 0px 3px 20px 0px rgba(0,105,234,0.1)
|
||||
border-radius: 12px
|
||||
.list-top
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
.list-title
|
||||
font-weight: bold
|
||||
font-size: 36rpx
|
||||
color: #404040
|
||||
position: relative
|
||||
|
||||
.title {
|
||||
color: #fff;
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
margin-right: 60rpx;
|
||||
}
|
||||
.title-line
|
||||
position: absolute
|
||||
bottom: -10rpx
|
||||
left: 36rpx
|
||||
width: 70rpx
|
||||
height: 8rpx
|
||||
background: linear-gradient(90deg, #FFAD58 0%, #FF7A5B 100%)
|
||||
border-radius: 4rpx
|
||||
.search-box-btn
|
||||
border-radius: 32rpx !important
|
||||
background: #3088FF !important
|
||||
margin-right: 16rpx
|
||||
.reset-box-btn
|
||||
border-radius: 32rpx !important
|
||||
background: #02B44D
|
||||
color: #fff
|
||||
.search-container
|
||||
padding: 20rpx 0rpx 0rpx 0rpx
|
||||
.title-total
|
||||
font-size: 24rpx
|
||||
color: #999999
|
||||
.total-num
|
||||
color: #3088FF
|
||||
margin-left: 4rpx
|
||||
margin-right: 4rpx
|
||||
font-weight: bold
|
||||
font-size: 26rpx
|
||||
.search-item
|
||||
display: flex
|
||||
align-items: center
|
||||
margin-bottom: 30rpx
|
||||
|
||||
.filter-section {
|
||||
background-color: #fff;
|
||||
margin-top: 100rpx;
|
||||
padding: 30rpx;
|
||||
border-radius: 10rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.label
|
||||
width: 160rpx
|
||||
font-size: 28rpx
|
||||
color: #404040
|
||||
|
||||
.filter-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
.input,
|
||||
.picker
|
||||
background: #FFFFFF
|
||||
flex: 1
|
||||
height: 72rpx
|
||||
padding: 0 20rpx
|
||||
border: 1px solid #A0A0A0
|
||||
border-radius: 8rpx
|
||||
font-size: 28rpx
|
||||
line-height: 72rpx
|
||||
|
||||
.filter-label {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
width: 200rpx;
|
||||
}
|
||||
.picker-value
|
||||
color: #666
|
||||
.list-box
|
||||
margin-top: 40rpx
|
||||
.con-box
|
||||
background: #fff
|
||||
padding: 20rpx
|
||||
box-shadow: 0px 0px 6rpx 0px rgba(0,71,200,0.16)
|
||||
border-radius: 24rpx
|
||||
border: 1rpx solid #EDF5FF
|
||||
margin-top: 30rpx
|
||||
.form-title
|
||||
display: flex
|
||||
align-items: center
|
||||
|
||||
.filter-input {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
.form-name
|
||||
font-weight: bold
|
||||
font-size: 32rpx
|
||||
color: #595959
|
||||
margin-right:16rpx
|
||||
.form-type
|
||||
border-radius: 8rpx;
|
||||
padding: 0 20rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.filter-picker {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 20rpx;
|
||||
}
|
||||
|
||||
.picker-text {
|
||||
font-size: 28rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.date-range {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.date-inputs {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.date-input {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
border-radius: 8rpx;
|
||||
padding: 0 20rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.date-separator {
|
||||
margin: 0 20rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.filter-buttons {
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.query-btn {
|
||||
flex: 1;
|
||||
background-color: #1989fa;
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
border: none;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
}
|
||||
|
||||
.reset-btn {
|
||||
flex: 1;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
font-size: 32rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
}
|
||||
|
||||
.list-section {
|
||||
background-color: #fff;
|
||||
padding: 30rpx;
|
||||
border-radius: 10rpx;
|
||||
}
|
||||
|
||||
.list-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.list-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.list-count {
|
||||
font-size: 28rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.record-item {
|
||||
border: 1rpx solid #e0e0e0;
|
||||
border-radius: 10rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.record-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.person-name {
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.job-tag {
|
||||
font-size: 24rpx;
|
||||
color: #ff6600;
|
||||
padding: 5rpx 15rpx;
|
||||
border: 1rpx solid #ff6600;
|
||||
border-radius: 15rpx;
|
||||
}
|
||||
|
||||
.record-info {
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 15rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
color: #666;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
color: #333;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
|
||||
.record-actions {
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.detail-btn {
|
||||
flex: 1;
|
||||
background-color: #e8f3ff;
|
||||
color: #1989fa;
|
||||
font-size: 28rpx;
|
||||
border: none;
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
}
|
||||
|
||||
.follow-btn {
|
||||
flex: 1;
|
||||
background-color: #e6f7ff;
|
||||
color: #1890ff;
|
||||
font-size: 28rpx;
|
||||
border: none;
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
}
|
||||
|
||||
.recommend-btn {
|
||||
flex: 1;
|
||||
background-color: #f6ffed;
|
||||
color: #52c41a;
|
||||
font-size: 28rpx;
|
||||
border: none;
|
||||
height: 70rpx;
|
||||
line-height: 70rpx;
|
||||
}
|
||||
border: 2rpx solid #FF7D26;
|
||||
font-size: 24rpx
|
||||
color: #F1690E
|
||||
padding: 4rpx 10rpx
|
||||
.form-item
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
margin-top: 30rpx
|
||||
.item-left
|
||||
display: flex
|
||||
align-items: center
|
||||
.item-img
|
||||
width: 26rpx
|
||||
height: 26rpx
|
||||
margin-right: 10rpx
|
||||
.item-label
|
||||
font-size: 26rpx
|
||||
color: #B3B3B3
|
||||
.item-right
|
||||
font-size: 26rpx
|
||||
color: #737373
|
||||
.form-btns
|
||||
margin-top:30rpx
|
||||
.form-box-btn
|
||||
border-radius: 50rpx !important
|
||||
margin-right: 24rpx
|
||||
padding: 0rpx 40rpx
|
||||
.detail-btn
|
||||
background: #EDF5FF
|
||||
border: 1px solid #3088FF
|
||||
font-size: 28rpx
|
||||
color: #3088FF
|
||||
.follow-btn
|
||||
background: #EEF9F3
|
||||
border: 1px solid #00933E
|
||||
font-size: 28rpx
|
||||
color: #00933E
|
||||
.recommend-btn
|
||||
background: linear-gradient(92deg, #0DCCFF 0%, #4760FF 100%)
|
||||
font-size: 28rpx
|
||||
color: #FFFFFF
|
||||
</style>
|
||||
@@ -1,442 +1,503 @@
|
||||
<template>
|
||||
<view class="help-follow-page">
|
||||
<view class="header">
|
||||
<view class="back-btn" @click="goBack">
|
||||
<uni-icons type="arrowleft" size="24" color="#fff" />
|
||||
<AppLayout :title="title" :show-bg-image="false" @onScrollBottom="getDataList('add')">
|
||||
<!-- <template #headerleft>
|
||||
<view class="btnback">
|
||||
<image src="@/static/icon/back.png" @click="navBack"></image>
|
||||
</view>
|
||||
<view class="title">跟进</view>
|
||||
</template> -->
|
||||
<view class="info-box">
|
||||
<view class="info-item info-line">
|
||||
<image class="info-img" :src="baseUrl+'/dispatch/person-icon.png'" mode=""></image>
|
||||
<view class="info-label">
|
||||
人员姓名
|
||||
</view>
|
||||
<view class="info-value">
|
||||
王小美
|
||||
</view>
|
||||
|
||||
<!-- 人员信息卡片 -->
|
||||
<view class="person-info-card">
|
||||
<view class="info-item">
|
||||
<uni-icons type="person" size="20" color="#1989fa" />
|
||||
<span class="info-label">人员姓名</span>
|
||||
<span class="info-value">{{personInfo.personName}}</span>
|
||||
</view>
|
||||
<view class="info-item">
|
||||
<uni-icons type="briefcase" size="20" color="#1989fa" />
|
||||
<span class="info-label">帮扶类型</span>
|
||||
<span class="info-value">{{personInfo.helpType}}</span>
|
||||
<image class="info-img" :src="baseUrl+'/dispatch/help-icon.png'" mode=""></image>
|
||||
<view class="info-label">
|
||||
帮扶类型
|
||||
</view>
|
||||
<view class="info-value">
|
||||
招聘岗位推荐
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-list" :style="getBackgroundStyle('k.png')">
|
||||
<view class="list-top">
|
||||
<view class="list-title">
|
||||
<text>新增跟进记录</text>
|
||||
<view class="title-line"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 新增跟进记录 -->
|
||||
<view class="follow-form-section">
|
||||
<view class="section-title">新增跟进记录</view>
|
||||
|
||||
<view class="form-item">
|
||||
<view class="form-label required">跟进日期:</view>
|
||||
<input class="form-input date-input" v-model="followData.followDate" type="date" placeholder="请选择跟进日期" />
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<view class="form-label required">跟进方式:</view>
|
||||
<picker class="form-picker" mode="selector" range="{{followMethods}}" @change="onFollowMethodChange">
|
||||
<view class="picker-text">{{followData.followMethod || '请选择跟进方式'}}</view>
|
||||
<view class="form-container">
|
||||
<uni-forms ref="formRef" v-model="formData" :rules="rules" validate-trigger="submit">
|
||||
<!-- 跟进日期 -->
|
||||
<uni-forms-item label="跟进日期:" name="followDate" required>
|
||||
<picker mode="date" :value="formData.followDate" @change="onDateChange('followDate', $event)">
|
||||
<view class="picker-value">{{ formData.followDate || '请选择跟进日期' }}</view>
|
||||
</picker>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
|
||||
<view class="form-item">
|
||||
<view class="form-label required">跟进内容:</view>
|
||||
<textarea class="form-textarea" v-model="followData.followContent" placeholder="请输入跟进内容" rows="4"></textarea>
|
||||
</view>
|
||||
<!-- 跟进方式 -->
|
||||
<uni-forms-item label="跟进方式:" name="followMethod" required>
|
||||
<picker mode="selector" :range="followMethods" :value="methodIndex" @change="onMethodChange">
|
||||
<view class="picker-value">{{ followMethods[methodIndex] || '请选择跟进方式' }}</view>
|
||||
</picker>
|
||||
</uni-forms-item>
|
||||
|
||||
<view class="form-item">
|
||||
<view class="form-label required">跟进结果:</view>
|
||||
<textarea class="form-textarea" v-model="followData.followResult" placeholder="请输入跟进结果" rows="3"></textarea>
|
||||
</view>
|
||||
<!-- 跟进内容 -->
|
||||
<uni-forms-item label="跟进内容:" name="followContent" required>
|
||||
<textarea
|
||||
v-model="formData.followContent"
|
||||
class="textarea"
|
||||
placeholder="请输入跟进内容"
|
||||
:maxlength="500"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
|
||||
<view class="form-item">
|
||||
<view class="form-label">下一步计划:</view>
|
||||
<textarea class="form-textarea" v-model="followData.nextPlan" placeholder="请输入下一步计划" rows="3"></textarea>
|
||||
</view>
|
||||
<!-- 跟进结果 -->
|
||||
<uni-forms-item label="跟进结果:" name="followResult" required>
|
||||
<textarea
|
||||
v-model="formData.followResult"
|
||||
class="textarea"
|
||||
placeholder="请输入跟进结果"
|
||||
:maxlength="500"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
|
||||
<view class="form-item">
|
||||
<view class="form-label">下次联系:</view>
|
||||
<input class="form-input date-input" v-model="followData.nextContactDate" type="date" placeholder="请选择下次联系日期" />
|
||||
</view>
|
||||
<!-- 下一步计划 -->
|
||||
<uni-forms-item label="下一步计划:" name="nextPlan">
|
||||
<textarea
|
||||
v-model="formData.nextPlan"
|
||||
class="textarea"
|
||||
placeholder="请输入下一步计划(可选)"
|
||||
:maxlength="500"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
|
||||
<view class="form-buttons">
|
||||
<button class="save-btn" type="primary" @click="saveFollowRecord">保存跟进</button>
|
||||
<button class="reset-btn" @click="resetForm">重置</button>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 下次联系时间 -->
|
||||
<uni-forms-item label="下次联系:" name="nextContactDate">
|
||||
<picker mode="date" :value="formData.nextContactDate" @change="onDateChange('nextContactDate', $event)">
|
||||
<view class="picker-value">{{ formData.nextContactDate || '请选择下次联系时间' }}</view>
|
||||
</picker>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
|
||||
<!-- 跟进历史记录 -->
|
||||
<view class="history-section">
|
||||
<view class="section-header">
|
||||
<view class="section-title">跟进历史记录</view>
|
||||
<view class="record-count">共{{historyRecords.length}}条记录</view>
|
||||
</view>
|
||||
|
||||
<view class="history-list">
|
||||
<view class="history-item" v-for="record in historyRecords" :key="record.id">
|
||||
<view class="history-header">
|
||||
<uni-icons type="time" size="16" color="#1989fa" />
|
||||
<span class="history-date">{{record.date}}</span>
|
||||
</view>
|
||||
<view class="history-content">
|
||||
<view class="history-row">
|
||||
<span class="history-label">跟进方式:</span>
|
||||
<span class="history-value">{{record.method}}</span>
|
||||
</view>
|
||||
<view class="history-row">
|
||||
<span class="history-label">跟进人:</span>
|
||||
<span class="history-value">{{record.follower}}</span>
|
||||
</view>
|
||||
<view class="history-row">
|
||||
<span class="history-label">跟进内容:</span>
|
||||
<span class="history-value">{{record.content}}</span>
|
||||
<!-- 按钮组 -->
|
||||
<view class="button-group">
|
||||
<button class="btn submit-btn" @click="handleSubmit">保存跟进</button>
|
||||
<button class="btn reset-btn" @click="handleReset">重置</button>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-list" :style="getBackgroundStyle('k.png')">
|
||||
<view class="list-top">
|
||||
<view class="list-title">
|
||||
<text>跟进历史记录</text>
|
||||
<view class="title-line"></view>
|
||||
</view>
|
||||
<view class="title-total">
|
||||
共<text class="total-num">7</text>条记录
|
||||
</view>
|
||||
</view>
|
||||
<!-- v-if="dataList.length>0" -->
|
||||
<view class="list-box" >
|
||||
<uni-steps :options="list2" active-color="#007AFF" :active="active" direction="column" />
|
||||
</view>
|
||||
<!-- <empty v-else pdTop="200"></empty> -->
|
||||
</view>
|
||||
</AppLayout>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { ref, reactive, onMounted } from 'vue'
|
||||
import { useRouter, useRoute } from 'uni-app'
|
||||
<script setup>
|
||||
import { inject, ref, reactive } from 'vue';
|
||||
import { onLoad } from '@dcloudio/uni-app';
|
||||
const { $api, navTo, navBack } = inject('globalFunction');
|
||||
import config from "@/config.js"
|
||||
|
||||
export default {
|
||||
name: 'HelpFollow',
|
||||
setup() {
|
||||
const router = useRouter()
|
||||
const route = useRoute()
|
||||
|
||||
// 人员信息
|
||||
const personInfo = reactive({
|
||||
personName: '王小美',
|
||||
helpType: '招聘岗位推荐'
|
||||
// state
|
||||
const title = ref('');
|
||||
const formData = reactive({
|
||||
followDate: null,
|
||||
followMethod: null,
|
||||
followContent: null,
|
||||
followResult: null,
|
||||
nextPlan: null,
|
||||
nextContactDate: null
|
||||
})
|
||||
const followMethods = ['电话', '面谈', '微信', '邮件', '其他']
|
||||
const methodIndex = ref(0)
|
||||
const list2=[{
|
||||
title: '买家下单',
|
||||
desc: '跟进方式:电话\n跟进人:新生社区管理员\n跟进内容:内容内容内容'
|
||||
}, {
|
||||
title: '卖家发货',
|
||||
desc: '跟进方式:电话\n跟进人:新生社区管理员\n跟进内容:内容内容内容'
|
||||
}, {
|
||||
title: '买家签收',
|
||||
desc: '跟进方式:电话\n跟进人:新生社区管理员\n跟进内容:内容内容内容'
|
||||
}, {
|
||||
title: '交易完成',
|
||||
desc: '跟进方式:电话\n跟进人:新生社区管理员\n跟进内容:内容内容内容'
|
||||
}]
|
||||
const active=ref(null)
|
||||
// 表单引用
|
||||
const formRef = ref(null)
|
||||
|
||||
// 跟进方式选项
|
||||
const followMethods = ref(['电话', '微信', '邮件', '上门拜访', '视频会议', '其他'])
|
||||
|
||||
// 跟进表单数据
|
||||
const followData = reactive({
|
||||
followDate: '',
|
||||
followMethod: '',
|
||||
followContent: '',
|
||||
followResult: '',
|
||||
nextPlan: '',
|
||||
nextContactDate: ''
|
||||
})
|
||||
|
||||
// 历史记录数据
|
||||
const historyRecords = ref([
|
||||
{
|
||||
id: 1,
|
||||
date: '2025-11-05',
|
||||
method: '电话',
|
||||
follower: '新兴社区管理员',
|
||||
content: '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容。'
|
||||
// 校验规则
|
||||
const rules = {
|
||||
followDate: {
|
||||
required: true,
|
||||
message: '请选择跟进日期'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
date: '2025-11-05',
|
||||
method: '电话',
|
||||
follower: '新兴社区管理员',
|
||||
content: '内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容。'
|
||||
followMethod: {
|
||||
required: true,
|
||||
message: '请选择跟进方式'
|
||||
},
|
||||
followContent: {
|
||||
required: true,
|
||||
message: '请填写跟进内容'
|
||||
},
|
||||
followResult: {
|
||||
required: true,
|
||||
message: '请填写跟进结果'
|
||||
}
|
||||
])
|
||||
|
||||
// 返回上一页
|
||||
const goBack = () => {
|
||||
router.back()
|
||||
}
|
||||
|
||||
// 重置表单
|
||||
const resetForm = () => {
|
||||
Object.keys(followData).forEach(key => {
|
||||
followData[key] = ''
|
||||
const searchKeyword = ref('');
|
||||
const dataList=ref([])
|
||||
const pageSize=ref(10)
|
||||
const pageNum=ref(1)
|
||||
const totalNum=ref(0)
|
||||
const baseUrl = config.imgBaseUrl
|
||||
const getBackgroundStyle = (imageName) => ({
|
||||
backgroundImage: `url(${baseUrl}/dispatch/${imageName})`,
|
||||
backgroundSize: 'cover', // 覆盖整个容器
|
||||
backgroundPosition: 'center', // 居中
|
||||
backgroundRepeat: 'no-repeat'
|
||||
});
|
||||
const trainVideoImgUrl=config.trainVideoImgUrl
|
||||
|
||||
// 所属区域选项(可根据实际替换为动态数据)
|
||||
const regions = ['北京市', '上海市', '广州市', '深圳市', '杭州市']
|
||||
const regionIndex = ref(0)
|
||||
|
||||
// 事件处理
|
||||
const onDateChange = (field, e) => {
|
||||
formData[field] = e.detail.value
|
||||
}
|
||||
|
||||
const onMethodChange = (e) => {
|
||||
const idx = e.detail.value
|
||||
methodIndex.value = idx
|
||||
formData.followMethod = followMethods[idx]
|
||||
}
|
||||
|
||||
const handleSubmit = () => {
|
||||
formRef.value?.validate()
|
||||
.then(() => {
|
||||
uni.showToast({ title: '校验通过', icon: 'success' });
|
||||
})
|
||||
}
|
||||
.catch((errors) => {
|
||||
console.log('校验失败:', errors);
|
||||
uni.showToast({ title: '请填写必填项', icon: 'none' });
|
||||
});
|
||||
};
|
||||
|
||||
// 保存跟进记录
|
||||
const saveFollowRecord = () => {
|
||||
// 表单验证
|
||||
if (!followData.followDate) {
|
||||
uni.showToast({ title: '请选择跟进日期', icon: 'none' })
|
||||
return
|
||||
}
|
||||
if (!followData.followMethod) {
|
||||
uni.showToast({ title: '请选择跟进方式', icon: 'none' })
|
||||
return
|
||||
}
|
||||
if (!followData.followContent) {
|
||||
uni.showToast({ title: '请输入跟进内容', icon: 'none' })
|
||||
return
|
||||
}
|
||||
if (!followData.followResult) {
|
||||
uni.showToast({ title: '请输入跟进结果', icon: 'none' })
|
||||
return
|
||||
}
|
||||
|
||||
// 这里是模拟保存,实际项目中应该调用API
|
||||
console.log('保存跟进记录:', followData)
|
||||
|
||||
// 保存成功后添加到历史记录列表
|
||||
const newRecord = {
|
||||
id: historyRecords.value.length + 1,
|
||||
date: followData.followDate,
|
||||
method: followData.followMethod,
|
||||
follower: '当前登录用户', // 实际应该从登录信息中获取
|
||||
content: followData.followContent
|
||||
}
|
||||
historyRecords.value.unshift(newRecord)
|
||||
|
||||
// 清空表单
|
||||
resetForm()
|
||||
|
||||
uni.showToast({ title: '保存成功', icon: 'success' })
|
||||
}
|
||||
|
||||
// 跟进方式选择变化
|
||||
const onFollowMethodChange = (e) => {
|
||||
followData.followMethod = followMethods.value[e.detail.value]
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
// 组件挂载时的初始化逻辑
|
||||
// 可以从路由参数中获取人员ID等信息
|
||||
console.log('路由参数:', route.query)
|
||||
|
||||
// 实际项目中应该根据ID加载人员信息和历史记录
|
||||
// loadPersonInfo(route.query.personId)
|
||||
// loadHistoryRecords(route.query.personId)
|
||||
const handleReset = () => {
|
||||
Object.keys(formData).forEach(key => {
|
||||
formData[key] = ''
|
||||
})
|
||||
methodIndex.value = 0
|
||||
uni.showToast({ title: '已重置', icon: 'none' })
|
||||
}
|
||||
onLoad(() => {
|
||||
// getDataList('refresh');
|
||||
});
|
||||
|
||||
return {
|
||||
personInfo,
|
||||
followMethods,
|
||||
followData,
|
||||
historyRecords,
|
||||
goBack,
|
||||
resetForm,
|
||||
saveFollowRecord,
|
||||
onFollowMethodChange
|
||||
}
|
||||
|
||||
|
||||
// 获取视频列表
|
||||
function getDataList(type = 'add') {
|
||||
// let maxPage=Math.ceil(totalNum.value/pageSize.value)
|
||||
// let params={}
|
||||
// if (type === 'refresh') {
|
||||
// pageNum.value = 1;
|
||||
// params={
|
||||
// category:'',
|
||||
// hour:'',
|
||||
// level:'',
|
||||
// searchValue:searchKeyword.value,
|
||||
// orderStr:'',
|
||||
// pageSize:pageSize.value,
|
||||
// pageNum:pageNum.value
|
||||
// }
|
||||
// $api.myRequest('/train/public/trainVideo/trainVideoList', params).then((resData) => {
|
||||
// dataList.value=resData.rows
|
||||
// totalNum.value=resData.total
|
||||
// });
|
||||
// }
|
||||
// if (type === 'add' && pageNum.value < maxPage) {
|
||||
// pageNum.value += 1;
|
||||
// params={
|
||||
// category:'',
|
||||
// hour:'',
|
||||
// level:'',
|
||||
// searchValue:searchKeyword.value,
|
||||
// orderStr:'',
|
||||
// pageSize:pageSize.value,
|
||||
// pageNum:pageNum.value
|
||||
// }
|
||||
// $api.myRequest('/train/public/trainVideo/trainVideoList', params).then((resData) => {
|
||||
// dataList.value=dataList.value.concat(resData.rows)
|
||||
// totalNum.value=resData.total
|
||||
// });
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
// 播放视频
|
||||
function playVideo(video) {
|
||||
navTo(`/packageB/train/video/videoDetail?id=${video.videoId}`);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.help-follow-page {
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
}
|
||||
<style lang="stylus" scoped>
|
||||
.btnback
|
||||
width: 64rpx
|
||||
height: 64rpx
|
||||
|
||||
.header {
|
||||
background-color: #1989fa;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 20rpx 30rpx;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
image
|
||||
height: 100%
|
||||
width: 100%
|
||||
.info-box
|
||||
margin: 30rpx 30rpx
|
||||
background: linear-gradient(0deg, #D9ECFF 0%, #F0F7FF 100%)
|
||||
border-radius: 20rpx
|
||||
padding: 40rpx 0
|
||||
display: flex
|
||||
align-items: center
|
||||
.info-img
|
||||
width: 40rpx
|
||||
height: 40rpx
|
||||
margin-bottom: 20rpx
|
||||
.info-line
|
||||
border-right: 2rpx solid #B7D6FF
|
||||
.info-item
|
||||
display: flex
|
||||
flex-direction: column
|
||||
align-items: center
|
||||
justify-content: center
|
||||
width: 50%
|
||||
.info-label
|
||||
font-size: 26rpx
|
||||
color: #6E7E9B
|
||||
margin-bottom: 20rpx
|
||||
.info-value
|
||||
font-weight: bold
|
||||
font-size: 28rpx
|
||||
color: #3D61AC
|
||||
.main-list
|
||||
background-color: #ffffff
|
||||
padding: 20rpx 20rpx 28rpx 20rpx
|
||||
margin: 30rpx 30rpx
|
||||
box-shadow: 0px 3px 20px 0px rgba(0,105,234,0.1)
|
||||
border-radius: 12px
|
||||
.list-top
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
.list-title
|
||||
font-weight: bold
|
||||
font-size: 36rpx
|
||||
color: #404040
|
||||
position: relative
|
||||
|
||||
.back-btn {
|
||||
padding: 10rpx;
|
||||
}
|
||||
.title-line
|
||||
position: absolute
|
||||
bottom: -10rpx
|
||||
left: 70rpx
|
||||
width: 70rpx
|
||||
height: 8rpx
|
||||
background: linear-gradient(90deg, #FFAD58 0%, #FF7A5B 100%)
|
||||
border-radius: 4rpx
|
||||
.search-box-btn
|
||||
border-radius: 32rpx !important
|
||||
background: #3088FF !important
|
||||
margin-right: 16rpx
|
||||
.reset-box-btn
|
||||
border-radius: 32rpx !important
|
||||
background: #02B44D
|
||||
color: #fff
|
||||
.search-container
|
||||
padding: 20rpx 0rpx 0rpx 0rpx
|
||||
.title-total
|
||||
font-size: 24rpx
|
||||
color: #999999
|
||||
.total-num
|
||||
color: #3088FF
|
||||
margin-left: 4rpx
|
||||
margin-right: 4rpx
|
||||
font-weight: bold
|
||||
font-size: 26rpx
|
||||
.search-item
|
||||
display: flex
|
||||
align-items: center
|
||||
margin-bottom: 20rpx
|
||||
|
||||
.title {
|
||||
color: #fff;
|
||||
font-size: 36rpx;
|
||||
font-weight: bold;
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
margin-right: 60rpx;
|
||||
}
|
||||
.label
|
||||
width: 160rpx
|
||||
font-size: 28rpx
|
||||
color: #404040
|
||||
|
||||
.person-info-card {
|
||||
background-color: #fff;
|
||||
margin-top: 100rpx;
|
||||
padding: 30rpx;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
border-radius: 10rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
.input,
|
||||
.picker
|
||||
background: #FFFFFF
|
||||
flex: 1
|
||||
height: 72rpx
|
||||
padding: 0 20rpx
|
||||
border: 1px solid #A0A0A0
|
||||
border-radius: 8rpx
|
||||
font-size: 28rpx
|
||||
line-height: 72rpx
|
||||
|
||||
.info-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
}
|
||||
.picker-value
|
||||
color: #666
|
||||
.list-box
|
||||
margin-top: 40rpx
|
||||
.con-box
|
||||
background: #fff
|
||||
padding: 20rpx
|
||||
box-shadow: 0px 0px 6rpx 0px rgba(0,71,200,0.16)
|
||||
border-radius: 24rpx
|
||||
border: 1rpx solid #EDF5FF
|
||||
margin-top: 30rpx
|
||||
.form-title
|
||||
display: flex
|
||||
align-items: center
|
||||
|
||||
.info-label {
|
||||
font-size: 26rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.follow-form-section {
|
||||
background-color: #fff;
|
||||
padding: 30rpx;
|
||||
border-radius: 10rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.history-section {
|
||||
background-color: #fff;
|
||||
padding: 30rpx;
|
||||
border-radius: 10rpx;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.section-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.record-count {
|
||||
font-size: 28rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.form-item {
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-bottom: 10rpx;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.required::before {
|
||||
content: '*';
|
||||
color: #ff4d4f;
|
||||
margin-right: 5rpx;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
width: 100%;
|
||||
height: 80rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
.form-name
|
||||
font-weight: bold
|
||||
font-size: 32rpx
|
||||
color: #595959
|
||||
margin-right:16rpx
|
||||
.form-type
|
||||
border-radius: 8rpx;
|
||||
padding: 0 20rpx;
|
||||
border: 2rpx solid #FF7D26;
|
||||
font-size: 24rpx
|
||||
color: #F1690E
|
||||
padding: 4rpx 10rpx
|
||||
.form-item
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
margin-top: 20rpx
|
||||
.item-left
|
||||
display: flex
|
||||
align-items: center
|
||||
.item-img
|
||||
width: 26rpx
|
||||
height: 26rpx
|
||||
margin-right: 10rpx
|
||||
.item-label
|
||||
font-size: 26rpx
|
||||
color: #B3B3B3
|
||||
.item-right
|
||||
font-size: 26rpx
|
||||
color: #737373
|
||||
.form-btns
|
||||
margin-top:30rpx
|
||||
.form-box-btn
|
||||
border-radius: 50rpx !important
|
||||
margin-right: 24rpx
|
||||
padding: 0rpx 40rpx
|
||||
.detail-btn
|
||||
background: #EDF5FF
|
||||
border: 1px solid #3088FF
|
||||
font-size: 28rpx
|
||||
color: #3088FF
|
||||
.follow-btn
|
||||
background: #EEF9F3
|
||||
border: 1px solid #00933E
|
||||
font-size: 28rpx
|
||||
color: #00933E
|
||||
.recommend-btn
|
||||
background: linear-gradient(92deg, #0DCCFF 0%, #4760FF 100%)
|
||||
font-size: 28rpx
|
||||
color: #FFFFFF
|
||||
.form-container
|
||||
margin-top: 30rpx
|
||||
:deep(.uni-forms-item__label)
|
||||
width: 194rpx !important
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.date-input {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.form-picker {
|
||||
color: #404040;
|
||||
/* 统一 picker 和 textarea 样式 */
|
||||
.picker-value,
|
||||
.textarea {
|
||||
width: 100%;
|
||||
height: 80rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 0 20rpx;
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.picker-text {
|
||||
font-size: 28rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
width: 100%;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
border-radius: 8rpx;
|
||||
min-height: 60rpx;
|
||||
padding: 20rpx;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 8rpx;
|
||||
font-size: 28rpx;
|
||||
min-height: 150rpx;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.textarea {
|
||||
height: 120rpx;
|
||||
resize: none;
|
||||
}
|
||||
|
||||
.form-buttons {
|
||||
.button-group {
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
margin-top: 40rpx;
|
||||
justify-content: space-between;
|
||||
padding: 40rpx 20rpx 20rpx;
|
||||
}
|
||||
|
||||
.save-btn {
|
||||
flex: 1;
|
||||
background-color: #1989fa;
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
border: none;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
.btn {
|
||||
width: 45%;
|
||||
height: 80rpx;
|
||||
font-size: 30rpx;
|
||||
border-radius: 8rpx;
|
||||
}
|
||||
|
||||
.reset-btn {
|
||||
flex: 1;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
font-size: 32rpx;
|
||||
border: 1rpx solid #e0e0e0;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
background-color: #D8E9FF;
|
||||
color: #1176FF;
|
||||
}
|
||||
|
||||
.history-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.history-item {
|
||||
border: 1rpx solid #e0e0e0;
|
||||
border-radius: 10rpx;
|
||||
padding: 20rpx;
|
||||
}
|
||||
|
||||
.history-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 15rpx;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.history-date {
|
||||
font-size: 28rpx;
|
||||
color: #1989fa;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.history-content {
|
||||
padding-left: 30rpx;
|
||||
}
|
||||
|
||||
.history-row {
|
||||
margin-bottom: 10rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
.history-label {
|
||||
color: #666;
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
.history-value {
|
||||
color: #333;
|
||||
.submit-btn {
|
||||
background-color: #368BFF;
|
||||
color: white;
|
||||
}
|
||||
:deep(.uni-steps__column-circle )
|
||||
width: 24rpx !important
|
||||
height: 24rpx !important
|
||||
background: radial-gradient(circle,
|
||||
#00C0FA 0%,
|
||||
#015EEA 50%,
|
||||
#FFFFFF 51%,
|
||||
#FFFFFF 100%) !important
|
||||
border-radius: 50%
|
||||
border: 2rpx solid #015EEA
|
||||
:deep(.uni-steps__column-title)
|
||||
font-size: 28rpx !important
|
||||
color: #006CFF !important
|
||||
margin-bottom: 24rpx
|
||||
:deep(.uni-steps__column-desc)
|
||||
font-size: 28rpx
|
||||
color: #898989 !important
|
||||
line-height: 1.5
|
||||
:deep(.uni-steps__column-text )
|
||||
padding: 16rpx 0 !important
|
||||
border: none
|
||||
:deep(.uni-steps__column-line)
|
||||
background-color: #368BFF !important
|
||||
:deep(.uni-steps__column-line--before)
|
||||
background-color:rgba(0,0,0,0) !important
|
||||
</style>
|
||||
@@ -26,38 +26,103 @@
|
||||
</view>
|
||||
</template>
|
||||
<scroll-view scroll-y class="main-scroll" @scrolltolower="handleScrollToLower">
|
||||
<div class="cards">
|
||||
<div class="cards" v-for="(item,index) in dataList">
|
||||
<div class="cardHead">
|
||||
<div class="cardHeadLeft">
|
||||
<div class="cardTitle">2025年注册会计师证</div>
|
||||
<div class="titleType primary">未开始</div>
|
||||
<div class="cardTitle">{{item.name}}</div>
|
||||
<div class="titleType success" v-if="item.score">已完成</div>
|
||||
<div class="titleType info" v-else-if="dates<item.startDate">未开始</div>
|
||||
<div class="titleType primary" v-else-if="(dates>item.startDate||dates==item.startDate)&&dates<item.dueDate">
|
||||
进行中
|
||||
</div>
|
||||
<div class="rightBtn">立即练习</div>
|
||||
<div class="titleType info" v-else-if="dates>item.dueDate">已过期</div>
|
||||
</div>
|
||||
<div class="rightBtn" v-if="(dates>item.startDate||dates==item.startDate)&&dates<item.dueDate&&item.isContinue!=1">开始考试</div>
|
||||
<div class="rightBtn" v-if="(dates>item.startDate||dates==item.startDate)&&dates<item.dueDate&&item.isContinue==1">继续考试</div>
|
||||
</div>
|
||||
<div class="heng"></div>
|
||||
<div class="cardCon">
|
||||
<div class="conten">考试时长:120分钟</div>
|
||||
<div class="conten">题目数量:88题</div>
|
||||
<div class="conten">及格分数:60分</div>
|
||||
<div class="conten">截止日期:2025-12-31</div>
|
||||
<div class="conten">考试时长:{{item.timeLimit}}分钟</div>
|
||||
<div class="conten">题目数量:{{item.totalQuestions}}题</div>
|
||||
<div class="conten">分类:
|
||||
<span v-for="(val, key) in classification">
|
||||
<template v-if="item.category==val.dictValue">{{ val.dictLabel }}</template>
|
||||
</span>
|
||||
</div>
|
||||
<div class="conten">成绩:
|
||||
<span v-if="item.gradeUser" >{{ item.gradeUser.score }}分</span>
|
||||
<span v-else>--</span>
|
||||
</div>
|
||||
<div class="conten">开始时间:{{item.startDate}}</div>
|
||||
<div class="conten">截止时间:{{item.dueDate}}</div>
|
||||
</div>
|
||||
<div class="flooter">
|
||||
<div @click="jumps('/packageB/train/mockExam/viewGrades')">查看成绩</div>
|
||||
<div>详情</div>
|
||||
<div>收藏</div>
|
||||
<div v-if="item.gradeUser" @click="jumps('/packageB/train/mockExam/viewGrades')">查看成绩</div>
|
||||
<div @click="handleDetail(item)">详情</div>
|
||||
<div @click="collects(item,1)" v-if="item.isCollect==0">
|
||||
<image :src="urls+'wsc.png'" mode="" style="width: 32rpx;height: 30rpx;"></image>
|
||||
收藏
|
||||
</div>
|
||||
<div v-else @click="collects(item,0)">
|
||||
<image :src="urls+'video-sc.png'" mode="" style="width: 32rpx;height: 30rpx;"></image>
|
||||
取消
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cards"></div>
|
||||
<div class="cards"></div>
|
||||
</scroll-view>
|
||||
</div>
|
||||
<div class="cards2" v-if="dialogVisible">
|
||||
<div class="cardCon">
|
||||
<div class="cardHead">
|
||||
<div></div>
|
||||
<div class="cardHead" style="margin-bottom: 20rpx;">
|
||||
<div>{{examInfo.name}}</div>
|
||||
<div style="font-size: 40rpx;" @click="clones()">×</div>
|
||||
</div>
|
||||
<div class="status-tags">
|
||||
<div class="titleType success" v-if="examInfo.score">已完成</div>
|
||||
<div class="titleType info" v-else-if="dates<examInfo.startDate">未开始</div>
|
||||
<div class="titleType primary" v-else-if="(dates>examInfo.startDate||dates==examInfo.startDate)&&dates<examInfo.dueDate">
|
||||
进行中
|
||||
</div>
|
||||
<div class="titleType info" v-else-if="dates>examInfo.dueDate">已过期</div>
|
||||
|
||||
<div class="titleType success" v-if="examInfo.difficulty=='easy'">初级</div>
|
||||
<div class="titleType tertiary" v-if="examInfo.difficulty=='medium'">中级</div>
|
||||
<div class="titleType primary2" v-if="examInfo.difficulty=='hard'">高级</div>
|
||||
</div>
|
||||
<div class="detailTitle">考试简介</div>
|
||||
<div class="detailCon">{{ examInfo.description }}</div>
|
||||
<div class="exam-info">
|
||||
<div class="info-item">
|
||||
<div class="info-value">{{ examInfo.timeLimit }}</div>
|
||||
<div class="info-label">考试时长</div>
|
||||
<div class="info-label">(分钟)</div>
|
||||
</div>
|
||||
<div class="info-divider"></div>
|
||||
<div class="info-item">
|
||||
<div class="info-value">{{ examInfo.totalQuestions }}</div>
|
||||
<div class="info-label">题目总数</div>
|
||||
</div>
|
||||
<div class="info-divider"></div>
|
||||
<div class="info-item">
|
||||
<div class="info-value">{{ examInfo.passScore }}</div>
|
||||
<div class="info-label">及格分数</div>
|
||||
</div>
|
||||
<div class="info-divider"></div>
|
||||
<div class="info-item">
|
||||
<div class="info-value">{{ examInfo.totalScore }}</div>
|
||||
<div class="info-label">总分</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detailTitle">考试要求</div>
|
||||
<div class="detailCon">考试过程中请勿刷新页面或关闭浏览器</div>
|
||||
<div class="detailCon">请在规定时间内完成所有题目</div>
|
||||
<div class="detailCon">考试开始后不可暂停,请确保网络连接稳定</div>
|
||||
<div class="detailCon">考试结束后可查看成绩和答案解析</div>
|
||||
|
||||
<div style="display: flex;justify-content: center;margin-top: 30rpx;">
|
||||
<div class="rightBtn" v-if="(dates>examInfo.startDate||dates==examInfo.startDate)&&dates<examInfo.dueDate&&examInfo.isContinue!=1">开始考试</div>
|
||||
<div class="rightBtn" v-if="(dates>examInfo.startDate||dates==examInfo.startDate)&&dates<examInfo.dueDate&&examInfo.isContinue==1">继续考试</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -66,22 +131,138 @@
|
||||
<script setup>
|
||||
import { inject, ref, reactive } from 'vue';
|
||||
import { onLoad } from '@dcloudio/uni-app';
|
||||
const { $api, navTo, navBack } = inject('globalFunction');
|
||||
const { $api, navTo, navBack,urls } = inject('globalFunction');
|
||||
import config from "@/config.js"
|
||||
const userInfo = ref({});
|
||||
const Authorization = ref('');
|
||||
const searchKeyword = ref('');
|
||||
const pageState = reactive({
|
||||
page: 0,
|
||||
list: [],
|
||||
total: 0,
|
||||
maxPage: 1,
|
||||
pageSize: 12,
|
||||
search: {},
|
||||
});
|
||||
const dataList=ref([])
|
||||
const pageSize=ref(10)
|
||||
const pageNum=ref(1)
|
||||
const totalNum=ref(0)
|
||||
const dates=ref('')
|
||||
const classification=ref([])
|
||||
const levalLabels=ref([])
|
||||
const examInfo = ref({})
|
||||
const baseUrl = config.imgBaseUrl
|
||||
const dialogVisible = ref(false);
|
||||
const handleScrollToLower = () => {
|
||||
|
||||
};
|
||||
onLoad(() => {
|
||||
getDictionary()
|
||||
const date = new Date();
|
||||
let year = date.getFullYear();
|
||||
let month = date.getMonth() + 1; // 月份从0开始,需要加1
|
||||
let day = date.getDate();
|
||||
month=month>9?month:'0'+month
|
||||
day=day>9?day:'0'+day
|
||||
dates.value=year+'-'+month+'-'+day
|
||||
Authorization.value=uni.getStorageSync('Padmin-Token')||''
|
||||
getHeart();
|
||||
});
|
||||
function getHeart() {
|
||||
const raw =Authorization.value;
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token ? { 'Authorization': raw.startsWith("Bearer ") ? raw : `Bearer ${token}` }: {}
|
||||
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData) => {
|
||||
if (resData.code == 200) {
|
||||
getUserInfo();
|
||||
} else {
|
||||
navTo('/packageB/login')
|
||||
}
|
||||
});
|
||||
};
|
||||
function getUserInfo(){
|
||||
let header={
|
||||
'Authorization':Authorization.value
|
||||
}
|
||||
$api.myRequest('/system/user/login/user/info', {},'get',10100,header).then((resData) => {
|
||||
userInfo.value = resData.info || {};
|
||||
getDataList('refresh');
|
||||
});
|
||||
};
|
||||
function getDictionary(){
|
||||
$api.myRequest('/system/public/dict/data/type/question_classification', {},'get',9100).then((resData) => {
|
||||
classification.value=resData.data
|
||||
});
|
||||
$api.myRequest('/system/public/dict/data/type/question_level', {},'get',9100).then((resData) => {
|
||||
levalLabels.value=resData.data
|
||||
});
|
||||
}
|
||||
// 搜索视频
|
||||
function searchVideo() {
|
||||
getDataList('refresh');
|
||||
}
|
||||
|
||||
// 清除搜索内容
|
||||
function clearSearch() {
|
||||
searchKeyword.value = '';
|
||||
getDataList('refresh');
|
||||
}
|
||||
// 获取考试列表
|
||||
function getDataList(type = 'add') {
|
||||
let maxPage=Math.ceil(totalNum.value/pageSize.value)
|
||||
let params={}
|
||||
if (type === 'refresh') {
|
||||
pageNum.value = 1;
|
||||
params={
|
||||
name:searchKeyword.value,
|
||||
pageSize:pageSize.value,
|
||||
pageNum:pageNum.value,
|
||||
userId:userInfo.value.userId
|
||||
}
|
||||
$api.myRequest('/train/public/trainExamDash/getExamPublishTable', params).then((resData) => {
|
||||
if(resData.code==200){
|
||||
dataList.value=resData.rows
|
||||
totalNum.value=resData.total
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
if (type === 'add' && pageNum.value < maxPage) {
|
||||
pageNum.value += 1;
|
||||
params={
|
||||
name:searchKeyword.value,
|
||||
pageSize:pageSize.value,
|
||||
pageNum:pageNum.value,
|
||||
userId:userInfo.value.userId
|
||||
}
|
||||
$api.myRequest('/train/public/trainExamDash/getExamPublishTable', params).then((resData) => {
|
||||
if(resData.code==200){
|
||||
dataList.value=dataList.value.concat(resData.rows)
|
||||
totalNum.value=resData.total
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
function collects(row,i){
|
||||
$api.myRequest('/train/public/examUser/addOrUpdateExamUser', {
|
||||
userId:userInfo.value.userId,
|
||||
examPaperId:row.examPaperId,
|
||||
collect:i,
|
||||
}).then((resData) => {
|
||||
if(resData.code==200){
|
||||
if(i==1){
|
||||
$api.msg('收藏成功',2000)
|
||||
}else{
|
||||
$api.msg('已取消收藏',2000)
|
||||
}
|
||||
getDataList('refresh');
|
||||
}
|
||||
});
|
||||
}
|
||||
function handleDetail(row){
|
||||
$api.myRequest('/train/public/trainExamDash/getExamPublishModel', {
|
||||
userId:userInfo.value.userId,
|
||||
examPaperId:row.examPaperId,
|
||||
}).then((resData) => {
|
||||
if(resData&&resData.code==200){
|
||||
examInfo.value=resData.data
|
||||
dialogVisible.value=true;
|
||||
}
|
||||
});
|
||||
}
|
||||
function jumps(url){
|
||||
navTo(url);
|
||||
}
|
||||
@@ -149,10 +330,10 @@ function clones(){
|
||||
}
|
||||
.main-scroll {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
height: 90%;
|
||||
.cards{
|
||||
width: 100%;
|
||||
height: 260rpx;
|
||||
height: 280rpx;
|
||||
background: linear-gradient(0deg, #E3EFFF 0%, #FBFDFF 100%);
|
||||
// box-shadow: 0px 0px 6px 0px rgba(0,71,200,0.32);
|
||||
border-radius: 12rpx;
|
||||
@@ -187,35 +368,15 @@ function clones(){
|
||||
line-height: 38rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
.primary{
|
||||
border: 1px solid #157EFF;
|
||||
color: #157EFF
|
||||
}
|
||||
.success{
|
||||
border: 1px solid #05A636;
|
||||
color: #05A636
|
||||
}
|
||||
.info{
|
||||
border: 1px solid #898989;
|
||||
color: #898989
|
||||
}
|
||||
}
|
||||
.rightBtn{
|
||||
width: 140rpx;
|
||||
height: 44rpx;
|
||||
line-height: 44rpx;
|
||||
background: linear-gradient(90deg, #00C0FA 0%, #1271FF 100%);
|
||||
border-radius: 4px;
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
text-align: center
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
.heng{
|
||||
width: 120rpx;
|
||||
height: 4rpx;
|
||||
background: linear-gradient(88deg, #015EEA 0%, #00C0FA 100%);
|
||||
margin: 10rpx 0 30rpx;
|
||||
margin: 10rpx 0 20rpx;
|
||||
}
|
||||
.cardCon{
|
||||
display: flex;
|
||||
@@ -226,7 +387,11 @@ function clones(){
|
||||
color: #666666;
|
||||
display: flex;
|
||||
align-items: center
|
||||
margin-bottom: 20rpx;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
.status-tags{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
}
|
||||
.flooter{
|
||||
@@ -238,6 +403,7 @@ function clones(){
|
||||
font-size: 28rpx;
|
||||
margin-left: 30rpx;
|
||||
color: #2175F3;
|
||||
padding-top: 14rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -254,7 +420,7 @@ function clones(){
|
||||
padding: 100rpx 50rpx;
|
||||
box-sizing: border-box;
|
||||
.cardCon{
|
||||
height: 100%;
|
||||
height: 70%;
|
||||
background-color: #fff;
|
||||
padding: 20rpx;
|
||||
box-sizing: border-box;
|
||||
@@ -269,4 +435,83 @@ function clones(){
|
||||
}
|
||||
}
|
||||
}
|
||||
.titleType{
|
||||
display: inline-block
|
||||
border-radius: 4px;
|
||||
font-size: 22rpx;
|
||||
color: #157EFF;
|
||||
width: 100rpx;
|
||||
height: 38rpx;
|
||||
text-align: center;
|
||||
line-height: 38rpx;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
.primary{
|
||||
border: 1px solid #157EFF!important;
|
||||
color: #157EFF!important
|
||||
}
|
||||
.success{
|
||||
border: 1px solid #05A636!important;
|
||||
color: #05A636!important
|
||||
}
|
||||
.info{
|
||||
border: 1px solid #898989!important;
|
||||
color: #898989!important
|
||||
}
|
||||
.tertiary{
|
||||
border: 1px solid #E6A340!important;
|
||||
color: #E6A340!important
|
||||
}
|
||||
.primary2{
|
||||
border: 1px solid #F56C6C!important;
|
||||
color: #F56C6C!important
|
||||
}
|
||||
.rightBtn{
|
||||
width: 140rpx;
|
||||
height: 44rpx;
|
||||
line-height: 44rpx;
|
||||
background: linear-gradient(90deg, #00C0FA 0%, #1271FF 100%);
|
||||
border-radius: 4px;
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
text-align: center;
|
||||
}
|
||||
.detailTitle{
|
||||
font-size: 32rpx;
|
||||
font-weight: 600;
|
||||
margin: 30rpx 0;
|
||||
}
|
||||
.detailCon{
|
||||
font-size: 28rpx;
|
||||
line-height: 40rpx;
|
||||
}
|
||||
.exam-info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 35rpx;
|
||||
margin-top: 20rpx;
|
||||
}
|
||||
|
||||
.info-item {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
font-family: 'D-DIN-Medium';
|
||||
font-size: 26rpx;
|
||||
font-weight: 600;
|
||||
color: #409EFF;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.info-divider {
|
||||
width: 2px;
|
||||
background-color: #C3E1FF;
|
||||
}
|
||||
</style>
|
||||
605
packageB/train/mockExam/startExam.vue
Normal file
605
packageB/train/mockExam/startExam.vue
Normal file
@@ -0,0 +1,605 @@
|
||||
<template>
|
||||
<div class="app-box">
|
||||
<image src="../../../static/images/train/bj.jpg" class="bjImg" mode=""></image>
|
||||
<div class="con-box">
|
||||
<div class="header">
|
||||
<div>正确率:{{accuracyRate}}%</div>
|
||||
<div>用时:{{formattedTime}}</div>
|
||||
<div class="headBtn" v-if="isRunning" @click="pause">暂停</div>
|
||||
<div class="headBtn" v-if="!isRunning" @click="start">继续</div>
|
||||
</div>
|
||||
<div class="problemCard">
|
||||
<div v-for="(item,index) in problemData" :key="index">
|
||||
<template v-if="questionIndex==(index+1)">
|
||||
<div class="problemTitle">
|
||||
<span class="titleType" v-if="item.type=='single'">单选题</span>
|
||||
<span class="titleType" v-if="item.type=='multiple'">多选题</span>
|
||||
<span class="titleType" v-if="item.type=='judge'">判断题</span>
|
||||
<span>{{item.content}}</span>
|
||||
</div>
|
||||
<div class="options" v-if="item.type=='single'">
|
||||
<div class="opt" @click="selected(i)" :class="radio!==''&&i==radio?'active':''" v-for="(val,i) in parseOptions(item.trainChooses)">
|
||||
<div class="optLab">{{indexToLetter(i)}}</div>
|
||||
<span>{{val}}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="options" v-if="item.type=='multiple'">
|
||||
<div class="opt" @click="selected2(i)" :class="judgment(i)?'active':''" v-for="(val,i) in parseOptions(item.trainChooses)">
|
||||
<div class="optLab">{{indexToLetter(i)}}</div>
|
||||
<span>{{val}}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="options" v-if="item.type=='judge'">
|
||||
<div class="opt" @click="selected3('正确')" :class="radio2=='正确'?'active':''">
|
||||
<span>正确</span>
|
||||
</div>
|
||||
<div class="opt" @click="selected3('错误')" :class="radio2=='错误'?'active':''">
|
||||
<span>错误</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="analysis" v-if="analysis">
|
||||
<div class="analysisHead correct" v-if="judgWhether=='正确'">
|
||||
<div>回答正确!</div>
|
||||
<div></div>
|
||||
</div>
|
||||
<div class="analysisHead errors" v-if="judgWhether=='错误'">
|
||||
<div>回答错误!</div>
|
||||
<div></div>
|
||||
</div>
|
||||
<div class="analysisCon">
|
||||
<div class="parse1">正确答案:</div>
|
||||
<div class="parse2" v-if="item.type=='single'" style="color: #30A0FF;font-weight: bold;">{{String.fromCharCode(65 + Number(item.answer))}}.</div>
|
||||
<div class="parse2" v-if="item.type=='multiple'" style="color: #30A0FF;font-weight: bold;">
|
||||
<span v-for="(val,i) in parseOptions(item.answer)">{{indexToLetter(val-1)}}.</span>
|
||||
</div>
|
||||
<div class="parse2" v-if="item.type=='judge'" style="color: #30A0FF;font-weight: bold;">{{item.answer}}</div>
|
||||
</div>
|
||||
<div class="analysisCon">
|
||||
<div class="parse1">答案解析:</div>
|
||||
<div class="parse2">{{item.answerDesc}}</div>
|
||||
</div>
|
||||
<div class="analysisCon">
|
||||
<div class="parse1">知识点:</div>
|
||||
<div>
|
||||
<el-tag style="margin-right: 10px;">{{item.knowledgePoint}}</el-tag>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="problemBtns">
|
||||
<div v-if="analysis&&judgWhether!=''&&questionIndex!=problemData.length" @click="questionIndex+=1">下一题</div>
|
||||
<div v-else :class="((radio===''&&radio2===''&&checkList.length==0&&isRunning)||analysis)?'events':''" @click="submit()">提交答案</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div class="footerLeft">
|
||||
<div class="zuo" :class="questionIndex==1?'events':''" @click="questionIndex-=1"></div>
|
||||
<div class="you" :class="questionIndex==problemData.length?'events':''" @click="questionIndex+=1"></div>
|
||||
<div @click="collect(1)" style="text-align: center;font-size: 24rpx;" v-if="(problemData[questionIndex - 1]?.isCollect || 0)!=1">
|
||||
<image :src="urls+'wsc.png'" mode="" style="width: 34rpx;height: 32rpx;"></image>
|
||||
<div>收藏</div>
|
||||
</div>
|
||||
<div @click="collect(0)" style="text-align: center;font-size: 24rpx;" v-if="(problemData[questionIndex - 1]?.isCollect || 0)==1">
|
||||
<image :src="urls+'video-sc.png'" mode="" style="width: 34rpx;height: 32rpx;"></image>
|
||||
<div>取消</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footerBtn" @click="exit()">完成练习</div>
|
||||
<div class="footerLeft">
|
||||
<div>
|
||||
<div class="icons" style="background-color: #1CADF5;">√</div>
|
||||
<div class="texts" style="color: #1CADF5;">{{correctIndex}}</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="icons" style="background-color: #FF6668;">×</div>
|
||||
<div class="texts" style="color: #FF6668;">{{errorsIndex}}</div>
|
||||
</div>
|
||||
<div @click="dialogVisible=true">
|
||||
<div><span style="color: #1CADF5;">{{questionIndex}}</span>/{{problemData.length}}</div>
|
||||
<div>题号</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cards" v-if="dialogVisible">
|
||||
<div class="cardCon">
|
||||
<div class="cardHead">
|
||||
<div>题号</div>
|
||||
<div style="font-size: 40rpx;" @click="clones()">×</div>
|
||||
</div>
|
||||
<div class="questionNums">
|
||||
<div class="questions" :class="item.whether=='正确'?'questionCorrect':item.whether=='错误'?'questionError':questionIndex==(index+1)?'questionsActive':''" @click="switchs(index)" v-for="(item,index) in problemList" :key="index">{{index+1}}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, inject, watch, ref, onMounted,onBeforeUnmount,computed } from 'vue';
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app';
|
||||
const { $api,urls , navTo,navBack , vacanciesTo, formatTotal, config } = inject('globalFunction');
|
||||
import useUserStore from '@/stores/useUserStore';
|
||||
import useDictStore from '@/stores/useDictStore';
|
||||
const userInfo = ref({});
|
||||
const Authorization = ref('');
|
||||
const radio = ref('');
|
||||
const radio2 = ref('');
|
||||
const checkList = ref([]);
|
||||
const questionIndex = ref(1);
|
||||
const correctIndex = ref(0);
|
||||
const errorsIndex = ref(0);
|
||||
const accuracyRate = ref(0);
|
||||
const elapsedTime = ref(0);
|
||||
const analysis = ref(false);
|
||||
const judgWhether = ref('');
|
||||
const isRunning = ref(false);
|
||||
const dialogVisible = ref(false);
|
||||
const problemData = ref([]);
|
||||
const problemList = ref([]);
|
||||
let timer = null;
|
||||
const formattedTime = computed(() => {
|
||||
const minutes = Math.floor(elapsedTime.value / 60)
|
||||
const seconds = elapsedTime.value % 60
|
||||
return `${padTime(minutes)}:${padTime(seconds)}`
|
||||
});
|
||||
watch(questionIndex, (newVal, oldVal) => {
|
||||
radio.value=""
|
||||
radio2.value=""
|
||||
checkList.value=[]
|
||||
analysis.value=false
|
||||
judgWhether.value=""
|
||||
});
|
||||
|
||||
// watch(problemData, (newVal, oldVal) => {
|
||||
// problemList.value=[];
|
||||
// newVal.forEach((item,i)=>{
|
||||
// problemList.value.push({index:i+1,whether:""})
|
||||
// })
|
||||
// });
|
||||
|
||||
onLoad((options) => {
|
||||
Authorization.value=uni.getStorageSync('Padmin-Token')||''
|
||||
getHeart();
|
||||
});
|
||||
onShow(()=>{
|
||||
|
||||
})
|
||||
onBeforeUnmount(() => {
|
||||
if (timer) {
|
||||
clearInterval(timer); // 清除定时器
|
||||
timer = null; // 防止内存泄漏,确保下次不会再误用已清除的定时器
|
||||
}
|
||||
});
|
||||
function getHeart() {
|
||||
const raw =Authorization.value;
|
||||
const token = typeof raw === "string" ? raw.trim() : "";
|
||||
const headers = token ? { 'Authorization': raw.startsWith("Bearer ") ? raw : `Bearer ${token}` }: {}
|
||||
$api.myRequest("/dashboard/auth/heart", {}, "POST", 10100, headers).then((resData) => {
|
||||
if (resData.code == 200) {
|
||||
getUserInfo();
|
||||
} else {
|
||||
navTo('/packageB/login')
|
||||
}
|
||||
});
|
||||
};
|
||||
function getUserInfo(){
|
||||
let header={
|
||||
'Authorization':Authorization.value
|
||||
}
|
||||
$api.myRequest('/system/user/login/user/info', {},'get',10100,header).then((resData) => {
|
||||
userInfo.value = resData.info || {};
|
||||
// userId.value=resData.info.userId
|
||||
queryData()
|
||||
});
|
||||
};
|
||||
function queryData(){
|
||||
problemData.value=[]
|
||||
let header={
|
||||
'Authorization':Authorization.value,
|
||||
'Content-Type':"application/x-www-form-urlencoded"
|
||||
}
|
||||
$api.myRequest('/train/public/trainPractice/getQuestions', {
|
||||
userId: userInfo.value.userId
|
||||
},'post',9100,header).then((resData) => {
|
||||
resData.forEach((item,i)=>{
|
||||
problemData.value.push(item)
|
||||
problemList.value.push({index:i+1,whether:""})
|
||||
})
|
||||
start()
|
||||
accuracyRates()
|
||||
});
|
||||
}
|
||||
function collect(is){
|
||||
let header={
|
||||
'Authorization':Authorization.value,
|
||||
'Content-Type':"application/x-www-form-urlencoded"
|
||||
}
|
||||
$api.myRequest('/train/public/questionUser/addOrUpdateCollect', {
|
||||
userId: userInfo.value.userId,
|
||||
questionId:problemData.value[questionIndex.value-1].questionId,
|
||||
collect:is
|
||||
},'post',9100,header).then((resData) => {
|
||||
problemData.value[questionIndex.value-1].isCollect=is
|
||||
});
|
||||
};
|
||||
//正确率
|
||||
function accuracyRates(){
|
||||
let header={
|
||||
'Authorization':Authorization.value,
|
||||
'Content-Type':"application/x-www-form-urlencoded"
|
||||
}
|
||||
$api.myRequest('/train/public/trainPractice/getCount', {
|
||||
userId: userInfo.value.userId,
|
||||
},'post',9100,header).then((resData) => {
|
||||
accuracyRate.value=resData.truePresent
|
||||
});
|
||||
};
|
||||
//提交答案
|
||||
function submit(){
|
||||
let indexs=questionIndex.value-1
|
||||
let parm={
|
||||
questionId:problemData.value[indexs].questionId,
|
||||
userId:userInfo.value.userId,
|
||||
answer:problemData.value[indexs].answer
|
||||
}
|
||||
if(problemData.value[indexs].type=='single'){
|
||||
parm.submitAnswer=radio.value
|
||||
}else if(problemData.value[indexs].type=='multiple'){
|
||||
parm.submitAnswer=checkList.value.join(',')
|
||||
}else if(problemData.value[indexs].type=='judge'){
|
||||
parm.submitAnswer=radio2.value
|
||||
}
|
||||
let header={
|
||||
'Authorization':Authorization.value,
|
||||
'Content-Type':"application/json"
|
||||
}
|
||||
$api.myRequest('/train/public/trainPractice/submitAnswer', parm,'post',9100,header).then((resData) => {
|
||||
if(resData&&resData.code==200){
|
||||
analysis.value=true
|
||||
judgWhether.value=resData.msg
|
||||
problemList.value[indexs].whether=resData.msg
|
||||
if(resData.msg=='正确'){
|
||||
correctIndex.value++
|
||||
}else if(resData.msg=='错误'){
|
||||
errorsIndex.value++
|
||||
}
|
||||
accuracyRates()
|
||||
}
|
||||
});
|
||||
};
|
||||
function selected(i){
|
||||
radio.value=i
|
||||
};
|
||||
//多选
|
||||
function selected2(i){
|
||||
let arr=checkList.value.join(",")
|
||||
if(arr.indexOf(i) !== -1){
|
||||
const index = checkList.value.indexOf(i);
|
||||
if (index !== -1) {
|
||||
checkList.value.splice(index, 1);
|
||||
}
|
||||
}else{
|
||||
checkList.value.push(i)
|
||||
}
|
||||
};
|
||||
function judgment(i){
|
||||
let arr=checkList.value.join(",")
|
||||
if(arr.indexOf(i) !== -1){
|
||||
return true
|
||||
}else{
|
||||
return false
|
||||
}
|
||||
};
|
||||
function selected3(i){
|
||||
radio2.value=i
|
||||
};
|
||||
// 解析选项
|
||||
function parseOptions(options) {
|
||||
if (!options) return [];
|
||||
// 假设options是字符串格式,以分号分隔
|
||||
if (typeof options === 'string') {
|
||||
return options.split(',').filter(opt => opt.trim());
|
||||
}
|
||||
// 如果是数组,直接返回
|
||||
if (Array.isArray(options)) {
|
||||
return options;
|
||||
}
|
||||
return [];
|
||||
};
|
||||
function indexToLetter(index) {
|
||||
// 将索引转换为对应的字母
|
||||
return String.fromCharCode(65 + index);
|
||||
};
|
||||
function padTime(time) {
|
||||
return time < 10 ? `0${time}` : time
|
||||
};
|
||||
function start() {
|
||||
if (isRunning.value) return
|
||||
isRunning.value = true
|
||||
timer = setInterval(() => {
|
||||
elapsedTime.value++
|
||||
}, 1000)
|
||||
};
|
||||
function pause() {
|
||||
if (!isRunning.value) return
|
||||
clearInterval(timer)
|
||||
isRunning.value = false
|
||||
};
|
||||
function clones(){
|
||||
dialogVisible.value=false
|
||||
};
|
||||
function switchs(i){
|
||||
questionIndex.value=(i+1)
|
||||
dialogVisible.value=false
|
||||
};
|
||||
function exit(){
|
||||
navBack()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="stylus" scoped>
|
||||
.app-box{
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
.bjImg{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.con-box{
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top:0;
|
||||
z-index: 10;
|
||||
padding: 20rpx 28rpx;
|
||||
box-sizing: border-box;
|
||||
.header{
|
||||
height: 100rpx;
|
||||
padding: 0 10rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
background: linear-gradient(0deg, #4285EC 0%, #0BBAFB 100%);
|
||||
color: #fff;
|
||||
font-size: 26rpx;
|
||||
border-radius: 10rpx
|
||||
.headBtn{
|
||||
background: #499FFF;
|
||||
border-radius: 4px;
|
||||
width: 100rpx;
|
||||
text-align: center;
|
||||
height: 50rpx;
|
||||
line-height: 50rpx;
|
||||
}
|
||||
}
|
||||
.problemCard{
|
||||
margin-top: 30rpx;
|
||||
.problemTitle{
|
||||
font-size: 30rpx;
|
||||
.titleType{
|
||||
display: inline-block;
|
||||
background-color: #499FFF;
|
||||
border-radius: 10rpx 10rpx 10rpx 0;
|
||||
padding: 8rpx 12rpx;
|
||||
color: #fff;
|
||||
font-size: 26rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
}
|
||||
.options{
|
||||
margin-top: 30rpx;
|
||||
.opt{
|
||||
height: 60rpx;
|
||||
/* background-color: #F8F9FA; */
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding-left: 30rpx;
|
||||
box-sizing: border-box;
|
||||
color: #808080;
|
||||
font-size: 30rpx;
|
||||
.optLab{
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
text-align: center;
|
||||
line-height: 40rpx;
|
||||
border-radius: 50%;
|
||||
background-color: #8C8C8C;
|
||||
color: #fff;
|
||||
font-weight: 600;
|
||||
font-size: 32rpx;
|
||||
margin-right: 20rpx;
|
||||
}
|
||||
}
|
||||
.active{
|
||||
background: linear-gradient(90deg, #25A9F5 0%, #B1DBFF 100%);
|
||||
color: #fff!important;
|
||||
font-weight: bold;
|
||||
}
|
||||
.active>view{
|
||||
background-color: #fff!important;
|
||||
color: #25A9F5!important;
|
||||
}
|
||||
}
|
||||
.analysis{
|
||||
margin-top: 30rpx;
|
||||
background-color: #fff;
|
||||
border-radius: 6px;
|
||||
margin-bottom: 15rpx;
|
||||
border: 1px solid #10A8FF;
|
||||
padding: 20rpx;
|
||||
box-sizing: border-box;
|
||||
.analysisHead{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 32rpx;
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: bold;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
.correct{
|
||||
color: #67C23A;
|
||||
}
|
||||
.errors{
|
||||
color: #F06A6A;
|
||||
}
|
||||
.analysisCon{
|
||||
margin-top: 30rpx;
|
||||
.parse1{
|
||||
font-size: 30rpx;
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: bold;
|
||||
}
|
||||
.parse2{
|
||||
font-size: 26rpx;
|
||||
color: #333;
|
||||
margin-top: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.problemBtns{
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: center
|
||||
view{
|
||||
width: 140rpx
|
||||
height: 50rpx
|
||||
text-align: center
|
||||
line-height: 50rpx
|
||||
background-color: #10A8FF
|
||||
color: #fff
|
||||
font-size: 28rpx
|
||||
border-radius: 5rpx
|
||||
margin-right: 10rpx;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.footer{
|
||||
width: 100%;
|
||||
height: 120rpx;
|
||||
border-top: 1px solid #ddd
|
||||
position: fixed
|
||||
bottom: 0
|
||||
left: 0
|
||||
display: flex
|
||||
align-items: center
|
||||
justify-content: space-between
|
||||
.footerLeft{
|
||||
display: flex
|
||||
align-items: center
|
||||
font-size: 30rpx;
|
||||
text-align: center
|
||||
.zuo{
|
||||
width: 26rpx;
|
||||
height: 26rpx;
|
||||
border-top: 2px solid #666
|
||||
border-left: 2px solid #666
|
||||
transform: rotate(-45deg); /* 鼠标悬停时旋转360度 */
|
||||
margin-left: 60rpx;
|
||||
}
|
||||
.you{
|
||||
width: 26rpx;
|
||||
height: 26rpx;
|
||||
border-right: 2px solid #666
|
||||
border-bottom: 2px solid #666
|
||||
transform: rotate(-45deg); /* 鼠标悬停时旋转360度 */
|
||||
// margin-left: 30rpx;
|
||||
margin-right: 50rpx;
|
||||
}
|
||||
.icons{
|
||||
width: 30rpx;
|
||||
height: 30rpx;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
line-height: 30rpx;
|
||||
border-radius: 50%
|
||||
}
|
||||
.texts{
|
||||
font-size: 24rpx;
|
||||
}
|
||||
}
|
||||
.footerLeft>view{
|
||||
margin-right: 40rpx;
|
||||
}
|
||||
.footerBtn{
|
||||
width: 140rpx
|
||||
height: 50rpx
|
||||
text-align: center
|
||||
line-height: 50rpx
|
||||
background-color: #67C23A
|
||||
color: #fff
|
||||
font-size: 28rpx
|
||||
border-radius: 5rpx
|
||||
}
|
||||
}
|
||||
}
|
||||
.cards{
|
||||
position: fixed;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
z-index: 1000;
|
||||
padding: 100rpx 50rpx;
|
||||
box-sizing: border-box;
|
||||
.cardCon{
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
padding: 20rpx;
|
||||
box-sizing: border-box;
|
||||
.cardHead{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
font-size: 30rpx;
|
||||
font-weight: 600;
|
||||
}
|
||||
.questionNums{
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.questions{
|
||||
width: 60rpx;
|
||||
height: 60rpx;
|
||||
text-align: center;
|
||||
line-height: 60rpx;
|
||||
border-radius: 8rpx;
|
||||
border: 2px solid #E0E0E0;
|
||||
font-size: 28rpx;
|
||||
margin-right: 15px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.questionsActive{
|
||||
background-color: #F0F9FF;
|
||||
border: 2px solid #409EFF;
|
||||
}
|
||||
.questionCorrect{
|
||||
background-color: #F0F9FF;
|
||||
border: 2px solid #64BC38;
|
||||
color: #6BC441;
|
||||
}
|
||||
.questionError{
|
||||
background-color: #FFF1F0;
|
||||
border: 2px solid #F56C6C;
|
||||
color: #F36B6B;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.events{
|
||||
pointer-events: none; /* 这会禁用所有指针事件 */
|
||||
opacity: 0.5; /* 可选:改变透明度以视觉上表示不可点击 */
|
||||
cursor: not-allowed; /* 可选:改变鼠标光标样式 */
|
||||
}
|
||||
</style>
|
||||
@@ -68,7 +68,7 @@
|
||||
</div>
|
||||
<div class="problemBtns">
|
||||
<div v-if="analysis&&judgWhether!=''&&questionIndex!=problemData.length" @click="questionIndex+=1">下一题</div>
|
||||
<div v-else :class="((radio==''&&radio2==''&&checkList.length==0&&isRunning)||analysis)?'events':''" @click="submit()">提交答案</div>
|
||||
<div v-else :class="((radio===''&&radio2===''&&checkList.length==0&&isRunning)||analysis)?'events':''" @click="submit()">提交答案</div>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
@@ -191,7 +191,7 @@ function getData() {
|
||||
'Content-Type': "application/x-www-form-urlencoded"
|
||||
}
|
||||
$api.myRequest('/train/public/trainVideo/model', params,'post',9100,header).then((resData) => {
|
||||
videoInfo.value=resData
|
||||
videoInfo.value=resData.data
|
||||
videoInfo.value.currentUrl=trainVideoImgUrl+videoInfo.value.trainClassList[0].url
|
||||
videoInfo.value.percentage=((videoInfo.value.process/(videoInfo.value.hour*60))*100).toFixed(2)
|
||||
videoInfo.value.uploadTime=videoInfo.value.uploadTime.split(' ')[0]
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
<template>
|
||||
<view class="upload-container">
|
||||
<input type="file" multiple="multiple" accept="image/*" @change="handleFileChange">
|
||||
<!-- <uni-upload :disabled="disabled" :width="width" :height="height" :fileList="internalFileList" :name="name" :multiple="multiple"
|
||||
:maxCount="maxCount" @afterRead="handleAfterRead" @delete="handleRemove">
|
||||
</uni-upload> -->
|
||||
<view @click="chooseAndUploadFile" class="upload-button">+ 上传文件</view>
|
||||
<view v-for="(item, index) in internalFileList" :key="index" class="files-list">
|
||||
<view class="file-name">{{ item.file.name }}</view>
|
||||
<view class="delete-btn" @click="deleteFile(index)">删除</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@@ -11,7 +12,9 @@
|
||||
// import {
|
||||
// uploadImg
|
||||
// } from '@/api/company'
|
||||
import config from '@/config'
|
||||
// import config from '@/config'
|
||||
import config from '@/utilsRc/config.js'
|
||||
import { getToken } from "@/utilsRc/auth";
|
||||
//import {
|
||||
// getToken
|
||||
//} from '@/utils/auth'
|
||||
@@ -23,7 +26,7 @@
|
||||
},
|
||||
allowedFormats: {
|
||||
type: Array,
|
||||
default: () => [], // 允许的文件格式
|
||||
default: () => ['.png', '.jpg', '.jpeg', '.doc', '.docx', '.pdf', '.xls', '.xlsx'], // 允许的文件格式
|
||||
},
|
||||
maxImageSize: {
|
||||
type: Object,
|
||||
@@ -74,6 +77,106 @@
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
deleteFile(index){
|
||||
this.internalFileList.splice(index, 1);
|
||||
},
|
||||
chooseAndUploadFile() {
|
||||
wx.chooseMessageFile({
|
||||
count: this.maxCount,
|
||||
extension: this.allowedFormats,
|
||||
// ['.png', '.jpg', '.jpeg', '.doc', '.docx', '.pdf', '.xls', '.xlsx' ],
|
||||
success: (res) => {
|
||||
console.log('选择文件成功:', res);
|
||||
if(this.maxCount - this.internalFileList.length < res.tempFiles.length){
|
||||
uni.showToast({
|
||||
title: '最多只能上传' + this.maxCount + '个文件',
|
||||
icon: 'none'
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
let path = "";
|
||||
const twoMBInBytes = 2 * 1024 * 1024; // 2MB转换为字节数
|
||||
res.tempFiles.forEach((file) => {
|
||||
|
||||
if (file.size > twoMBInBytes) {
|
||||
uni.showToast({
|
||||
title: "图片大小不能超过2MB",
|
||||
icon: "none",
|
||||
});
|
||||
return;
|
||||
}
|
||||
if (res.tempFiles && res.tempFiles.length > 0) {
|
||||
path = file.path;
|
||||
if (this.allowedFormats.indexOf('.'+path.split(".")[1])!=-1) {
|
||||
uni.showLoading();
|
||||
const tempFilePath = file;
|
||||
uni.uploadFile({
|
||||
url: config.baseUrl+'/system/oss/upload', //图片上传地址
|
||||
filePath: tempFilePath.path,
|
||||
name: 'file',
|
||||
formData: {},
|
||||
header: {
|
||||
// 'Authorization': 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJQSlUyVlJCc1E1aXRMMWgxdjNkcVh2eER1c2VVc0hvRiIsInVzZXJJZCI6MX0.z4Z2XqgXyU0GQU-i7Bsa5T-zCKApTxj1YQ73rk7bAVo'
|
||||
'Authorization': 'Bearer ' + getToken(),
|
||||
},
|
||||
success: (res) => {
|
||||
var data = JSON.parse(res.data);
|
||||
console.log(data, 'sdfjiosdjfoi')
|
||||
if(data.code==200) {
|
||||
this.internalFileList.push({
|
||||
url: data.data.url,
|
||||
file: file
|
||||
})
|
||||
this.$emit('update', this.internalFileList);
|
||||
// this.serviceForm.fileUrl = this.internalFileList.map(item => item.url).join(',')
|
||||
this.$forceUpdate()
|
||||
uni.hideLoading();
|
||||
} else {
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
title: res.msg || '上传失败',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: (error) => {
|
||||
uni.showToast({
|
||||
title: '上传失败',
|
||||
icon: 'none'
|
||||
});
|
||||
console.error(error);
|
||||
}
|
||||
})
|
||||
} else {
|
||||
uni.showToast({
|
||||
icon: "none",
|
||||
duration: 1500,
|
||||
title: `只能选择${this.allowedFormats.join('、')}格式文件`,
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
// // 添加新选择的图片到列表
|
||||
// res.tempFiles.forEach((item, index) => {
|
||||
// this.fileList.push({
|
||||
// url: item.path,
|
||||
// file: res.tempFiles[index]
|
||||
// });
|
||||
// });
|
||||
// 更新 serviceForm.fileUrl
|
||||
// this.updateFileUrls();
|
||||
},
|
||||
fail: (err) => {
|
||||
console.error('选择图片失败:', err);
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
// 新增图片
|
||||
async handleAfterRead(event) {
|
||||
let lists = [].concat(event.file);
|
||||
@@ -141,11 +244,25 @@
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
<style scoped lang="scss">
|
||||
.upload-container {
|
||||
}
|
||||
.files-list {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
justify-content: space-between;
|
||||
margin-top: 10rpx;
|
||||
line-height: 50rpx;
|
||||
.file-name{
|
||||
width: calc(100% - 80rpx);
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.delete-btn{
|
||||
width: 80rpx;
|
||||
text-align: right;
|
||||
color: red;
|
||||
}
|
||||
}
|
||||
|
||||
.upload-slot {
|
||||
@@ -156,4 +273,13 @@
|
||||
border-radius: 4px;
|
||||
padding: 20px;
|
||||
}
|
||||
.upload-button {
|
||||
border: 1px dashed #ccc;
|
||||
border-radius: 4px;
|
||||
padding: 0 24rpx;
|
||||
width: 280rpx;
|
||||
text-align: center;
|
||||
background: #fff;
|
||||
line-height: 64rpx;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -68,12 +68,6 @@
|
||||
@change="handleAgentChange"
|
||||
>
|
||||
</uni-data-select>
|
||||
<!-- <el-option
|
||||
v-for="item in jingbrList1"
|
||||
:key="item.userId"
|
||||
:label="item.nickName"
|
||||
:value="item.userId"
|
||||
></el-option> -->
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -190,10 +184,10 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import config from '@/utilsRc/config.js'
|
||||
import {getJbrInfo} from "@/apiRc/personinfo/index"
|
||||
import {addInvestigate} from "@/apiRc/needs/person"
|
||||
import { getDicts } from '@/apiRc/system/dict.js';
|
||||
import config from '@/utilsRc/config.js'
|
||||
import { getToken } from "@/utilsRc/auth";
|
||||
export default {
|
||||
data() {
|
||||
@@ -401,25 +395,6 @@ export default {
|
||||
console.error('选择图片失败:', err);
|
||||
}
|
||||
});
|
||||
// uni.chooseImage({
|
||||
// count: remainingCount,
|
||||
// sizeType: ['original', 'compressed'],
|
||||
// sourceType: ['album', 'camera'],
|
||||
// success: (res) => {
|
||||
// // 添加新选择的图片到列表
|
||||
// res.tempFilePaths.forEach((path, index) => {
|
||||
// this.fileList.push({
|
||||
// url: path,
|
||||
// file: res.tempFiles[index]
|
||||
// });
|
||||
// });
|
||||
// // 更新 serviceForm.fileUrl
|
||||
// this.updateFileUrls();
|
||||
// },
|
||||
// fail: (err) => {
|
||||
// console.error('选择图片失败:', err);
|
||||
// }
|
||||
// });
|
||||
},
|
||||
|
||||
// 移除图片
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<uni-popup ref="show" @close="close" @open="open" backgroundColor="#fff" type="bottom">
|
||||
<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>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
* @Date: 2025-10-16 15:15:47
|
||||
* @LastEditors: shirlwang
|
||||
* @LastEditTime: 2025-11-05 17:29:18
|
||||
* @LastEditTime: 2025-11-06 16:09:23
|
||||
-->
|
||||
<template>
|
||||
<view>
|
||||
@@ -35,7 +35,7 @@
|
||||
<uni-icons color="#639AEB" type="arrow-right" size="16"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<view class="sendManager">
|
||||
<!-- <view class="sendManager">
|
||||
<view class="title">
|
||||
<image src="../../../packageRc/static/sendManager.png"/>
|
||||
任务下发管理员
|
||||
@@ -44,7 +44,7 @@
|
||||
<view>点击查看</view>
|
||||
<uni-icons color="#DBAA4E" type="arrow-right" size="16"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="titles">
|
||||
<view class="title-item active"><view>待办需求预警列表</view></view>
|
||||
@@ -390,7 +390,8 @@ view{box-sizing: border-box;display: block;}
|
||||
justify-content: space-between;
|
||||
>view{
|
||||
padding: 37.5rpx 32rpx;
|
||||
width: calc(50% - 12rpx);
|
||||
width: 100%;
|
||||
// width: calc(50% - 12rpx);
|
||||
.title{
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<view class="content">
|
||||
<view class="personnelInformation">
|
||||
<view class="left">
|
||||
<view class="left_name">{{ form?.name || '' }}</view>
|
||||
<view class="left_name">{{ form.name || '' }}</view>
|
||||
<view style="margin-top: 10rpx">
|
||||
<text v-if="form.gender == 0">男</text>
|
||||
<text v-if="form.gender == 1">女</text>
|
||||
@@ -413,8 +413,8 @@
|
||||
></u-datetime-picker> -->
|
||||
<!-- 社区端 - 显示隐藏退出组件 -->
|
||||
<exitPopup />
|
||||
|
||||
<uni-popup background-color="#fff" type="bottom"
|
||||
<DealDone ref="dealDone" @finished="getListPersonDemand();"/>
|
||||
<!-- <uni-popup background-color="#fff" type="bottom"
|
||||
ref="openDeal"
|
||||
style="position: relative; z-index: 100"
|
||||
closeOnClickOverlay
|
||||
@@ -442,25 +442,31 @@
|
||||
end="2030-6-20"
|
||||
@change="change"
|
||||
/>
|
||||
<!-- <text :class="formData.actualSolveDate ? 'picker-text' : 'picker-placeholder'">
|
||||
{{ formData.actualSolveDate || "请选择实际解决时间" }}
|
||||
</text> -->
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="经办人" prop="agentUserName" required>
|
||||
<view class="input-view">
|
||||
<input
|
||||
v-model="formData.agentUserName"
|
||||
border="none"
|
||||
placeholder="请输入经办人姓名"
|
||||
:customStyle="{
|
||||
padding: '28rpx 36rpx',
|
||||
fontSize: '28rpx',
|
||||
color: '#333333'
|
||||
}"
|
||||
/>
|
||||
<uni-data-select
|
||||
style="width: 100%"
|
||||
v-model="formData.agentUserId"
|
||||
placeholder="请选择经办人"
|
||||
:localdata="jingbrList1"
|
||||
@change="handleAgentChange"
|
||||
>
|
||||
</uni-data-select>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
|
||||
<uni-forms-item label="人员状态" prop="fileUrl">
|
||||
<picker
|
||||
@change="onpersonStatusChange"
|
||||
:range="personStatusOptions.map(item => item.label)"
|
||||
:value="getpersonStatusIndex(formData.personStatus)"
|
||||
mode="selector"
|
||||
>
|
||||
<view style="border: 1px solid #e4e4e4;width: 100%;padding: 0 20rpx;line-height: 64rpx;white-space: nowrap;text-overflow: ellipsis;flex-grow: 1;">{{ getpersonStatusLabel(formData.personStatus) || "请选择" }}</view>
|
||||
</picker>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="附件" prop="fileUrl">
|
||||
<ImageUpload
|
||||
:fileList="fileList"
|
||||
@@ -474,12 +480,7 @@
|
||||
<textarea
|
||||
v-model="formData.solveDesc"
|
||||
placeholder="请输入解决说明"
|
||||
:customStyle="{
|
||||
padding: '28rpx 36rpx',
|
||||
fontSize: '28rpx',
|
||||
color: '#333333',
|
||||
minHeight: '120rpx'
|
||||
}"
|
||||
style="padding: 28rpx 36rpx;border: 1px solid #e4e4e4;padding: 10rpx;border-radius: 8rpx;font-size: 28rpx;color:#333333;height: 120rpx;"
|
||||
></textarea>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
@@ -495,11 +496,11 @@
|
||||
"
|
||||
>重置</view
|
||||
>
|
||||
<view class="btn save" @click="finishJobRecommend(needsType)"
|
||||
<view class="btn save" @click="finishJobRecommend()"
|
||||
>办结</view
|
||||
>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</uni-popup> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@@ -512,11 +513,14 @@ import { getPersonInfo } from "../../api/company/index.js";
|
||||
// import { listEntrepreneurshipService } from "@/api/needs/entrepreneurshipService";
|
||||
// import { listTrainService, delTrainService } from "@/api/needs/trainService";
|
||||
import { listJobType } from "../../api/jobType/index";
|
||||
import ImageUpload from "@/packageRc/components/ImageUpload";
|
||||
// import ImageUpload from "@/packageRc/components/ImageUpload";
|
||||
import {getJbrInfo} from "@/apiRc/personinfo/index"
|
||||
import DealDone from "../needs/dealDone.vue";
|
||||
export default {
|
||||
name: "serviceDetails",
|
||||
components: {
|
||||
ImageUpload,
|
||||
// ImageUpload,
|
||||
DealDone,
|
||||
},
|
||||
|
||||
data() {
|
||||
@@ -580,6 +584,8 @@ export default {
|
||||
disabled: false,
|
||||
showPersonStatusPicker: false,
|
||||
personStatusLabel: '',
|
||||
jingbrList1: [],
|
||||
personStatusOptions: [],
|
||||
};
|
||||
},
|
||||
onLoad(options) {
|
||||
@@ -588,6 +594,22 @@ export default {
|
||||
this.form.userId = options.userId; // 确保userId被正确赋值
|
||||
console.log("options", options);
|
||||
this.getPersonInfo11();
|
||||
this.$getDict('qcjy_ryzt').then(res => {
|
||||
if (res.data && Array.isArray(res.data)) {
|
||||
this.personStatusOptions = res.data.map(item => ({
|
||||
value: item.dictValue,
|
||||
label: item.dictLabel
|
||||
}));
|
||||
}
|
||||
});
|
||||
getJbrInfo().then(res => {
|
||||
this.jingbrList1=res.map(ele => {
|
||||
return {
|
||||
value: ele.userId,
|
||||
text: ele.nickName
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
},
|
||||
onShow() {
|
||||
@@ -598,42 +620,43 @@ export default {
|
||||
created(){
|
||||
|
||||
},
|
||||
mounted() {
|
||||
|
||||
// 注释掉getDicts调用,避免运行时错误
|
||||
/*
|
||||
let arr = [
|
||||
{
|
||||
key: "qcjy_zgzpgz",
|
||||
prop: "highRecruitmentSalary",
|
||||
},
|
||||
{
|
||||
key: "qcjy_zgzpgz",
|
||||
prop: "minRecruitmentSalary",
|
||||
},
|
||||
{
|
||||
key: "qcjy_ryzt",
|
||||
prop: "personStatusList",
|
||||
},
|
||||
];
|
||||
arr.forEach((ele, index) => {
|
||||
this.$getDict(ele.key).then((res) => {
|
||||
this.dict[ele.prop] = res.data;
|
||||
this.$forceUpdate();
|
||||
});
|
||||
});
|
||||
*/
|
||||
// 暂时注释掉workTypeRemoteMethod调用,避免listJobType未定义错误
|
||||
// if (typeof this.workTypeRemoteMethod === 'function') {
|
||||
// this.workTypeRemoteMethod();
|
||||
// }
|
||||
// this.getListPersonDemand();
|
||||
// this.getJobSearchList();
|
||||
// this.getListOfEntrepreneurialNeeds();
|
||||
// this.getTrainingList();
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 获取帮扶内容标签
|
||||
getpersonStatusLabel(value) {
|
||||
let arr = this.personStatusOptions.filter(item => item.value == value)
|
||||
return arr.length ? arr[0].label : ''
|
||||
},
|
||||
getpersonStatusIndex(value) {
|
||||
if (!value) return 0;
|
||||
const index = this.personStatusOptions.findIndex(item => item.value === value);
|
||||
return index !== -1 ? index : 0;
|
||||
},
|
||||
// 处理人员状态选择变化
|
||||
onpersonStatusChange(e) {
|
||||
const index = e.detail.value;
|
||||
if (this.personStatusOptions && this.personStatusOptions[index]) {
|
||||
this.formData.personStatus = this.personStatusOptions[index].value;
|
||||
}
|
||||
},
|
||||
// 获取经办人名称
|
||||
getAgentUserName(userId) {
|
||||
const agent = this.jingbrList1.find(item => item.value === userId);
|
||||
return agent ? agent.nickName : '';
|
||||
},
|
||||
// 处理经办人选择变化
|
||||
handleAgentChange(value) {
|
||||
if (!value || !this.jingbrList1 || !this.jingbrList1.length) {
|
||||
this.formData.agentUserName = '';
|
||||
return;
|
||||
}
|
||||
const user = this.jingbrList1.find(item => item.value === value);
|
||||
if (user) {
|
||||
this.formData.agentUserName = user.nickName;
|
||||
} else {
|
||||
this.formData.agentUserName = '';
|
||||
}
|
||||
},
|
||||
closeopenDeal() {
|
||||
this.$refs.openDeal.close();
|
||||
},
|
||||
@@ -821,7 +844,7 @@ export default {
|
||||
});
|
||||
},
|
||||
// 办结按钮
|
||||
async finishJobRecommend(needsType) {
|
||||
async finishJobRecommend() {
|
||||
uni.showLoading();
|
||||
try {
|
||||
// 先进行表单校验
|
||||
@@ -879,19 +902,25 @@ export default {
|
||||
this.formData.fileUrl.push(url);
|
||||
}
|
||||
}
|
||||
this.formData.fileUrl = this.$arrayToString(this.formData.fileUrl);
|
||||
this.formData.fileUrl = this.formData.fileUrl.join(',')
|
||||
},
|
||||
// 需求办结
|
||||
requirementHandling(item, needsType) {
|
||||
// this.openDeal = true;
|
||||
this.$refs.openDeal.open();
|
||||
this.needsType = needsType;
|
||||
this.formData = {
|
||||
// this.$refs.openDeal.open();
|
||||
this.$refs.dealDone.init({
|
||||
id: item.id,
|
||||
currentStatus: "3",
|
||||
userId: item.userId,
|
||||
personStatus: item.personStatus || (this.dict.personStatusList[0] && this.dict.personStatusList[0].dictValue),
|
||||
};
|
||||
});
|
||||
// this.needsType = needsType;
|
||||
// this.formData = {
|
||||
// id: item.id,
|
||||
// currentStatus: "3",
|
||||
// userId: item.userId,
|
||||
// personStatus: item.personStatus || (this.dict.personStatusList[0] && this.dict.personStatusList[0].dictValue),
|
||||
// };
|
||||
console.log("item",item)
|
||||
this.$nextTick(() => {
|
||||
this.$forceUpdate();
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<!--
|
||||
* @Date: 2025-10-16 15:15:47
|
||||
* @LastEditors: shirlwang
|
||||
* @LastEditTime: 2025-11-05 16:52:15
|
||||
* @LastEditTime: 2025-11-06 14:30:22
|
||||
-->
|
||||
<template>
|
||||
<!-- @scroll="handleScroll" @scrolltolower="scrollBottom" -->
|
||||
<scroll-view :scroll-y="true" class="container" style="background-image: url('../../../packageRc/static/pageBg.png');">
|
||||
<view style="padding: 40rpx 28rpx;">
|
||||
<view class="kinggang">
|
||||
<view>
|
||||
<view @click="navTo('/packageA/pages/myResume/myResume')">
|
||||
<image src="../../../packageRc/static/kinggang1.png"/>
|
||||
<view>信息维护</view>
|
||||
</view>
|
||||
<view>
|
||||
<view @click="navTo('/packageA/pages/Intendedposition/Intendedposition')">
|
||||
<image src="../../../packageRc/static/kinggang5.png"/>
|
||||
<view>投递记录</view>
|
||||
</view>
|
||||
@@ -24,7 +24,7 @@
|
||||
<image src="../../../packageRc/static/kinggang3.png"/>
|
||||
<view>虚拟面试</view>
|
||||
</view>
|
||||
<view>
|
||||
<view @click="goCa">
|
||||
<image src="../../../packageRc/static/kinggang4.png"/>
|
||||
<view>素质测评</view>
|
||||
</view>
|
||||
@@ -38,7 +38,7 @@
|
||||
<view class="title-item" :class="{active: activeTitle == 1}" @click="activeTitle = 1,getJobRecommed()"><view>推荐岗位</view></view>
|
||||
<view class="title-item" :class="{active: activeTitle == 2}" @click="activeTitle = 2,getJobList()"><view>热门岗位</view></view>
|
||||
</view>
|
||||
<view v-for="(item, index) in jobList" :key="index" class="job-list">
|
||||
<view v-for="(item, index) in jobList" :key="index" @click="nextDetail(item)" class="job-list">
|
||||
<view class="top-line">
|
||||
<view class="salary">{{item.minSalary}}-{{item.maxSalary}}/月</view>
|
||||
<view class="time"><uni-icons color="#A2A2A2" type="info" size="12"></uni-icons>发布日期:{{ item.postingDate }}</view>
|
||||
@@ -62,21 +62,21 @@
|
||||
<view class="view-more-btn" @click="viewMore">查看更多内容</view>
|
||||
<view class="titles" style="justify-content: space-between;">
|
||||
<view class="title-item active"><view>政策专区</view></view>
|
||||
<view>{{'查看更多 >'}}</view>
|
||||
<view @click="toPolicyList">{{'查看更多 >'}}</view>
|
||||
</view>
|
||||
<view v-for="(item, index) in jobList" :key="index" class="job-list">
|
||||
<view v-for="(item, index) in policyList" :key="index" class="job-list" @click="toPolicyDetail">
|
||||
<view class="sign">推荐</view>
|
||||
<view class="title">
|
||||
<image src="../../../packageRc/static/zcLeft.png"/>
|
||||
销售顾问</view>
|
||||
{{item.zcmc}}</view>
|
||||
<view class="infos">
|
||||
<view>大专</view>
|
||||
<view>1-3年</view>
|
||||
<view>喀什 市南区</view>
|
||||
<view v-if="item.zclx">{{item.zclx}}</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>发布日期:2025-10-20</view>
|
||||
<view>浏览数<text style="color: #6AA7E8">99+</text></view>
|
||||
<view><uni-icons color="#A2A2A2" type="info" size="12"></uni-icons>发布日期:{{item.createTime}}</view>
|
||||
<view>浏览数<text style="color: #6AA7E8">{{item.viewNum}}</text></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@@ -86,6 +86,21 @@
|
||||
<script setup>
|
||||
import { reactive, inject, watch, ref, onMounted, watchEffect, nextTick } from 'vue';
|
||||
const { $api, navTo, vacanciesTo, formatTotal, config } = inject('globalFunction');
|
||||
|
||||
import { getPolicyList } from '@/apiRc/policy';
|
||||
let policyList = ref([])
|
||||
function getPolicy() {
|
||||
getPolicyList({pageNum: 1, pageSize: 10}).then(res => {
|
||||
policyList.value = res.rows
|
||||
})
|
||||
}
|
||||
|
||||
function toPolicyList() {
|
||||
navTo(`/packageRc/pages/policy/policyList`)
|
||||
}
|
||||
function toPolicyDetail() {
|
||||
navTo(`/packageRc/pages/policy/policyDetail?id=${item.id}`)
|
||||
}
|
||||
let activeTab = ref(1)
|
||||
let activeTitle = ref(1)
|
||||
|
||||
@@ -96,12 +111,17 @@ function back() {
|
||||
}
|
||||
onMounted(()=>{
|
||||
getJobRecommed()
|
||||
getPolicy();
|
||||
})
|
||||
|
||||
function goCa(){
|
||||
if (checkLogin()) {
|
||||
const userInfo = uni.getStorageSync('userInfo')
|
||||
navTo(`/packageCa/search/search?userId=${userInfo.userId}&name=${userInfo.name}`);
|
||||
}
|
||||
}
|
||||
function viewMore() {
|
||||
// uni.navigateTo({
|
||||
// url: '/pages/jobList/jobList'
|
||||
// })
|
||||
navTo(`/packageRc/pages/jobList/jobList`);
|
||||
}
|
||||
function tiao(){
|
||||
console.log('尝试导航到待办详情页面');
|
||||
@@ -168,6 +188,26 @@ function changeJobType(val){
|
||||
getJobList()
|
||||
}
|
||||
}
|
||||
// 登录检查函数
|
||||
import { storeToRefs } from 'pinia';
|
||||
const { userInfo, hasLogin, token } = storeToRefs(useUserStore());
|
||||
const checkLogin = () => {
|
||||
const tokenValue = uni.getStorageSync('token') || '';
|
||||
if (!tokenValue || !hasLogin.value) {
|
||||
// 未登录,打开授权弹窗
|
||||
wxAuthLoginRef.value?.open();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
};
|
||||
// 跳转到详情页面
|
||||
function nextDetail(job) {
|
||||
// 登录检查
|
||||
if (checkLogin()) {
|
||||
navTo(`/packageA/pages/post/post?jobId=${encodeURIComponent(job.jobId)}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
2030
packageRc/pages/jobList/jobList.vue
Normal file
2030
packageRc/pages/jobList/jobList.vue
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
* @Date: 2024-10-08 14:29:36
|
||||
* @LastEditors: shirlwang
|
||||
* @LastEditTime: 2025-11-04 17:33:17
|
||||
* @LastEditTime: 2025-11-06 12:14:22
|
||||
-->
|
||||
<template>
|
||||
<view class="input-outer-part">
|
||||
@@ -13,12 +13,12 @@
|
||||
color="#A6A6A6"></u-icon></view>
|
||||
</view>
|
||||
<view class="inner-part">
|
||||
<uni-forms labelPosition="left" :model="formData" :rules="rules" ref="uForm" class="self-form"
|
||||
labelWidth="100">
|
||||
<uni-forms labelPosition="right" :model="formData" :rules="rules" ref="uForm" class="self-form"
|
||||
labelWidth="150rpx">
|
||||
<uni-forms-item label="姓名" name="personName" required
|
||||
v-if="$store.getters.roles.includes('shequn'|| $store.getters.roles.includes('gly'))"
|
||||
>
|
||||
<view style="width: 100%;" @click="openPersonChooser"
|
||||
<view class="input-area" style="width: 100%;" @click="openPersonChooser"
|
||||
:class="{disabledLine: !edit||!canChoosePerson, noValue: !formData.personName}">
|
||||
{{ formData.personName || '请选择' }}
|
||||
</view>
|
||||
@@ -36,16 +36,16 @@
|
||||
<radio :customStyle="{marginRight: '16px'}" label="否" value="否">否</radio>
|
||||
</radio-group> -->
|
||||
<view class="radio-group">
|
||||
<view
|
||||
:class="['radio-item', { 'radio-disabled': !edit }]"
|
||||
@click="formData.ywcdxq = '是'"
|
||||
<view class="radio-item"
|
||||
:class="!edit ? 'radio-disabled' : ''"
|
||||
@click="edit ? formData.ywcdxq = '是': ''"
|
||||
v-if="edit">
|
||||
<view :class="['radio', { 'radio-checked': formData.ywcdxq === '是' }]"></view>
|
||||
<text>是</text>
|
||||
</view>
|
||||
<view
|
||||
:class="['radio-item', { 'radio-disabled': !edit }]"
|
||||
@click="formData.ywcdxq = '否'"
|
||||
<view class="radio-item"
|
||||
:class="!edit ? 'radio-disabled' : ''"
|
||||
@click="edit ? formData.ywcdxq = '否': ''"
|
||||
v-if="edit">
|
||||
<view :class="['radio', { 'radio-checked': formData.ywcdxq === '否' }]"></view>
|
||||
<text>否</text>
|
||||
@@ -54,26 +54,43 @@
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="场地面积" name="cdmj">
|
||||
<input :disabled="!edit" v-model="formData.cdmj" border="none"
|
||||
<input class="input-area" :disabled="!edit" v-model="formData.cdmj" border="none"
|
||||
placeholder="请输入"/>
|
||||
<!-- <u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon> -->
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="办公人数" name="bgrs">
|
||||
<input :disabled="!edit" v-model="formData.bgrs" border="none"
|
||||
<input class="input-area" :disabled="!edit" v-model="formData.bgrs" border="none"
|
||||
placeholder="请输入"/>
|
||||
<!-- <u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon> -->
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="办公位置" name="bgdd">
|
||||
<input :disabled="!edit" v-model="formData.bgdd" border="none"
|
||||
<input class="input-area" :disabled="!edit" v-model="formData.bgdd" border="none"
|
||||
placeholder="请输入"/>
|
||||
<!-- <u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon> -->
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="有无创业培训需求" name="ywcypxxq" required>
|
||||
<radio-group :disabled="!edit" :value="formData.ywcypxxq"
|
||||
<!-- <radio-group :disabled="!edit" :value="formData.ywcypxxq"
|
||||
placement="row">
|
||||
<radio :customStyle="{marginRight: '16px'}" label="是" value="是">是</radio>
|
||||
<radio :customStyle="{marginRight: '16px'}" label="否" value="否">否</radio>
|
||||
</radio-group>
|
||||
</radio-group> -->
|
||||
<view class="radio-group">
|
||||
<view class="radio-item"
|
||||
:class="!edit ? 'radio-disabled' : ''"
|
||||
@click="edit ? formData.ywcypxxq = '是' : ''"
|
||||
v-if="edit">
|
||||
<view :class="['radio', { 'radio-checked': formData.ywcypxxq === '是' }]"></view>
|
||||
<text>是</text>
|
||||
</view>
|
||||
<view class="radio-item"
|
||||
:class="!edit ? 'radio-disabled' : ''"
|
||||
@click="edit ? formData.ywcypxxq = '否' : ''"
|
||||
v-if="edit">
|
||||
<view :class="['radio', { 'radio-checked': formData.ywcypxxq === '否' }]"></view>
|
||||
<text>否</text>
|
||||
</view>
|
||||
<view v-else>{{ formData.ywcypxxq }}</view>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<!-- <uni-forms-item label="是否意向接受创业培训" name="isInterestedEntrepreneurshipGuidance" required>-->
|
||||
<!-- <radio-group :disabled="!edit" v-model="formData.isInterestedEntrepreneurshipGuidance"-->
|
||||
@@ -83,13 +100,30 @@
|
||||
<!-- </radio-group>-->
|
||||
<!-- </uni-forms-item>-->
|
||||
<uni-forms-item label="有无资金需求" name="ywzjxq" required>
|
||||
<radio-group :disabled="!edit" :value="formData.ywzjxq" placement="row">
|
||||
<!-- <radio-group :disabled="!edit" :value="formData.ywzjxq" placement="row">
|
||||
<radio :customStyle="{marginRight: '16px'}" label="是" value="是">是</radio>
|
||||
<radio :customStyle="{marginRight: '16px'}" label="否" value="否">否</radio>
|
||||
</radio-group>
|
||||
</radio-group> -->
|
||||
<view class="radio-group">
|
||||
<view class="radio-item"
|
||||
:class="!edit ? 'radio-disabled' : ''"
|
||||
@click="edit ? formData.ywzjxq = '是' : ''"
|
||||
v-if="edit">
|
||||
<view :class="['radio', { 'radio-checked': formData.ywzjxq === '是' }]"></view>
|
||||
<text>是</text>
|
||||
</view>
|
||||
<view class="radio-item"
|
||||
:class="!edit ? 'radio-disabled' : ''"
|
||||
@click="edit ? formData.ywzjxq = '否' : ''"
|
||||
v-if="edit">
|
||||
<view :class="['radio', { 'radio-checked': formData.ywzjxq === '否' }]"></view>
|
||||
<text>否</text>
|
||||
</view>
|
||||
<view v-else>{{ formData.ywzjxq }}</view>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="需求说明" name="jobDescription" required>
|
||||
<textarea :disabled="!edit" v-model="formData.jobDescription" placeholder="请输入"></textarea>
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="textarea" :disabled="!edit" v-model="formData.jobDescription" placeholder="请输入"></textarea>
|
||||
</uni-forms-item>
|
||||
<!-- <uni-forms-item label="希望解决日期" name="hopeSolveDate" required>
|
||||
<view style="width: 100%;" @click="showPicker('hopeSolveDate')"
|
||||
@@ -494,6 +528,44 @@
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.input-area{
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
box-sizing: border-box;
|
||||
// &input{
|
||||
|
||||
// }
|
||||
}
|
||||
textarea{
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
font-size: 26rpx;
|
||||
padding: 12rpx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.picker-view {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
// width: 100%;
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 2rpx solid #e5e5e5;
|
||||
border-radius: 12rpx;
|
||||
box-sizing: border-box;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.disabledLine {
|
||||
background: rgb(245, 247, 250);
|
||||
cursor: not-allowed;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
* @Date: 2024-10-08 14:29:36
|
||||
* @LastEditors: shirlwang
|
||||
* @LastEditTime: 2025-11-04 17:32:32
|
||||
* @LastEditTime: 2025-11-06 12:09:01
|
||||
-->
|
||||
<template>
|
||||
|
||||
@@ -10,23 +10,20 @@
|
||||
<view class="inner">
|
||||
<view class="part-title" style="display: flex;justify-content: space-between;">求职需求信息
|
||||
<view v-if="!edit&&formData.id&&formData.currentStatus!=3" class="btn"
|
||||
style="font-weight: normal;display: flex;" @click="edit=true">编辑<u-icon name="edit-pen"
|
||||
color="#A6A6A6"></u-icon></view>
|
||||
style="font-weight: normal;display: flex;" @click="edit=true">编辑</view>
|
||||
</view>
|
||||
<view class="inner-part">
|
||||
<uni-forms labelPosition="left" :model="formData" :rules="rules" ref="uForm" class="self-form" labelWidth="100">
|
||||
<uni-forms labelPosition="right" :model="formData" :rules="rules" ref="uForm" class="self-form" label-width="150rpx">
|
||||
<!-- v-if="$store.getters.roles.includes('shequn') || $store.getters.roles.includes('gly')" -->
|
||||
<uni-forms-item label="姓名" name="personName" required
|
||||
>
|
||||
<view v-if="name" style="width: 100%;"
|
||||
class="disabledLine">
|
||||
<uni-forms-item label="姓名" name="personName" required>
|
||||
<view v-if="name" style="width: calc(100% - 150rpx);overflow: hidden;text-overflow: ellipsis;white-space: nowrap;box-sizing: border-box;"
|
||||
class="input-area disabledLine">
|
||||
{{ formData.personName || '请选择' }}
|
||||
</view>
|
||||
<view v-else style="width: 100%;" @click="openPersonChooser"
|
||||
<view class="input-area" v-else @click="openPersonChooser" style="width: calc(100% - 150rpx);overflow: hidden;text-overflow: ellipsis;white-space: nowrap;box-sizing: border-box;"
|
||||
:class="{disabledLine: !edit||!canChoosePerson, noValue: !formData.personName}">
|
||||
{{ formData.personName || '请选择' }}
|
||||
</view>
|
||||
<u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="求职工种" name="jobWorkType">
|
||||
<picker
|
||||
@@ -40,7 +37,6 @@
|
||||
>
|
||||
<view class="picker-view">
|
||||
<text>{{ formData.jobWorkTypeName || '请选择工种' }}</text>
|
||||
<u-icon name="arrow-down" color="#999999"></u-icon>
|
||||
</view>
|
||||
</picker>
|
||||
<view v-else class="picker-view">
|
||||
@@ -48,24 +44,22 @@
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="最低薪酬" name="minRecruitmentSalary" required>
|
||||
<input :disabled="!edit" v-model="formData.minRecruitmentSalary" border="none"
|
||||
<input class="input-area" :disabled="!edit" v-model="formData.minRecruitmentSalary" border="none"
|
||||
placeholder="请输入"/>
|
||||
<u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="最高薪酬" name="highRecruitmentSalary" required>
|
||||
<input :disabled="!edit" v-model="formData.highRecruitmentSalary" border="none"
|
||||
<input class="input-area" :disabled="!edit" v-model="formData.highRecruitmentSalary" border="none"
|
||||
placeholder="请输入"/>
|
||||
<u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="希望工作地点" name="addressDesc">
|
||||
<view class="df_flex df_flex_1">
|
||||
<input placeholder="请输入" border="none" v-model="formData.addressDesc"
|
||||
class="ellipsis_1" @focus="$refs.placePicker.openDialog()"/>
|
||||
class="ellipsis_1 input-area" @focus="$refs.placePicker.openDialog()"/>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms labelPosition="left" class="self-form" labelWidth="110" >
|
||||
<uni-forms-item label="求职说明" name="jobDescription" required >
|
||||
<textarea :disabled="!edit" v-model="formData.jobDescription"
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="textarea" :disabled="!edit" v-model="formData.jobDescription"
|
||||
placeholder="请输入" ></textarea>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
@@ -691,6 +685,25 @@
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
.input-area{
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
box-sizing: border-box;
|
||||
// &input{
|
||||
|
||||
// }
|
||||
}
|
||||
textarea{
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
font-size: 26rpx;
|
||||
padding: 12rpx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -699,12 +712,14 @@
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
padding: 28rpx 36rpx;
|
||||
// width: 100%;
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 2rpx solid #e5e5e5;
|
||||
border-radius: 12rpx;
|
||||
min-height: 88rpx;
|
||||
box-sizing: border-box;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
* @Date: 2024-10-08 14:29:36
|
||||
* @LastEditors: shirlwang
|
||||
* @LastEditTime: 2025-11-05 08:57:34
|
||||
* @LastEditTime: 2025-11-06 12:09:11
|
||||
-->
|
||||
<template>
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
color="#A6A6A6"></u-icon></view>
|
||||
</view>
|
||||
<view class="inner-part">
|
||||
<uni-forms labelPosition="left" :model="formData" :rules="rules" ref="uForm" class="self-form"
|
||||
labelWidth="100">
|
||||
<uni-forms labelPosition="right" :model="formData" :rules="rules" ref="uForm" class="self-form"
|
||||
labelWidth="150rpx">
|
||||
<uni-forms-item label="姓名" prop="personName" required
|
||||
v-if="$store.getters.roles.includes('shequn')|| $store.getters.roles.includes('gly')">
|
||||
<view style="width: 100%;" @click="openPersonChooser"
|
||||
<view class="input-area" style="width: 100%;" @click="openPersonChooser"
|
||||
:class="{disabledLine: !edit||!canChoosePerson, noValue: !formData.personName}">
|
||||
{{ formData.personName || '请选择' }}
|
||||
</view>
|
||||
@@ -26,7 +26,7 @@
|
||||
</uni-forms-item>
|
||||
|
||||
<uni-forms-item label="需求说明" prop="jobDescription" required>
|
||||
<textarea :disabled="!edit" v-model="formData.jobDescription" placeholder="请输入"></textarea>
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="textarea" :disabled="!edit" v-model="formData.jobDescription" placeholder="请输入"></textarea>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
@@ -338,6 +338,44 @@
|
||||
color: rgb(192, 196, 204);
|
||||
}
|
||||
|
||||
.input-area{
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
box-sizing: border-box;
|
||||
// &input{
|
||||
|
||||
// }
|
||||
}
|
||||
textarea{
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
font-size: 26rpx;
|
||||
padding: 12rpx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.picker-view {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
// width: 100%;
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 2rpx solid #e5e5e5;
|
||||
border-radius: 12rpx;
|
||||
box-sizing: border-box;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.disabledLine {
|
||||
background: rgb(245, 247, 250);
|
||||
cursor: not-allowed;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<!--
|
||||
* @Date: 2024-10-08 14:29:36
|
||||
* @LastEditors: shirlwang
|
||||
* @LastEditTime: 2025-11-04 17:45:50
|
||||
* @LastEditTime: 2025-11-06 12:15:08
|
||||
-->
|
||||
<template>
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
color="#A6A6A6"></u-icon></view>
|
||||
</view>
|
||||
<view class="inner-part">
|
||||
<uni-forms labelPosition="left" :model="formData" :rules="rules" ref="uForm" class="self-form"
|
||||
labelWidth="120">
|
||||
<uni-forms labelPosition="right" :model="formData" :rules="rules" ref="uForm" class="self-form"
|
||||
labelWidth="150rpx">
|
||||
<uni-forms-item label="姓名" prop="personName" required
|
||||
v-if="$store.getters.roles.includes('shequn'|| $store.getters.roles.includes('gly'))">
|
||||
<view style="width: 100%;" @click="openPersonChooser"
|
||||
<view class="input-area" style="width: 100%;" @click="openPersonChooser"
|
||||
:class="{disabledLine: !edit||!canChoosePerson, noValue: !formData.personName}">
|
||||
{{ formData.personName || '请选择' }}
|
||||
</view>
|
||||
@@ -62,7 +62,7 @@
|
||||
</uni-forms>
|
||||
<uni-forms labelPosition="left" class="self-form" labelWidth="110">
|
||||
<uni-forms-item label="需求说明" prop="jobDescription">
|
||||
<textarea :disabled="!edit" v-model="formData.jobDescription" placeholder="请输入"></textarea>
|
||||
<textarea style="width: 100%;box-sizing: border-box;" class="textarea" :disabled="!edit" v-model="formData.jobDescription" placeholder="请输入"></textarea>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
@@ -568,33 +568,42 @@
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.input-area{
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
box-sizing: border-box;
|
||||
// &input{
|
||||
|
||||
// }
|
||||
}
|
||||
textarea{
|
||||
box-sizing: border-box;
|
||||
border: 1px solid #e4e4e4;
|
||||
border-radius: 8rpx;
|
||||
font-size: 26rpx;
|
||||
padding: 12rpx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.picker-view {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
padding: 28rpx 36rpx;
|
||||
// width: 100%;
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background: #ffffff;
|
||||
border: 2rpx solid #e5e5e5;
|
||||
border-radius: 12rpx;
|
||||
min-height: 88rpx;
|
||||
box-sizing: border-box;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
|
||||
.picker-view:active {
|
||||
background: #f8f9fa;
|
||||
border-color: #007aff;
|
||||
}
|
||||
|
||||
.picker-view text {
|
||||
color: #333333;
|
||||
font-size: 28rpx;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.picker-view .u-icon {
|
||||
margin-left: 16rpx;
|
||||
color: #999999;
|
||||
}
|
||||
</style>
|
||||
|
||||
287
packageRc/pages/needs/dealDone.vue
Normal file
287
packageRc/pages/needs/dealDone.vue
Normal file
@@ -0,0 +1,287 @@
|
||||
<template>
|
||||
<uni-popup background-color="#fff" type="bottom"
|
||||
ref="openDeal"
|
||||
style="position: relative; z-index: 100"
|
||||
>
|
||||
<view style="padding: 32rpx;">
|
||||
<uni-forms style="width: 100%;"
|
||||
class="self-form"
|
||||
labelPosition="top"
|
||||
:model="formData"
|
||||
:rules="rules"
|
||||
ref="uForm"
|
||||
labelWidth="300"
|
||||
>
|
||||
<uni-forms-item label="实际解决时间" prop="actualSolveDate" required>
|
||||
<view
|
||||
class="picker-view"
|
||||
:class="{ selected: formData.actualSolveDate }"
|
||||
>
|
||||
<uni-datetime-picker
|
||||
type="date"
|
||||
:value="formData.actualSolveDate"
|
||||
start="2021-3-20"
|
||||
end="2030-6-20"
|
||||
@change="change"
|
||||
/>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="经办人" prop="agentUserName" required>
|
||||
<view class="input-view">
|
||||
<uni-data-select
|
||||
style="width: 100%"
|
||||
v-model="formData.agentUserId"
|
||||
placeholder="请选择经办人"
|
||||
:localdata="jingbrList1"
|
||||
@change="handleAgentChange"
|
||||
>
|
||||
</uni-data-select>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
|
||||
<uni-forms-item label="人员状态" prop="personStatus">
|
||||
<picker
|
||||
@change="onpersonStatusChange"
|
||||
:range="personStatusOptions.map(item => item.label)"
|
||||
:value="getpersonStatusIndex(formData.personStatus)"
|
||||
mode="selector"
|
||||
>
|
||||
<view style="border: 1px solid #e4e4e4;width: 100%;box-sizing: border-box;padding: 0 20rpx;line-height: 64rpx;white-space: nowrap;text-overflow: ellipsis;flex-grow: 1;">{{ getpersonStatusLabel(formData.personStatus) || "请选择" }}</view>
|
||||
</picker>
|
||||
</uni-forms-item>
|
||||
<uni-forms-item label="附件" prop="fileUrl">
|
||||
<ImageUpload
|
||||
:fileList="fileList"
|
||||
@update="changeFile"
|
||||
:maxCount="6"
|
||||
/>
|
||||
</uni-forms-item>
|
||||
|
||||
<uni-forms-item label="解决说明" prop="solveDesc" required>
|
||||
<view class="textarea-view">
|
||||
<textarea
|
||||
v-model="formData.solveDesc"
|
||||
placeholder="请输入解决说明"
|
||||
style="width: 100%;padding: 28rpx 36rpx;border: 1px solid #e4e4e4;padding: 10rpx;border-radius: 8rpx;font-size: 28rpx;color:#333333;height: 120rpx;"
|
||||
></textarea>
|
||||
</view>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
<view class="button-area">
|
||||
<view class="btn" @click="closeopenDeal">取消</view>
|
||||
<view
|
||||
class="btn reset"
|
||||
@click="
|
||||
formData.actualSolveDate = '';
|
||||
formData.solveDesc = '';
|
||||
"
|
||||
>重置</view
|
||||
>
|
||||
<view class="btn save" @click="finishJobRecommend(needsType)"
|
||||
>办结</view
|
||||
>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ImageUpload from "@/packageRc/components/ImageUpload";
|
||||
import { requirementCompletion } from "@/apiRc/company/index";
|
||||
import {getJbrInfo} from "@/apiRc/personinfo/index"
|
||||
export default {
|
||||
components: {
|
||||
ImageUpload,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
actualSolveDate: '',
|
||||
agentUserId: '',
|
||||
personStatus: '',
|
||||
fileUrl: '',
|
||||
solveDesc: ''
|
||||
},
|
||||
fileList: [],
|
||||
personStatusOptions: [],
|
||||
rules: {
|
||||
actualSolveDate: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择实际解决时间",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
agentUserName: [
|
||||
{
|
||||
required: true,
|
||||
message: "请填写经办人",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
personStatus: [
|
||||
{
|
||||
required: true,
|
||||
message: "请填写人员状态",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
solveDesc: [
|
||||
{
|
||||
required: true,
|
||||
message: "请填写解决说明",
|
||||
trigger: ["blur", "change"],
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.$getDict('qcjy_ryzt').then(res => {
|
||||
if (res.data && Array.isArray(res.data)) {
|
||||
this.personStatusOptions = res.data.map(item => ({
|
||||
value: item.dictValue,
|
||||
label: item.dictLabel
|
||||
}));
|
||||
}
|
||||
});
|
||||
getJbrInfo().then(res => {
|
||||
this.jingbrList1=res.map(ele => {
|
||||
return {
|
||||
value: ele.userId,
|
||||
text: ele.nickName
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
init(formData) {
|
||||
this.formData = formData;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.openDeal.open()
|
||||
})
|
||||
},
|
||||
// 获取帮扶内容标签
|
||||
getpersonStatusLabel(value) {
|
||||
let arr = this.personStatusOptions.filter(item => item.value == value)
|
||||
return arr.length ? arr[0].label : ''
|
||||
},
|
||||
getpersonStatusIndex(value) {
|
||||
if (!value) return 0;
|
||||
const index = this.personStatusOptions.findIndex(item => item.value === value);
|
||||
return index !== -1 ? index : 0;
|
||||
},
|
||||
// 处理人员状态选择变化
|
||||
onpersonStatusChange(e) {
|
||||
const index = e.detail.value;
|
||||
if (this.personStatusOptions && this.personStatusOptions[index]) {
|
||||
this.formData.personStatus = this.personStatusOptions[index].value;
|
||||
}
|
||||
},
|
||||
// 获取经办人名称
|
||||
getAgentUserName(userId) {
|
||||
const agent = this.jingbrList1.find(item => item.value === userId);
|
||||
return agent ? agent.nickName : '';
|
||||
},
|
||||
// 处理经办人选择变化
|
||||
handleAgentChange(value) {
|
||||
if (!value || !this.jingbrList1 || !this.jingbrList1.length) {
|
||||
this.formData.agentUserName = '';
|
||||
return;
|
||||
}
|
||||
const user = this.jingbrList1.find(item => item.value === value);
|
||||
if (user) {
|
||||
this.formData.agentUserName = user.nickName;
|
||||
} else {
|
||||
this.formData.agentUserName = '';
|
||||
}
|
||||
},
|
||||
// 办结按钮
|
||||
async finishJobRecommend() {
|
||||
uni.showLoading();
|
||||
try {
|
||||
// 先进行表单校验
|
||||
this.$refs.uForm.validate().then(res => {
|
||||
console.log('res', res);
|
||||
// 校验通过后再走后续逻辑
|
||||
const url = "/manage/personDemand/demandDone";
|
||||
requirementCompletion(url, this.formData).then(res => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({title: '办结成功', icon: 'none'});
|
||||
this.$refs.openDeal.close();
|
||||
this.$emit('finished')
|
||||
}
|
||||
})
|
||||
}).catch((error) => {
|
||||
console.log(error)
|
||||
})
|
||||
|
||||
} catch (error) {
|
||||
let msg = '';
|
||||
if (error && error[0] && error[0].message) {
|
||||
msg = error[0].message;
|
||||
} else if (error && error.message) {
|
||||
msg = error.message;
|
||||
} else if (typeof error === 'string') {
|
||||
msg = error;
|
||||
} else {
|
||||
msg = '请检查必填项填写';
|
||||
}
|
||||
uni.showToast({title: msg, icon: 'none'});
|
||||
} finally {
|
||||
uni.hideLoading();
|
||||
}
|
||||
},
|
||||
changeFile(e) {
|
||||
// 清空当前的 fileUrl 数组
|
||||
this.formData.fileUrl = [];
|
||||
// 如果 e 有长度(即用户选择了文件)
|
||||
if (e.length) {
|
||||
// 遍历每个文件对象并获取其 url
|
||||
for (let data of e) {
|
||||
const url = data.data ? data.data.url : data.url;
|
||||
this.formData.fileUrl.push(url);
|
||||
}
|
||||
}
|
||||
this.formData.fileUrl = this.formData.fileUrl.join(',')
|
||||
},
|
||||
change(e) {
|
||||
this.formData.actualSolveDate = e
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -3,7 +3,7 @@
|
||||
<view class="input-outer-part"
|
||||
style="padding: 24rpx 32rpx 0;max-height: unset;">
|
||||
<view class="search-line">
|
||||
<u-input placeholder="请输入群众姓名进行搜索" v-model="queryParams.searchValue" border="none" />
|
||||
<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 class="inner"
|
||||
@@ -13,7 +13,7 @@
|
||||
<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 - 422rpx);position: relative;z-index: 1;"
|
||||
<scroll-view :scroll-y="true" style="height: calc(100vh - 342rpx);position: relative;z-index: 1;"
|
||||
@scrolltolower="getBottomList">
|
||||
<uni-swipe-action>
|
||||
<uni-swipe-action-item @click="clickDelete(item)" v-for="(item, index) in tableData" :key="index"
|
||||
@@ -32,24 +32,24 @@
|
||||
:class="item.currentStatus == 1 ? 'not' : item.currentStatus == 2 ? 'ing' : item.currentStatus == 3 ? 'finish' : '' ">
|
||||
{{ getDictLabel(item.currentStatus, currentStatusList) }}
|
||||
</text></view>
|
||||
<view class="info" v-if="queryParams.needsType == 1">
|
||||
<view class="info" v-if="queryParams.demandType == 1">
|
||||
<text>需求工种:</text>{{ item.jobWorkTypeName }}
|
||||
</view>
|
||||
<view class="info" v-if="queryParams.needsType == 3">
|
||||
<view class="info" v-if="queryParams.demandType == 3">
|
||||
<text>需求名称:</text>{{ item.serviceRequirementTitle }}
|
||||
</view>
|
||||
<view class="info"
|
||||
v-if="queryParams.needsType == 2||queryParams.needsType == 4||queryParams.needsType == 5">
|
||||
v-if="queryParams.demandType == 2||queryParams.demandType == 4||queryParams.demandType == 5">
|
||||
<text>需求名称:</text>{{ item.demandTitle }}
|
||||
</view>
|
||||
</view>
|
||||
<!--
|
||||
item.currentStatus = 1 待处理、2 处理中、 3 已完成
|
||||
queryParams.needsType 1 求职需求 2 援助需求、 3 创业需求、 4 培训需求 5其他需求 展示办结按钮
|
||||
queryParams.demandType 1 求职需求 2 援助需求、 3 创业需求、 4 培训需求 5其他需求 展示办结按钮
|
||||
|
||||
item.currentStatus = 1待处理 、 item.currentStatus = 2 处理中
|
||||
求职需求列表(queryParams.needsType = 1) 展示 推荐、办理
|
||||
培训需求列表(queryParams.needsType = 4) 展示 培训、办理
|
||||
求职需求列表(queryParams.demandType = 1) 展示 推荐、办理
|
||||
培训需求列表(queryParams.demandType = 4) 展示 培训、办理
|
||||
援助、创业、其他列表 展示办理
|
||||
item.currentStatus = 3 已完成
|
||||
统一展示 服务追溯
|
||||
@@ -64,7 +64,7 @@
|
||||
<!-- 需求处于待处理、处理中 -->
|
||||
<view v-else class="df_flex_1">
|
||||
<!-- 求职需求 -->
|
||||
<view v-if="queryParams.needsType == 1" class="df_flex">
|
||||
<view v-if="queryParams.demandType == 1" class="df_flex">
|
||||
<view type="primary" :plain="true" color="#BF5818" text="推荐"
|
||||
:customStyle="{border: 'none'}"
|
||||
@click="requirementTraining(item, 1)">推荐</view>
|
||||
@@ -73,7 +73,7 @@
|
||||
:customStyle="{border: 'none'}" @click="requirementHandling(item)">办理</view>
|
||||
</view>
|
||||
<!-- 培训需求 -->
|
||||
<view v-else-if="queryParams.needsType == 4" class="df_flex">
|
||||
<view v-else-if="queryParams.demandType == 4" class="df_flex">
|
||||
<view type="primary" :plain="true" color="#BF5818" text="培训"
|
||||
:customStyle="{border: 'none'}"
|
||||
@click="requirementTraining(item, 4)">培训</view>
|
||||
@@ -103,30 +103,35 @@
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
<uni-popup ref="openDeal" style="position: relative;z-index: 100;" background-color="#fff" type="bottom">
|
||||
<u--form class="self-form" labelPosition="top" :model="formData" :rules="rules" ref="uForm"
|
||||
<DealDone ref="dealDone" @finished="search();"/>
|
||||
<!-- <uni-popup ref="openDeal" background-color="#fff" type="bottom">
|
||||
<view style="padding: 32rpx;padding-bottom: 0">
|
||||
<uni-forms class="self-form" labelPosition="top" :model="formData" :rules="rules" ref="uForm"
|
||||
labelWidth="300">
|
||||
<u-form-item label="实际解决时间" prop="actualSolveDate" required>
|
||||
<view class="bordered" style="width: 100%;" @click="showTime=true"
|
||||
:class="{noValue: !formData.actualSolveDate}">{{ formData.actualSolveDate||'请选择' }}</view>
|
||||
<u-icon slot="right" name="arrow-down" color="#A6A6A6"></u-icon>
|
||||
</u-form-item>
|
||||
<uni-forms-item label="实际解决时间" prop="actualSolveDate" required>
|
||||
<picker style="width: 100%;" mode="date" :value="formData.actualSolveDate" start="1900-01-01" end="2100-12-31" @change="onDateChange">
|
||||
<view class="date-picker-wrapper" :class="{ noValue: !formData.actualSolveDate }">
|
||||
<view v-if="formData.actualSolveDate" class="date-value">{{ formData.actualSolveDate }}</view>
|
||||
<view v-else>请选择</view>
|
||||
</view>
|
||||
</picker>
|
||||
</uni-forms-item>
|
||||
|
||||
<u-form-item label="附件" prop="fileUrl" >
|
||||
<uni-forms-item label="附件" prop="fileUrl" >
|
||||
<ImageUpload :fileList="fileList" @update="changeFile" :maxCount="6" />
|
||||
</u-form-item>
|
||||
</uni-forms-item>
|
||||
|
||||
<u-form-item label="解决说明" prop="solveDesc" required>
|
||||
<u-textarea v-model="formData.solveDesc" placeholder="请输入"></u-textarea>
|
||||
<u-icon slot="right" name="edit-pen" color="#A6A6A6"></u-icon>
|
||||
</u-form-item>
|
||||
</u--form>
|
||||
<view class="button-area">
|
||||
<uni-forms-item label="解决说明" prop="solveDesc" required>
|
||||
<textarea style="border: 1px solid #e4e4e4;width: 100%;border-radius: 8rpx;padding: 24rpx;box-sizing: border-box;" v-model="formData.solveDesc" placeholder="请输入"></textarea>
|
||||
</uni-forms-item>
|
||||
</uni-forms>
|
||||
</view>
|
||||
<view class="button-area" style="box-shadow: unset;border-top: 1px solid #e4e4e4;padding-bottom: 0;">
|
||||
<view class="btn" @click="closeopenDeal">取消</view>
|
||||
<view class="btn reset" @click="formData.actualSolveDate = '';formData.solveDesc = ''">重置</view>
|
||||
<view class="btn save" @click="finishJobRecommend">办结</view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</uni-popup> -->
|
||||
<view class="addNeeds" @click="goAddNeeds()">
|
||||
<img src="https://rc.jinan.gov.cn/qcwjyH5/static/images/person/addNeeds.png" />
|
||||
</view>
|
||||
@@ -135,7 +140,7 @@
|
||||
@cancel="showTime=false"></u-datetime-picker> -->
|
||||
|
||||
|
||||
<u-datetime-picker
|
||||
<!-- <u-datetime-picker
|
||||
style="position: relative;z-index: 100;"
|
||||
:show="showTime"
|
||||
v-model="hopeSolveDate"
|
||||
@@ -144,7 +149,7 @@
|
||||
@confirm="confirmDate"
|
||||
@cancel="showTime=false"
|
||||
@close="showTime=false"
|
||||
></u-datetime-picker>
|
||||
></u-datetime-picker> -->
|
||||
|
||||
|
||||
<!-- 社区端 - 显示隐藏退出组件 -->
|
||||
@@ -180,10 +185,12 @@
|
||||
delOtherService,
|
||||
finishOtherService
|
||||
} from '@/apiRc/needs/otherService'
|
||||
import DealDone from './dealDone.vue'
|
||||
export default {
|
||||
components: {
|
||||
PopupList,
|
||||
ImageUpload
|
||||
ImageUpload,
|
||||
DealDone,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
@@ -194,7 +201,7 @@
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
needsType: 1
|
||||
demandType: 1
|
||||
},
|
||||
total: 0,
|
||||
showMorePage: true,
|
||||
@@ -227,19 +234,23 @@
|
||||
onLoad({
|
||||
dictValue
|
||||
}) {
|
||||
this.queryParams.needsType = dictValue || 1
|
||||
this.queryParams.demandType = dictValue || 1
|
||||
this.getCheckData()
|
||||
},
|
||||
onShow() {
|
||||
this.search();
|
||||
},
|
||||
methods: {
|
||||
// 日期选择变化处理
|
||||
onDateChange(e) {
|
||||
this.formData.actualSolveDate = e.detail.value;
|
||||
},
|
||||
closeopenDeal() {
|
||||
this.$refs.openDeal.close()
|
||||
},
|
||||
// 新增需求
|
||||
goAddNeeds() {
|
||||
this.$tab.navigateTo(`/pages/needs/needDetail?activeType=${this.queryParams.needsType}&showTab=1`)
|
||||
uni.navigateTo(`/packageRc/pages/needs/needDetail?activeType=${this.queryParams.demandType}&showTab=1`)
|
||||
},
|
||||
|
||||
confirmDate(e) {
|
||||
@@ -255,36 +266,36 @@
|
||||
// 需求推荐/培训
|
||||
requirementTraining(item, index) {
|
||||
if (index == 1) {
|
||||
uni.navigateTo(
|
||||
`/pages/services/serviceDetail?personName=${item.personName}&personId=${item.personId}&jobDemandInfoId=${item.id}&jobWorkType=${item.jobWorkType}&type=3&showTab=1`
|
||||
)
|
||||
uni.navigateTo({
|
||||
url: `/packageRc/pages/service/serviceDetail?personName=${item.personName}&personId=${item.personId}&jobDemandInfoId=${item.id}&jobWorkType=${item.jobWorkType}&type=3&showTab=1`
|
||||
})
|
||||
} else {
|
||||
uni.navigateTo(
|
||||
`/pages/services/serviceDetail?personName=${item.personName}&personId=${item.personId}&skillTrainingId=${item.id}&personStatus=${item.personStatus}&type=4&showTab=1`
|
||||
)
|
||||
uni.navigateTo({
|
||||
url: `/packageRc/pages/service/serviceDetail?personName=${item.personName}&personId=${item.personId}&skillTrainingId=${item.id}&personStatus=${item.personStatus}&type=4&showTab=1`
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
clickDelete(item) {
|
||||
this.loading = true;
|
||||
|
||||
if (this.queryParams.needsType == 1) {
|
||||
if (this.queryParams.demandType == 1) {
|
||||
delJobService(item.id).then((res) => {
|
||||
this.deleteFinish(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 2) {
|
||||
} else if (this.queryParams.demandType == 2) {
|
||||
delAssistService(item.id).then((res) => {
|
||||
this.deleteFinish(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 3) {
|
||||
} else if (this.queryParams.demandType == 3) {
|
||||
delEntrepreneurshipService(item.id).then((res) => {
|
||||
this.deleteFinish(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 4) {
|
||||
} else if (this.queryParams.demandType == 4) {
|
||||
delTrainService(item.id).then((res) => {
|
||||
this.deleteFinish(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 5) {
|
||||
} else if (this.queryParams.demandType == 5) {
|
||||
delOtherService(item.id).then((res) => {
|
||||
this.deleteFinish(res)
|
||||
});
|
||||
@@ -298,7 +309,7 @@
|
||||
},
|
||||
goNeedsDetail(item) {
|
||||
uni.navigateTo({
|
||||
url: `/pages/needs/needDetail?id=${item.id}&type=${this.queryParams.needsType}&showTab=1`
|
||||
url: `/packageRc/pages/needs/needDetail?id=${item.id}&type=${this.queryParams.demandType}&showTab=1`
|
||||
})
|
||||
},
|
||||
getDictLabel(value, list) {
|
||||
@@ -321,12 +332,12 @@
|
||||
console.log(res.data)
|
||||
})
|
||||
this.checkData = [
|
||||
// {
|
||||
// name: "需求类型",
|
||||
// type: "needsType",
|
||||
// data: [{dictLabel: '求职需求', dictValue: '1'},{dictLabel: '援助需求', dictValue: '2'},{dictLabel: '创业需求', dictValue: '3'},{dictLabel: '培训需求', dictValue: '4'},{dictLabel: '其他需求', dictValue: '5'}],
|
||||
// activeIndex: 0,
|
||||
// },
|
||||
{
|
||||
name: "需求类型",
|
||||
type: "demandType",
|
||||
data: [{dictLabel: '求职需求', dictValue: '1'},{dictLabel: '创业需求', dictValue: '3'},{dictLabel: '培训需求', dictValue: '4'},{dictLabel: '其他需求', dictValue: '5'}],
|
||||
activeIndex: 0,
|
||||
},
|
||||
{
|
||||
name: "需求状态",
|
||||
type: "currentStatus",
|
||||
@@ -375,9 +386,9 @@
|
||||
5: 'other' // 其他需求
|
||||
};
|
||||
// 获取当前的需求类型字符串
|
||||
const demandType = demandTypeMap[this.queryParams.needsType] || 'other';
|
||||
const demandType = demandTypeMap[this.queryParams.demandType] || 'other';
|
||||
uni.navigateTo({url: `/packageRc/pages/service/serviceTraceability?id=${item.id}&demandType=${demandType}`});
|
||||
// 使用映射后的字符串构建URL并导航
|
||||
this.$tab.navigateTo(`/pages/services/serviceTraceability?id=${item.id}&demandType=${demandType}`);
|
||||
},
|
||||
// 触底加载
|
||||
getBottomList() {
|
||||
@@ -403,27 +414,27 @@
|
||||
// 获取列表
|
||||
async getList() {
|
||||
this.loading = true;
|
||||
if (this.queryParams.needsType == 1) {
|
||||
// if (this.queryParams.demandType == 1) {
|
||||
listJobService(this.queryParams).then((res) => {
|
||||
this.gettedData(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 2) {
|
||||
listAssistService(this.queryParams).then((res) => {
|
||||
this.gettedData(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 3) {
|
||||
listEntrepreneurshipService(this.queryParams).then((res) => {
|
||||
this.gettedData(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 4) {
|
||||
listTrainService(this.queryParams).then((res) => {
|
||||
this.gettedData(res)
|
||||
});
|
||||
} else if (this.queryParams.needsType == 5) {
|
||||
listOtherService(this.queryParams).then((res) => {
|
||||
this.gettedData(res)
|
||||
});
|
||||
}
|
||||
// } else if (this.queryParams.demandType == 2) {
|
||||
// listAssistService(this.queryParams).then((res) => {
|
||||
// this.gettedData(res)
|
||||
// });
|
||||
// } else if (this.queryParams.demandType == 3) {
|
||||
// listEntrepreneurshipService(this.queryParams).then((res) => {
|
||||
// this.gettedData(res)
|
||||
// });
|
||||
// } else if (this.queryParams.demandType == 4) {
|
||||
// listTrainService(this.queryParams).then((res) => {
|
||||
// this.gettedData(res)
|
||||
// });
|
||||
// } else if (this.queryParams.demandType == 5) {
|
||||
// listOtherService(this.queryParams).then((res) => {
|
||||
// this.gettedData(res)
|
||||
// });
|
||||
// }
|
||||
},
|
||||
gettedData(res) {
|
||||
if (res.code == 200) {
|
||||
@@ -444,11 +455,19 @@
|
||||
|
||||
// 需求办结
|
||||
requirementHandling(item) {
|
||||
this.$refs.openDeal.open()
|
||||
this.formData = {
|
||||
// this.$refs.openDeal.open()
|
||||
// this.formData = {
|
||||
// id: item.id,
|
||||
// currentStatus: '3'
|
||||
// }
|
||||
console.log(item, 'asdfjoiasiodfjoi')
|
||||
|
||||
this.$refs.dealDone.init({
|
||||
id: item.id,
|
||||
currentStatus: '3'
|
||||
}
|
||||
currentStatus: "3",
|
||||
userId: item.userId,
|
||||
// personStatus: item.personStatus || (this.dict.personStatusList[0] && this.dict.personStatusList[0].dictValue),
|
||||
});
|
||||
},
|
||||
|
||||
// 需求推荐
|
||||
@@ -460,6 +479,7 @@
|
||||
|
||||
// 办结按钮
|
||||
async finishJobRecommend() {
|
||||
uni.showLoading();
|
||||
try {
|
||||
// 检查必填项
|
||||
if (!this.formData.actualSolveDate) {
|
||||
@@ -468,9 +488,7 @@
|
||||
if (!this.formData.solveDesc) {
|
||||
throw new Error('解决说明不能为空');
|
||||
}
|
||||
// 显示全局加载
|
||||
this.$showLoading();
|
||||
// 根据 queryParams.needsType 获取对应的 URL
|
||||
// 根据 queryParams.demandType 获取对应的 URL
|
||||
const obj = {
|
||||
1: '/demand/personJobDemandInfo/JdJobDemandDone',
|
||||
2: '/demand/personAssistDemandInfo/assistDone',
|
||||
@@ -479,7 +497,7 @@
|
||||
5: '/demand/personOtherDemandInfo/otherDemandDone',
|
||||
};
|
||||
|
||||
const url = obj[this.queryParams.needsType];
|
||||
const url = '/manage/personDemand/demandDone';//obj[this.queryParams.demandType];
|
||||
if (!url) {
|
||||
throw new Error('无效的需求类型');
|
||||
}
|
||||
@@ -491,18 +509,17 @@
|
||||
// 检查响应码是否为200
|
||||
if (code === 200) {
|
||||
// 显示成功的提示信息
|
||||
this.$u.toast(msg);
|
||||
uni.showToast({title: msg, icon: 'none'});
|
||||
// this.openDeal = false;
|
||||
this.$refs.openDeal.close()
|
||||
this.search();
|
||||
}
|
||||
} catch (error) {
|
||||
// 处理错误并显示提示信息
|
||||
this.$u.toast('请检查必填项填写');
|
||||
console.error('完成需求时发生错误:', error);
|
||||
uni.showToast({title: '请检查必填项填写', icon: 'none'});
|
||||
} finally {
|
||||
// 确保加载页总是会被隐藏
|
||||
this.$hideLoading();
|
||||
uni.hideLoading();
|
||||
}
|
||||
},
|
||||
// async finishJobRecommend() {
|
||||
@@ -514,21 +531,22 @@
|
||||
// 4: '/demand/personTrainDemandInfo/JdTrainDemandDone',
|
||||
// 5: '/demand/personOtherDemandInfo/otherDemandDone',
|
||||
// }
|
||||
// if (!this.formData.actualSolveDate) return this.$u.toast('解决时间不能为空');
|
||||
// if (!this.formData.solveDesc) return this.$u.toast('解决说明不能为空');
|
||||
// if (!this.formData.actualSolveDate) return uni.showToast({title: '解决时间不能为空', icon: 'none'});
|
||||
// if (!this.formData.solveDesc) return uni.showToast({title: '解决说明不能为空', icon: 'none'});
|
||||
// const {
|
||||
// code,
|
||||
// data,
|
||||
// msg
|
||||
// } = await requirementCompletion(obj[this.queryParams.needsType], this.formData)
|
||||
// } = await requirementCompletion(obj[this.queryParams.demandType], this.formData)
|
||||
// if (code == 200) {
|
||||
// this.$u.toast(msg)
|
||||
// uni.showToast({title: ms, icon: 'none'}g)
|
||||
// this.openDeal = false
|
||||
// this.search()
|
||||
// }
|
||||
// },
|
||||
|
||||
changeFile(e) {
|
||||
console.log(e, 34234234234234)
|
||||
// 清空当前的 fileUrl 数组
|
||||
this.formData.fileUrl = [];
|
||||
// 如果 e 有长度(即用户选择了文件)
|
||||
@@ -539,7 +557,7 @@
|
||||
this.formData.fileUrl.push(url);
|
||||
}
|
||||
}
|
||||
this.formData.fileUrl = this.$arrayToString(this.formData.fileUrl)
|
||||
this.formData.fileUrl = this.formData.fileUrl.join(',');
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -569,11 +587,15 @@
|
||||
|
||||
.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;
|
||||
@@ -616,8 +638,6 @@
|
||||
}
|
||||
|
||||
.top-container {
|
||||
background: #fff;
|
||||
border-radius: 16rpx;
|
||||
padding: 32rpx;
|
||||
|
||||
// margin-bottom: 24rpx;
|
||||
@@ -774,10 +794,54 @@
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.d_flex{
|
||||
|
||||
.df_flex{
|
||||
display: flex;
|
||||
view{
|
||||
flex-grow: 1;
|
||||
text-align: center;
|
||||
color: #4c6efb;
|
||||
}
|
||||
}
|
||||
.df_flex_1{
|
||||
flex: 1;
|
||||
}
|
||||
.df__direction_column {
|
||||
flex-direction: column;
|
||||
}
|
||||
.df_align_center{
|
||||
align-items: center;
|
||||
}
|
||||
.df_justify_center{
|
||||
justify-content: center;
|
||||
}
|
||||
.df_content_between{
|
||||
justify-content: space-between;
|
||||
}
|
||||
.df_shrink_0{
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* 日期选择器样式 */
|
||||
.date-picker-wrapper {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
// .date-picker-wrapper.noValue {
|
||||
// background-color: #f9f9f9;
|
||||
// }
|
||||
|
||||
.date-value {
|
||||
color: #333;
|
||||
width: 100%
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -41,9 +41,9 @@
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
style="position: relative; padding-top: 16px; color: #000;display: flex;align-items: center;justify-content: space-between;">
|
||||
style="position: relative; color: #000;display: flex;align-items: center;justify-content: space-between;">
|
||||
<view v-if="total">
|
||||
<text style="color:font-size:12rpx;margin-left:10rpx;">共{{ total }}条信息</text>
|
||||
<text style="margin-left:10rpx;">共{{ total }}条信息</text>
|
||||
</view>
|
||||
<view style="display: flex;width: 200rpx" class="sort-type">
|
||||
<!-- <view class="sort-type" @click="showSortPicker=true">{{ sortType ? sortType : '排序方式' }}</view> -->
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
<!-- <view class="post_job_btn" @tap.stop="$tab.navigateTo('/pages/community/personEdit?type=add')">
|
||||
</view> -->
|
||||
<uni-popup :show="show" ref="show" @close="close" @open="open">
|
||||
<uni-popup :show="show" ref="show" @close="close" @open="open" type="bottom" background-color="#fff">
|
||||
<view class="dialog_div">
|
||||
<view class="dialog_div_top">
|
||||
<view @click="close">取消</view>
|
||||
@@ -258,7 +258,7 @@
|
||||
</uni-popup>
|
||||
|
||||
<!-- 社区端 - 显示隐藏退出组件 -->
|
||||
<exitPopup />
|
||||
<!-- <exitPopup /> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
|
||||
481
packageRc/pages/policy/policyDetail.vue
Normal file
481
packageRc/pages/policy/policyDetail.vue
Normal file
@@ -0,0 +1,481 @@
|
||||
<template>
|
||||
<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;">
|
||||
<view class="basic-info-content-main" v-if="!loading">
|
||||
<view class="part-item" style="padding-top: 20rpx;">
|
||||
<view style="display: flex" class="top-line">
|
||||
<view
|
||||
class="left"
|
||||
>
|
||||
<image src="/packageRc/static/cyzc.png" />
|
||||
</view>
|
||||
<view class="right">
|
||||
<view class="title-line">{{ policyDetail.zcmc }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="tags">
|
||||
<view class="tag">政策:{{ policyDetail.zcLevel }}</view>
|
||||
</view>
|
||||
<view class="infos">
|
||||
<view class="info">发文单位:{{ policyDetail.sourceUnit }}</view>
|
||||
<view class="info">受理单位:{{ policyDetail.acceptingUnit }}</view>
|
||||
<view class="info">发布时间:{{ policyDetail.publishTime || '--' }}</view>
|
||||
<view class="info">浏览次数:{{ policyDetail.viewNum }}</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-ceontent-list">
|
||||
<!-- 人才政策 -->
|
||||
<view v-if="policyDetail.zcsylx == '1'">
|
||||
<view
|
||||
class="main-ceontent-list-item"
|
||||
v-if="policyDetail.applicableObjects"
|
||||
>
|
||||
<view class="main-ceontent-list-item-title">政策对象</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span
|
||||
v-if="policyDetail.applicableObjects"
|
||||
v-html="policyDetail.applicableObjects"
|
||||
></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
class="main-ceontent-list-item"
|
||||
v-if="policyDetail.policyExplanation"
|
||||
>
|
||||
<view class="main-ceontent-list-item-title">政策说明</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span
|
||||
v-if="policyDetail.policyExplanation"
|
||||
v-html="policyDetail.policyExplanation"
|
||||
></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
class="main-ceontent-list-item"
|
||||
v-if="policyDetail.applyCondition"
|
||||
>
|
||||
<view class="main-ceontent-list-item-title">申报条件</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span
|
||||
v-if="policyDetail.applyCondition"
|
||||
v-html="policyDetail.applyCondition"
|
||||
></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.zczc">
|
||||
<view class="main-ceontent-list-item-title">政策内容</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.zczc" v-html="policyDetail.zczc"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.validity">
|
||||
<view class="main-ceontent-list-item-title">政策申报时间</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
{{ policyDetail.validity || "--" }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.zcsylx == '2'">
|
||||
<view class="main-ceontent-list-item-title">政策文件</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.zcwj" v-html="policyDetail.zcwj"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.zcsylx == '2'">
|
||||
<view class="main-ceontent-list-item-title">补贴标准</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.btbz" v-html="policyDetail.btbz"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.zcsylx == '2'">
|
||||
<view class="main-ceontent-list-item-title">经办渠道</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.jbqd" v-html="policyDetail.jbqd"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.zcsylx == '2'">
|
||||
<view class="main-ceontent-list-item-title">申报条件</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span
|
||||
v-if="policyDetail.applyCondition"
|
||||
v-html="policyDetail.applyCondition"
|
||||
></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 社保政策 -->
|
||||
<view class="main-ceontent-list" v-if="policyDetail.zcsylx == '3'">
|
||||
<view class="main-ceontent-list-item">
|
||||
<view class="main-ceontent-list-item-title">政策内容</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.zczc" v-html="policyDetail.zczc"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="main-ceontent-list">
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.sourceUnit">
|
||||
<view class="main-ceontent-list-item-title">发文单位</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
{{ policyDetail.sourceUnit || "--" }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.publishTime">
|
||||
<view class="main-ceontent-list-item-title">发文时间</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
{{ policyDetail.publishTime || "--" }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.acceptingUnit">
|
||||
<view class="main-ceontent-list-item-title">受理单位</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
{{ policyDetail.acceptingUnit || "--" }}
|
||||
</view>
|
||||
</view>
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.phone">
|
||||
<view class="main-ceontent-list-item-title">咨询电话</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.phone" v-html="policyDetail.phone"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view
|
||||
class="main-ceontent-list"
|
||||
v-if="
|
||||
policyDetail.applyGuide && policyDetail.zcsylx == '2' && policyDetail.sqcl
|
||||
"
|
||||
>
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.applyGuide">
|
||||
<view class="main-ceontent-list-item-title">申报指南</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span
|
||||
v-if="policyDetail.applyGuide"
|
||||
v-html="policyDetail.applyGuide"
|
||||
></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view
|
||||
class="main-ceontent-list-item"
|
||||
v-if="policyDetail.zcsylx == '1' && policyDetail.practicable"
|
||||
>
|
||||
<view class="main-ceontent-list-item-title">申报流程</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
{{ policyDetail.practicable || "--" }}
|
||||
</view>
|
||||
</view> -->
|
||||
<view class="main-ceontent-list-item" v-if="policyDetail.zcsylx == '2'">
|
||||
<view class="main-ceontent-list-item-title">申请材料</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<span v-if="policyDetail.sqcl" v-html="policyDetail.sqcl"></span>
|
||||
<span v-else> -- </span>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="main-ceontent-list" v-if="policyDetail.fileList">
|
||||
<view class="main-ceontent-list-item">
|
||||
<view class="main-ceontent-list-item-title">文件列表</view>
|
||||
<view class="main-ceontent-list-item-content">
|
||||
<el-table
|
||||
ref="fileTable"
|
||||
v-loading="fileTableLoading"
|
||||
:data="fileTableData"
|
||||
highlight-current-row
|
||||
style="width: 100%"
|
||||
header-row-class-name="header_class"
|
||||
border
|
||||
>
|
||||
<el-table-column
|
||||
label="序号"
|
||||
type="index"
|
||||
align="center"
|
||||
width="100"
|
||||
/>
|
||||
<el-table-column
|
||||
prop="fileName"
|
||||
label="文件名称"
|
||||
align="center"
|
||||
show-overflow-tooltip=""
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="downLoadFile(scope.row)"
|
||||
>
|
||||
{{ scope.row.fileName }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="operation"
|
||||
label="操作"
|
||||
align="center"
|
||||
width="200"
|
||||
show-overflow-tooltip
|
||||
>
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click.stop="downLoadFile(scope.row)"
|
||||
>
|
||||
下载
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</template>
|
||||
<script>
|
||||
import { getPolicyDetail } from "@/apiRc/policy";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
policyDetail: {},
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
this.getPolicy(options.id);
|
||||
},
|
||||
onShow() {
|
||||
},
|
||||
methods: {
|
||||
getPolicy(id) {
|
||||
getPolicyDetail({id}).then(res => {
|
||||
this.policyDetail = res.data
|
||||
})
|
||||
},
|
||||
getDictLabel(value, list) {
|
||||
if (list) {
|
||||
let arr = list.filter(ele => ele.dictValue == value)
|
||||
if (arr.length) {
|
||||
return arr[0].dictLabel
|
||||
} else {
|
||||
return '--'
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.page {
|
||||
background-color: #f4f4f4 !important;
|
||||
height: 100vh;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% auto;
|
||||
}
|
||||
|
||||
|
||||
.basic-info-content-main {
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.part-item{
|
||||
background: #fff;
|
||||
border-radius: 16rpx;
|
||||
padding: 40rpx 32rpx;
|
||||
margin-bottom: 32rpx;
|
||||
}
|
||||
|
||||
.top-line {
|
||||
display: flex;
|
||||
margin-bottom: 24rpx;
|
||||
align-items: center;
|
||||
.left {
|
||||
margin-right: 24rpx;
|
||||
width: 86rpx;
|
||||
color: #fff;
|
||||
font-size: 22rpx;
|
||||
height: 86rpx;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.text {
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
.right {
|
||||
width: calc(100% - 110rpx);
|
||||
.title-line {
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #3d3d3d;
|
||||
width: 100%;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
}
|
||||
}
|
||||
.infos{
|
||||
margin-top: 16rpx;
|
||||
font-size: 24rpx;
|
||||
.info{
|
||||
margin-top: 5rpx;
|
||||
color: #3D3D3D;
|
||||
}
|
||||
}
|
||||
.part-title{
|
||||
font-weight: bold;
|
||||
font-size: 28rpx;
|
||||
margin-bottom: 32rpx;
|
||||
}
|
||||
.part-info{
|
||||
font-size: 28rpx;
|
||||
}
|
||||
.part-inline{
|
||||
margin-bottom: 32rpx;
|
||||
display: flex;
|
||||
.part-title{
|
||||
width: 180rpx;
|
||||
text-align: right;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.part-info{
|
||||
margin-left: 20rpx;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
}
|
||||
.notice-list {
|
||||
.notice-item {
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
// box-shadow: 0 0 10px #e4e4e4;
|
||||
}
|
||||
|
||||
.title {
|
||||
font-size: 36rpx;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
margin-bottom: 8rpx;
|
||||
}
|
||||
|
||||
.from-title {
|
||||
font-size: 24rpx;
|
||||
color: #a9b4c3;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.notice-content {
|
||||
min-height: 800rpx;
|
||||
font-size: 24rpx;
|
||||
text-align: justify;
|
||||
padding-top: 20rpx;
|
||||
border-top: 1rpx solid #d8d8d8;
|
||||
margin-top: 14rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.enclosure-list {
|
||||
margin: 30rpx 0;
|
||||
padding: 0 40rpx;
|
||||
|
||||
.enclosure-item {
|
||||
font-size: 24rpx;
|
||||
color: #006cd9;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.main-ceontent-list {
|
||||
width: 100%;
|
||||
border-radius: 4px;
|
||||
min-height: 80rpx;
|
||||
padding: 32rpx;
|
||||
margin-top: 24rpx;
|
||||
background-color: #fff;
|
||||
box-sizing: border-box;
|
||||
|
||||
.main-ceontent-list-top {
|
||||
font-family: Alimama ShuHeiTi;
|
||||
font-size: 28rpx;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.main-ceontent-list-title {
|
||||
font-family: Source Han Sans;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
line-height: normal;
|
||||
text-align: center;
|
||||
font-feature-settings: "kern" on;
|
||||
color: #3d3d3d;
|
||||
margin-top: 24rpx;
|
||||
}
|
||||
}
|
||||
|
||||
.main-ceontent-list-item {
|
||||
margin-bottom: 24rpx;
|
||||
|
||||
.main-ceontent-list-item-title {
|
||||
font-family: Source Han Sans;
|
||||
font-size: 28rpx;
|
||||
font-weight: bold;
|
||||
line-height: 40rpx;
|
||||
letter-spacing: 0.04em;
|
||||
margin-bottom: 16rpx;
|
||||
|
||||
font-variation-settings: "opsz" auto;
|
||||
font-feature-settings: "kern" on;
|
||||
color: #055ed9;
|
||||
}
|
||||
|
||||
.main-ceontent-list-item-content {
|
||||
flex-direction: column;
|
||||
box-sizing: border-box;
|
||||
padding: 10px;
|
||||
gap: 10px;
|
||||
font-family: Source Han Sans;
|
||||
font-size: 28rpx;
|
||||
font-weight: normal;
|
||||
line-height: 40rpx;
|
||||
letter-spacing: 0.04em;
|
||||
|
||||
font-variation-settings: "opsz" auto;
|
||||
font-feature-settings: "kern" on;
|
||||
color: #000000;
|
||||
background: linear-gradient(
|
||||
270deg,
|
||||
rgba(222, 233, 245, 0.32) 0%,
|
||||
#dee9f5 100%
|
||||
);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
539
packageRc/pages/policy/policyList.vue
Normal file
539
packageRc/pages/policy/policyList.vue
Normal file
@@ -0,0 +1,539 @@
|
||||
<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 class="inner"
|
||||
style="width: calc(100% + 64rpx);margin-left: -32rpx;height: 122rpx;position: relative;z-index: 2;">
|
||||
<PopupList :checkData="checkData" @searchCheck="search" ref="PopupList" @popupSearch="popupSearch" />
|
||||
</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 - 202rpx);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="sign">推荐</view>
|
||||
<view class="title">
|
||||
<image src="../../../packageRc/static/zcLeft.png"/>
|
||||
{{item.zcmc}}</view>
|
||||
<view class="infos">
|
||||
<view v-if="item.zclx">{{item.zclx}}</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.createTime}}</view>
|
||||
<view>浏览数<text style="color: #6AA7E8">{{item.viewNum}}</text></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 { getPolicyList } from "../../../apiRc/policy";
|
||||
export default {
|
||||
components: {
|
||||
PopupList,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
checkData: [],
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
},
|
||||
total: 0,
|
||||
showMorePage: true,
|
||||
tableData: [],
|
||||
loading: false,
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.getCheckData()
|
||||
},
|
||||
onShow() {
|
||||
this.search();
|
||||
},
|
||||
methods: {
|
||||
goPolicyDetail(item) {
|
||||
uni.navigateTo({
|
||||
url: `/packageRc/pages/policy/policyDetail?id=${item.id}`
|
||||
})
|
||||
},
|
||||
getDictLabel(value, list) {
|
||||
if (list) {
|
||||
let arr = list.filter(ele => ele.dictValue == value)
|
||||
if (arr.length) {
|
||||
return arr[0].dictLabel
|
||||
} else {
|
||||
return '--'
|
||||
}
|
||||
}
|
||||
},
|
||||
async getCheckData() {
|
||||
let workExperienceYears
|
||||
await this.$getDict('qcjy_gznx').then(res => {
|
||||
workExperienceYears = res.data
|
||||
})
|
||||
await this.$getDict('qcjy_xqlc').then(res => {
|
||||
this.currentStatusList = res.data;
|
||||
console.log(res.data)
|
||||
})
|
||||
this.checkData = [
|
||||
{
|
||||
name: "需求类型",
|
||||
type: "demandType",
|
||||
data: [{dictLabel: '求职需求', dictValue: '1'},{dictLabel: '创业需求', dictValue: '3'},{dictLabel: '培训需求', dictValue: '4'},{dictLabel: '其他需求', dictValue: '5'}],
|
||||
activeIndex: 0,
|
||||
},
|
||||
{
|
||||
name: "需求状态",
|
||||
type: "currentStatus",
|
||||
data: [{
|
||||
dictLabel: '全部',
|
||||
dictValue: ''
|
||||
}].concat(this.currentStatusList),
|
||||
activeIndex: 0,
|
||||
},
|
||||
// {
|
||||
// name: "工作经验",
|
||||
// type: "workExperienceYears",
|
||||
// data: [{dictLabel: '全部', dictValue: ''}].concat(workExperienceYears),
|
||||
// activeIndex: 0,
|
||||
// },
|
||||
|
||||
];
|
||||
},
|
||||
popupSearch(queryParams) {
|
||||
queryParams.forEach((item, index) => {
|
||||
if (item.data[item.activeIndex].dictLabel == "全部") {
|
||||
this.queryParams[item.type] = "";
|
||||
} else {
|
||||
this.queryParams[item.type] = item.data[item.activeIndex].dictValue;
|
||||
}
|
||||
});
|
||||
this.search()
|
||||
},
|
||||
search() {
|
||||
this.showMorePage = true;
|
||||
this.queryParams.pageNum = 1;
|
||||
this.queryParams.pageSize = 10;
|
||||
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",
|
||||
});
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</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;
|
||||
}
|
||||
}
|
||||
.df_flex_1{
|
||||
flex: 1;
|
||||
}
|
||||
.df__direction_column {
|
||||
flex-direction: column;
|
||||
}
|
||||
.df_align_center{
|
||||
align-items: center;
|
||||
}
|
||||
.df_justify_center{
|
||||
justify-content: center;
|
||||
}
|
||||
.df_content_between{
|
||||
justify-content: space-between;
|
||||
}
|
||||
.df_shrink_0{
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* 日期选择器样式 */
|
||||
.date-picker-wrapper {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
padding: 0 24rpx;
|
||||
height: 64rpx;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 4px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
// .date-picker-wrapper.noValue {
|
||||
// background-color: #f9f9f9;
|
||||
// }
|
||||
|
||||
.date-value {
|
||||
color: #333;
|
||||
width: 100%
|
||||
}
|
||||
|
||||
.policy-list{
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
color: #333333;
|
||||
border-radius: 24rpx;
|
||||
background: #FFFFFF;
|
||||
padding: 32rpx;
|
||||
margin-bottom: 24rpx;
|
||||
box-sizing: border-box;
|
||||
position: relative;
|
||||
.sign{
|
||||
position: absolute;
|
||||
font-size: 24rpx;
|
||||
right: 0;
|
||||
top: 0;
|
||||
padding: 4rpx 14rpx;
|
||||
border: 1rpx solid #EC4827;
|
||||
background: rgba(227, 79, 49, 0.09);
|
||||
border-top-right-radius: 24rpx;
|
||||
border-bottom-left-radius: 24rpx;
|
||||
color: #EC4827;
|
||||
}
|
||||
.top-line{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 24rpx;
|
||||
color: #A2A2A2;
|
||||
margin-bottom: 16rpx;
|
||||
.salary{
|
||||
font-size: 32rpx;
|
||||
color: #4C6EFB;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
.title{
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
color: #282828;
|
||||
margin-bottom: 16rpx;
|
||||
display: flex;
|
||||
image{
|
||||
width: 46rpx;
|
||||
height: 46rpx;
|
||||
margin-right: 11rpx;
|
||||
}
|
||||
}
|
||||
.infos{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
font-size: 24rpx;
|
||||
margin-bottom: 16rpx;
|
||||
line-height: 42rpx;
|
||||
view{
|
||||
padding: 0 16rpx;
|
||||
margin-right: 10rpx;
|
||||
background: #F2F2F2;
|
||||
}
|
||||
}
|
||||
.bottom-line{
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 24rpx;
|
||||
color: #A2A2A2;
|
||||
margin-top: 12rpx;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
285
packageRc/pages/service/serviceTraceability.vue
Normal file
285
packageRc/pages/service/serviceTraceability.vue
Normal file
@@ -0,0 +1,285 @@
|
||||
<template>
|
||||
<view class="job-list" style="background-image: url('../../../packageRc/static/pageBg.png');position:relative;">
|
||||
<view class="job-list__content">
|
||||
|
||||
<scroll-view class="job-list__scroll" scroll-y="true">
|
||||
<view class="job-list__item" v-for="job in perlist" :key="job.id" @tap="toDetails(job)">
|
||||
<view class="job-list__item-detail">
|
||||
<text>经办人:</text>
|
||||
<text>{{ job.agentUserName || '-' }}</text>
|
||||
</view>
|
||||
<view class="job-list__item-detail">
|
||||
<text>经办时间:</text>
|
||||
<text>{{ job.practicalSolutionTime }}</text>
|
||||
</view>
|
||||
<view class="job-list__item-detail">
|
||||
<text>经办部门:</text>
|
||||
<text>{{ job.agentDeptName }}</text>
|
||||
</view>
|
||||
<view class="job-list__item-detail">
|
||||
<text>说明:</text>
|
||||
<text>{{ job.blqksm || '--'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import {
|
||||
serviceTraceability
|
||||
} from '@/apiRc/company/index.js';
|
||||
|
||||
export default {
|
||||
name: 'personnelList',
|
||||
computed: {
|
||||
filterColor() {
|
||||
return (status) => {
|
||||
const item = this.alertTibs.find(item => item.value === status);
|
||||
return item ? item.color : '';
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
openDeal: false,
|
||||
showTime: false,
|
||||
validType: [{
|
||||
label: '是',
|
||||
value: '1'
|
||||
},
|
||||
{
|
||||
label: '否',
|
||||
value: '0'
|
||||
},
|
||||
],
|
||||
alertTibs: [{
|
||||
value: '1',
|
||||
label: '已超期',
|
||||
color: '#ea362b'
|
||||
},
|
||||
{
|
||||
value: '2',
|
||||
label: '七天之内',
|
||||
color: '#f1a945'
|
||||
},
|
||||
{
|
||||
value: '3',
|
||||
label: '大于七天',
|
||||
color: '#377e27'
|
||||
},
|
||||
{
|
||||
value: '0',
|
||||
label: '已完成服务',
|
||||
color: '#808080'
|
||||
}
|
||||
|
||||
],
|
||||
total: 0,
|
||||
// 去除加载更多相关的状态和方法
|
||||
// status: 'more',
|
||||
// loadMoreJobs: function() {},
|
||||
hopeSolveDate: '',
|
||||
searchKeyword: '',
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
id: undefined,
|
||||
demandType: '',
|
||||
},
|
||||
perlist: [],
|
||||
loading: false,
|
||||
|
||||
formData: {},
|
||||
|
||||
};
|
||||
},
|
||||
onLoad({
|
||||
id,
|
||||
demandType
|
||||
}) {
|
||||
this.queryParams.id = id
|
||||
this.queryParams.demandType = demandType
|
||||
this.getList(true);
|
||||
},
|
||||
methods: {
|
||||
// 获取列表
|
||||
async getList(reset = false) {
|
||||
if (this.loading) return;
|
||||
this.loading = true;
|
||||
|
||||
// 重置数据
|
||||
if (reset) {
|
||||
this.perlist = [];
|
||||
this.queryParams.pageNum = 1;
|
||||
}
|
||||
const {
|
||||
code,
|
||||
data,
|
||||
total
|
||||
} = await serviceTraceability(this.queryParams)
|
||||
if (code === 200) {
|
||||
this.perlist = data; // 直接赋值获取到的数据,不再进行拼接
|
||||
this.total = total;
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
// 搜索功能处理
|
||||
handleSearch() {
|
||||
this.getList(true);
|
||||
},
|
||||
|
||||
// 根据 value 查找 label
|
||||
getLabelByValue(list, value) {
|
||||
const found = list.find(item => item.value === value);
|
||||
return found ? found.label : '-';
|
||||
},
|
||||
getDictLabel(list, dictValue) {
|
||||
let arr = list.filter((ele) => ele.dictValue == dictValue);
|
||||
if (arr.length) {
|
||||
return arr[0].dictLabel;
|
||||
} else {
|
||||
return "--";
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
toDetails({
|
||||
businessType,
|
||||
id
|
||||
}) {
|
||||
// 定义一个映射对象,将 businessType 映射到相应的页面路径和参数
|
||||
const navigationMap = {
|
||||
interview: {
|
||||
path: '/pages/services/serviceDetail',
|
||||
params: `?id=${id}&type=1&showTab=1`
|
||||
},
|
||||
assist: {
|
||||
path: '/pages/needs/needDetail',
|
||||
params: `?id=${id}&type=2&showTab=1`
|
||||
},
|
||||
entrepreneurship: {
|
||||
path: '/pages/needs/needDetail',
|
||||
params: `?id=${id}&type=3&showTab=1`
|
||||
},
|
||||
jobDemand: {
|
||||
path: '/pages/needs/needDetail',
|
||||
params: `?id=${id}&type=1&showTab=1&showInfo=1`
|
||||
},
|
||||
jobRecommendation: {
|
||||
path: '/pages/services/serviceDetail',
|
||||
params: `?id=${id}&type=3&showTab=1&showInfo=1`
|
||||
},
|
||||
otherNeeds: {
|
||||
path: '/pages/needs/needDetail',
|
||||
params: `?id=${id}&type=5&showTab=1`
|
||||
},
|
||||
policy: {
|
||||
path: '/pages/services/serviceDetail',
|
||||
params: `?id=${id}&type=2&showTab=1`
|
||||
},
|
||||
trainingNeeds: {
|
||||
path: '/pages/needs/needDetail',
|
||||
params: `?id=${id}&type=4&showTab=1`
|
||||
},
|
||||
trainingService: {
|
||||
path: '/pages/needs/needDetail',
|
||||
params: `?id=${id}&type=4&showTab=1`
|
||||
}
|
||||
};
|
||||
|
||||
// // 检查 businessType 是否存在于映射中
|
||||
// if (businessType in navigationMap) {
|
||||
// const {
|
||||
// path,
|
||||
// params
|
||||
// } = navigationMap[businessType];
|
||||
// this.$tab.navigateTo(`${path}${params}`);
|
||||
// } else {
|
||||
// // 如果 businessType 不匹配任何已知的类型,可以这里处理错误或忽略
|
||||
// console.warn(`Unknown businessType: ${businessType}`);
|
||||
// }
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.job-list {
|
||||
|
||||
background-color: #f4f4f4 !important;
|
||||
height: 100vh;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 100% auto;
|
||||
padding: 32rpx;
|
||||
|
||||
&__content {
|
||||
position: relative;
|
||||
padding: 32rpx;
|
||||
z-index: 10;
|
||||
background-color: #fff;
|
||||
border-radius: 32rpx 32rpx 0 0;
|
||||
border: 1px solid #fff;
|
||||
width: calc(100% - 64rpx);
|
||||
}
|
||||
|
||||
&__scroll {
|
||||
margin-top: 10rpx;
|
||||
height: calc(100vh - 200rpx);
|
||||
}
|
||||
|
||||
&__item {
|
||||
position: relative;
|
||||
padding: 32rpx;
|
||||
margin-bottom: 32rpx;
|
||||
background-color: #d0dcee;
|
||||
border-radius: 16rpx;
|
||||
font-size: 28rpx;
|
||||
}
|
||||
|
||||
&__item-detail {
|
||||
margin-top: 20rpx;
|
||||
color: #8e8e8e;
|
||||
|
||||
&>text:nth-child(1) {
|
||||
width: 200rpx;
|
||||
}
|
||||
|
||||
view,
|
||||
text:last-child {
|
||||
margin-left: 10rpx;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.items {
|
||||
margin-top: 30rpx;
|
||||
}
|
||||
|
||||
.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;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
BIN
packageRc/static/cyzc.png
Normal file
BIN
packageRc/static/cyzc.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.3 KiB |
44
pages.json
44
pages.json
@@ -367,6 +367,13 @@
|
||||
},
|
||||
{
|
||||
"path": "train/mockExam/examList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "考试列表",
|
||||
"navigationBarTitleTextSize": "30rpx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "train/mockExam/startExam",
|
||||
"style": {
|
||||
"navigationBarTitleText": "模拟考试",
|
||||
"navigationBarTitleTextSize": "30rpx"
|
||||
@@ -378,6 +385,20 @@
|
||||
"navigationBarTitleText": "查看成绩",
|
||||
"navigationBarTitleTextSize": "30rpx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "priority/helpFilter",
|
||||
"style": {
|
||||
"navigationBarTitleText": "筛选和帮扶",
|
||||
"navigationBarTitleTextSize": "30rpx"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "priority/helpFollow",
|
||||
"style": {
|
||||
"navigationBarTitleText": "跟进",
|
||||
"navigationBarTitleTextSize": "30rpx"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -393,7 +414,13 @@
|
||||
{
|
||||
"path": "pages/personalList/personalList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "添加帮扶"
|
||||
"navigationBarTitleText": "毕业生追踪"
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "pages/jobList/jobList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "岗位列表"
|
||||
}
|
||||
},
|
||||
{
|
||||
@@ -423,6 +450,11 @@
|
||||
"style": {
|
||||
"navigationBarTitleText": "服务"
|
||||
}
|
||||
} , {
|
||||
"path": "pages/service/serviceTraceability",
|
||||
"style": {
|
||||
"navigationBarTitleText": "服务追溯"
|
||||
}
|
||||
} , {
|
||||
"path": "pages/needs/needDetail",
|
||||
"style": {
|
||||
@@ -443,6 +475,16 @@
|
||||
"style": {
|
||||
"navigationBarTitleText": "需求"
|
||||
}
|
||||
} , {
|
||||
"path": "pages/policy/policyList",
|
||||
"style": {
|
||||
"navigationBarTitleText": "政策专区"
|
||||
}
|
||||
} , {
|
||||
"path": "pages/policy/policyDetail",
|
||||
"style": {
|
||||
"navigationBarTitleText": "政策详解"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -130,6 +130,12 @@
|
||||
</view>
|
||||
<view class="service-title">测试页面</view>
|
||||
</view>
|
||||
<view class="service-item press-button" @click="navToPage">
|
||||
<view class="service-icon service-icon-10">
|
||||
<uni-icons type="gear-filled" size="32" color="#FFFFFF"></uni-icons>
|
||||
</view>
|
||||
<view class="service-title">帮扶</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@@ -742,6 +748,9 @@ const handleLiveClick = () => {
|
||||
const navToTestPage = () => {
|
||||
navTo('/pages/test/homepage-test');
|
||||
};
|
||||
const navToPage = () =>{
|
||||
navTo('/packageB/priority/helpFilter');
|
||||
}
|
||||
|
||||
async function loadData() {
|
||||
try {
|
||||
@@ -1038,14 +1047,14 @@ import { getToken } from '@/utilsRc/auth.js';
|
||||
// 跳转到高校毕业页面
|
||||
function goRc(){
|
||||
if (checkLogin()) {
|
||||
navTo('/packageRc/pages/index/index');
|
||||
let token = getToken();
|
||||
if( token != null ){
|
||||
if( token != null && token != '' && token != undefined ){
|
||||
if(storeRc.state.user.type == 'person'){
|
||||
navTo('/packageRc/pages/index/index');
|
||||
}else{
|
||||
navTo('/packageRc/pages/daiban/daiban');
|
||||
}
|
||||
console.log(storeRc.state.user.roles, storeRc.state.user.type, 'state')
|
||||
}else{
|
||||
let userInfo = uni.getStorageSync('userInfo')
|
||||
storeRc.dispatch('LoginByUserInfo', userInfo).then(res => {
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
## 2.0.10(2024-06-07)
|
||||
- 优化 uni-app x 中,size 属性的类型
|
||||
## 2.0.12(2025-08-26)
|
||||
- 优化 uni-app x 下 size 类型问题
|
||||
## 2.0.11(2025-08-18)
|
||||
- 修复 图标点击事件返回
|
||||
## 2.0.9(2024-01-12)
|
||||
fix: 修复图标大小默认值错误的问题
|
||||
## 2.0.8(2023-12-14)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* Icons 图标
|
||||
* @description 用于展示 icon 图标
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=28
|
||||
* @property {Number,String} size 图标大小
|
||||
* @property {Number} size 图标大小
|
||||
* @property {String} type 图标图案,参考示例
|
||||
* @property {String} color 图标颜色
|
||||
* @property {String} customPrefix 自定义图标
|
||||
|
||||
@@ -85,8 +85,8 @@
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
_onClick() {
|
||||
this.$emit('click')
|
||||
_onClick(e) {
|
||||
this.$emit('click', e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"id": "uni-icons",
|
||||
"displayName": "uni-icons 图标",
|
||||
"version": "2.0.10",
|
||||
"version": "2.0.12",
|
||||
"description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
|
||||
"keywords": [
|
||||
"uni-ui",
|
||||
@@ -11,7 +11,9 @@
|
||||
],
|
||||
"repository": "https://github.com/dcloudio/uni-ui",
|
||||
"engines": {
|
||||
"HBuilderX": "^3.2.14"
|
||||
"HBuilderX": "^3.2.14",
|
||||
"uni-app": "^4.08",
|
||||
"uni-app-x": "^4.61"
|
||||
},
|
||||
"directories": {
|
||||
"example": "../../temps/example_temps"
|
||||
@@ -34,54 +36,74 @@
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
|
||||
"type": "component-vue"
|
||||
"type": "component-vue",
|
||||
"darkmode": "x",
|
||||
"i18n": "x",
|
||||
"widescreen": "x"
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": ["uni-scss"],
|
||||
"dependencies": [
|
||||
"uni-scss"
|
||||
],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y",
|
||||
"alipay": "n"
|
||||
"tcb": "x",
|
||||
"aliyun": "x",
|
||||
"alipay": "x"
|
||||
},
|
||||
"client": {
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "y",
|
||||
"app-uvue": "y"
|
||||
"uni-app": {
|
||||
"vue": {
|
||||
"vue2": "√",
|
||||
"vue3": "√"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
"web": {
|
||||
"safari": "√",
|
||||
"chrome": "√"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "y",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "y"
|
||||
"app": {
|
||||
"vue": "√",
|
||||
"nvue": "-",
|
||||
"android": {
|
||||
"extVersion": "",
|
||||
"minVersion": "29"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "y",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "y",
|
||||
"QQ": "y",
|
||||
"钉钉": "y",
|
||||
"快手": "y",
|
||||
"飞书": "y",
|
||||
"京东": "y"
|
||||
"ios": "√",
|
||||
"harmony": "√"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "y",
|
||||
"联盟": "y"
|
||||
"mp": {
|
||||
"weixin": "√",
|
||||
"alipay": "√",
|
||||
"toutiao": "√",
|
||||
"baidu": "√",
|
||||
"kuaishou": "-",
|
||||
"jd": "-",
|
||||
"harmony": "-",
|
||||
"qq": "√",
|
||||
"lark": "-"
|
||||
},
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
"quickapp": {
|
||||
"huawei": "√",
|
||||
"union": "√"
|
||||
}
|
||||
},
|
||||
"uni-app-x": {
|
||||
"web": {
|
||||
"safari": "√",
|
||||
"chrome": "√"
|
||||
},
|
||||
"app": {
|
||||
"android": {
|
||||
"extVersion": "",
|
||||
"minVersion": "29"
|
||||
},
|
||||
"ios": "√",
|
||||
"harmony": "√"
|
||||
},
|
||||
"mp": {
|
||||
"weixin": "√"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
18
uni_modules/uni-steps/changelog.md
Normal file
18
uni_modules/uni-steps/changelog.md
Normal file
@@ -0,0 +1,18 @@
|
||||
## 1.1.2(2024-03-28)
|
||||
- 修复 uni-steps为竖排列时,文本长度过长引起点错乱的bug
|
||||
## 1.1.1(2021-11-22)
|
||||
- 修复 vue3中某些scss变量无法找到的问题
|
||||
## 1.1.0(2021-11-19)
|
||||
- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
|
||||
- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-steps](https://uniapp.dcloud.io/component/uniui/uni-steps)
|
||||
## 1.0.8(2021-05-12)
|
||||
- 新增 项目示例地址
|
||||
## 1.0.7(2021-05-06)
|
||||
- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug
|
||||
## 1.0.6(2021-04-21)
|
||||
- 优化 添加依赖 uni-icons, 导入后自动下载依赖
|
||||
## 1.0.5(2021-02-05)
|
||||
- 优化 组件引用关系,通过uni_modules引用组件
|
||||
|
||||
## 1.0.4(2021-02-05)
|
||||
- 调整为uni_modules目录规范
|
||||
280
uni_modules/uni-steps/components/uni-steps/uni-steps.vue
Normal file
280
uni_modules/uni-steps/components/uni-steps/uni-steps.vue
Normal file
@@ -0,0 +1,280 @@
|
||||
<template>
|
||||
<view class="uni-steps">
|
||||
<view :class="[direction==='column'?'uni-steps__column':'uni-steps__row']">
|
||||
<view :class="[direction==='column'?'uni-steps__column-text-container':'uni-steps__row-text-container']">
|
||||
<view v-for="(item,index) in options" :key="index"
|
||||
:class="[direction==='column'?'uni-steps__column-text':'uni-steps__row-text']">
|
||||
<text :style="{color:index === active?activeColor:deactiveColor}"
|
||||
:class="[direction==='column'?'uni-steps__column-title':'uni-steps__row-title']">{{item.title}}</text>
|
||||
<text :style="{color: deactiveColor}"
|
||||
:class="[direction==='column'?'uni-steps__column-desc':'uni-steps__row-desc']">{{item.desc}}</text>
|
||||
</view>
|
||||
</view>
|
||||
<view :class="[direction==='column'?'uni-steps__column-container':'uni-steps__row-container']">
|
||||
<view :class="[direction==='column'?'uni-steps__column-line-item':'uni-steps__row-line-item']"
|
||||
v-for="(item,index) in options" :key="index" :style="{height: direction === 'column'?heightArr[index]+'px':'14px'}">
|
||||
<view
|
||||
:class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--before':'uni-steps__row-line--before']"
|
||||
:style="{backgroundColor:index<=active&&index!==0?activeColor:index===0?'transparent':deactiveColor}">
|
||||
</view>
|
||||
<view :class="[direction==='column'?'uni-steps__column-check':'uni-steps__row-check']"
|
||||
v-if="index === active">
|
||||
<uni-icons :color="activeColor" :type="activeIcon" size="14" />
|
||||
</view>
|
||||
<view v-else :class="[direction==='column'?'uni-steps__column-circle':'uni-steps__row-circle']"
|
||||
:style="{backgroundColor:index<active?activeColor:deactiveColor}" />
|
||||
<view
|
||||
:class="[direction==='column'?'uni-steps__column-line':'uni-steps__row-line',direction==='column'?'uni-steps__column-line--after':'uni-steps__row-line--after']"
|
||||
:style="{backgroundColor:index<active&&index!==options.length-1?activeColor:index===options.length-1?'transparent':deactiveColor}" />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
/**
|
||||
* Steps 步骤条
|
||||
* @description 评分组件
|
||||
* @tutorial https://ext.dcloud.net.cn/plugin?id=34
|
||||
* @property {Number} active 当前步骤
|
||||
* @property {String} direction = [row|column] 当前步骤
|
||||
* @value row 横向
|
||||
* @value column 纵向
|
||||
* @property {String} activeColor 选中状态的颜色
|
||||
* @property {Array} options 数据源,格式为:[{title:'xxx',desc:'xxx'},{title:'xxx',desc:'xxx'}]
|
||||
*/
|
||||
|
||||
export default {
|
||||
name: 'UniSteps',
|
||||
props: {
|
||||
direction: {
|
||||
// 排列方向 row column
|
||||
type: String,
|
||||
default: 'row'
|
||||
},
|
||||
activeColor: {
|
||||
// 激活状态颜色
|
||||
type: String,
|
||||
default: '#2979FF'
|
||||
},
|
||||
deactiveColor: {
|
||||
// 未激活状态颜色
|
||||
type: String,
|
||||
default: '#B7BDC6'
|
||||
},
|
||||
active: {
|
||||
// 当前步骤
|
||||
type: Number,
|
||||
default: 0
|
||||
},
|
||||
activeIcon: {
|
||||
// 当前步骤
|
||||
type: String,
|
||||
default: 'checkbox-filled'
|
||||
},
|
||||
options: {
|
||||
type: Array,
|
||||
default () {
|
||||
return []
|
||||
}
|
||||
} // 数据
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
heightArr: [],
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
//根据内容设置步骤条的长度
|
||||
if (this.direction === 'column') {
|
||||
let that = this;
|
||||
//只能用类选择器,用id选择器所获取的元素信息不准确
|
||||
uni.createSelectorQuery().in(this).selectAll('.uni-steps__column-text').boundingClientRect(data => {
|
||||
that.heightArr = data.map(item => item.height + 1);
|
||||
}).exec()
|
||||
}
|
||||
},
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
$uni-primary: #2979ff !default;
|
||||
$uni-border-color: #EDEDED;
|
||||
|
||||
.uni-steps {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
width: 100%;
|
||||
/* #endif */
|
||||
/* #ifdef APP-NVUE */
|
||||
flex: 1;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.uni-steps__row {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.uni-steps__column {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row-reverse;
|
||||
}
|
||||
|
||||
.uni-steps__row-text-container {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
align-items: flex-end;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.uni-steps__column-text-container {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.uni-steps__row-text {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: inline-flex;
|
||||
/* #endif */
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.uni-steps__column-text {
|
||||
padding: 6px 0px;
|
||||
border-bottom-style: solid;
|
||||
border-bottom-width: 1px;
|
||||
border-bottom-color: $uni-border-color;
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.uni-steps__row-title {
|
||||
font-size: 14px;
|
||||
line-height: 16px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.uni-steps__column-title {
|
||||
font-size: 14px;
|
||||
text-align: left;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.uni-steps__row-desc {
|
||||
font-size: 12px;
|
||||
line-height: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.uni-steps__column-desc {
|
||||
font-size: 12px;
|
||||
text-align: left;
|
||||
line-height: 18px;
|
||||
}
|
||||
|
||||
.uni-steps__row-container {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.uni-steps__column-container {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: inline-flex;
|
||||
/* #endif */
|
||||
width: 30px;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.uni-steps__row-line-item {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: inline-flex;
|
||||
/* #endif */
|
||||
flex-direction: row;
|
||||
flex: 1;
|
||||
height: 14px;
|
||||
line-height: 14px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.uni-steps__column-line-item {
|
||||
/* #ifndef APP-NVUE */
|
||||
display: flex;
|
||||
/* #endif */
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.uni-steps__row-line {
|
||||
flex: 1;
|
||||
height: 1px;
|
||||
background-color: #B7BDC6;
|
||||
}
|
||||
|
||||
.uni-steps__column-line {
|
||||
width: 1px;
|
||||
background-color: #B7BDC6;
|
||||
}
|
||||
|
||||
.uni-steps__row-line--after {
|
||||
transform: translateX(1px);
|
||||
}
|
||||
|
||||
.uni-steps__column-line--after {
|
||||
flex: 1;
|
||||
transform: translate(0px, 1px);
|
||||
}
|
||||
|
||||
.uni-steps__row-line--before {
|
||||
transform: translateX(-1px);
|
||||
}
|
||||
|
||||
.uni-steps__column-line--before {
|
||||
height: 6px;
|
||||
transform: translate(0px, -13px);
|
||||
}
|
||||
|
||||
.uni-steps__row-circle {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
border-radius: 50%;
|
||||
background-color: #B7BDC6;
|
||||
margin: 0px 3px;
|
||||
}
|
||||
|
||||
.uni-steps__column-circle {
|
||||
width: 5px;
|
||||
height: 5px;
|
||||
border-radius: 50%;
|
||||
background-color: #B7BDC6;
|
||||
margin: 4px 0px 5px 0px;
|
||||
}
|
||||
|
||||
.uni-steps__row-check {
|
||||
margin: 0px 6px;
|
||||
}
|
||||
|
||||
.uni-steps__column-check {
|
||||
height: 14px;
|
||||
line-height: 14px;
|
||||
margin: 2px 0px;
|
||||
}
|
||||
</style>
|
||||
87
uni_modules/uni-steps/package.json
Normal file
87
uni_modules/uni-steps/package.json
Normal file
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"id": "uni-steps",
|
||||
"displayName": "uni-steps 步骤条",
|
||||
"version": "1.1.2",
|
||||
"description": "步骤条组件,提供横向和纵向两种布局格式。",
|
||||
"keywords": [
|
||||
"uni-ui",
|
||||
"uniui",
|
||||
"步骤条",
|
||||
"时间轴"
|
||||
],
|
||||
"repository": "https://github.com/dcloudio/uni-ui",
|
||||
"engines": {
|
||||
"HBuilderX": ""
|
||||
},
|
||||
"directories": {
|
||||
"example": "../../temps/example_temps"
|
||||
},
|
||||
"dcloudext": {
|
||||
"sale": {
|
||||
"regular": {
|
||||
"price": "0.00"
|
||||
},
|
||||
"sourcecode": {
|
||||
"price": "0.00"
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"qq": ""
|
||||
},
|
||||
"declaration": {
|
||||
"ads": "无",
|
||||
"data": "无",
|
||||
"permissions": "无"
|
||||
},
|
||||
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
|
||||
"type": "component-vue"
|
||||
},
|
||||
"uni_modules": {
|
||||
"dependencies": [
|
||||
"uni-scss",
|
||||
"uni-icons"
|
||||
],
|
||||
"encrypt": [],
|
||||
"platforms": {
|
||||
"cloud": {
|
||||
"tcb": "y",
|
||||
"aliyun": "y",
|
||||
"alipay": "n"
|
||||
},
|
||||
"client": {
|
||||
"App": {
|
||||
"app-vue": "y",
|
||||
"app-nvue": "y"
|
||||
},
|
||||
"H5-mobile": {
|
||||
"Safari": "y",
|
||||
"Android Browser": "y",
|
||||
"微信浏览器(Android)": "y",
|
||||
"QQ浏览器(Android)": "y"
|
||||
},
|
||||
"H5-pc": {
|
||||
"Chrome": "y",
|
||||
"IE": "y",
|
||||
"Edge": "y",
|
||||
"Firefox": "y",
|
||||
"Safari": "y"
|
||||
},
|
||||
"小程序": {
|
||||
"微信": "y",
|
||||
"阿里": "y",
|
||||
"百度": "y",
|
||||
"字节跳动": "y",
|
||||
"QQ": "y"
|
||||
},
|
||||
"快应用": {
|
||||
"华为": "u",
|
||||
"联盟": "u"
|
||||
},
|
||||
"Vue": {
|
||||
"vue2": "y",
|
||||
"vue3": "y"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
13
uni_modules/uni-steps/readme.md
Normal file
13
uni_modules/uni-steps/readme.md
Normal file
@@ -0,0 +1,13 @@
|
||||
|
||||
|
||||
## Steps 步骤条
|
||||
> **组件名:uni-steps**
|
||||
> 代码块: `uSteps`
|
||||
|
||||
|
||||
步骤条,常用于显示进度
|
||||
|
||||
### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps)
|
||||
#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839
|
||||
|
||||
|
||||
34
unpackage/dist/dev/mp-weixin/project.config.json
vendored
34
unpackage/dist/dev/mp-weixin/project.config.json
vendored
@@ -1,8 +1,7 @@
|
||||
{
|
||||
"description": "项目配置文件。",
|
||||
"packOptions": {
|
||||
"ignore": [],
|
||||
"include": []
|
||||
"ignore": []
|
||||
},
|
||||
"setting": {
|
||||
"urlCheck": false,
|
||||
@@ -10,21 +9,28 @@
|
||||
"postcss": true,
|
||||
"minified": true,
|
||||
"newFeature": true,
|
||||
"bigPackageSizeSupport": true,
|
||||
"babelSetting": {
|
||||
"ignore": [],
|
||||
"disablePlugins": [],
|
||||
"outputPath": ""
|
||||
},
|
||||
"condition": false
|
||||
"bigPackageSizeSupport": true
|
||||
},
|
||||
"compileType": "miniprogram",
|
||||
"libVersion": "3.10.3",
|
||||
"libVersion": "3.5.7",
|
||||
"appid": "wx9d1cbc11c8c40ba7",
|
||||
"projectname": "qingdao-employment-service",
|
||||
"condition": {},
|
||||
"editorSetting": {
|
||||
"tabIndent": "insertSpaces",
|
||||
"tabSize": 2
|
||||
"condition": {
|
||||
"search": {
|
||||
"current": -1,
|
||||
"list": []
|
||||
},
|
||||
"conversation": {
|
||||
"current": -1,
|
||||
"list": []
|
||||
},
|
||||
"game": {
|
||||
"current": -1,
|
||||
"list": []
|
||||
},
|
||||
"miniprogram": {
|
||||
"current": -1,
|
||||
"list": []
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ const request = config => {
|
||||
if (getToken() && !isToken) {
|
||||
config.header['Authorization'] = 'Bearer ' + getToken()
|
||||
}
|
||||
config.header['Authorization'] = 'Bearer ' + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJQSlUyVlJCc1E1aXRMMWgxdjNkcVh2eER1c2VVc0hvRiIsInVzZXJJZCI6MX0.z4Z2XqgXyU0GQU-i7Bsa5T-zCKApTxj1YQ73rk7bAVo'
|
||||
config.header['Authorization'] = 'Bearer ' + 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOiJzeXNfdXNlcjoxIiwicm5TdHIiOiJGUVl3YmRUalAzQ1BMNGFVc0RxeGJmdjAyT3JMZllDVSIsInVzZXJJZCI6MX0.kSOXY2QJQPbfjE0Yx2R3S8yQciA33OZBS9xJtr7cQ1A'
|
||||
// get请求映射params参数
|
||||
if (config.params) {
|
||||
let url = config.url + '?' + tansParams(config.params)
|
||||
|
||||
Reference in New Issue
Block a user