还原标准库

This commit is contained in:
liuye
2024-09-25 16:23:42 +08:00
parent dd597dacdf
commit 1d043ba4b8
21 changed files with 2 additions and 2813 deletions

View File

@@ -15,7 +15,6 @@
"src/components",
"src/common/util.js",
"src/common/dict.js",
"src/common/dictHlj.js",
"src/common/monent.js",
"src/common/modules.js",
"src/common/http.js",

View File

@@ -35,8 +35,6 @@ instance.interceptors.response.use(res => {
return res.data
} else if (res.config.alwaysReturn) {
return res.data
} else if (res.data.code == 200) { //黑龙江接口200 正常
return res.data
} else if (res.data.code == 0) {
return res.data
} else if (res.data.code === 1) {

View File

@@ -1,73 +0,0 @@
/**
* 封装字典工具类
*/
const $dictHlj = {
instance: null,
url: "/system/dictData/types/",
init(config) {
this.instance = config?.instance
this.url = config?.url || this.url
},
dicts() {
let dicts = uni.getStorageSync('dicts') || null
typeof dicts == "string" ? (dicts = JSON.parse(dicts)) : dicts
return dicts || [];
},
load(...code) {
var url = this.url + code.toString()
return this.instance && this.instance.get(url, {
withoutToken: true,
}).then((res) => {
if (res && res.data) {
let dicts=[]
for (var i in res.data) {
var e = {
key: res.data[i][0].dictType,
values: res.data[res.data[i][0].dictType]
}
dicts.push(e)
}
this.dicts()
uni.setStorageSync('dicts', dicts);
}
})
},
getDict(key) {
if (this.dicts().length) {
let dict = this.dicts().find((e) => e.key == key);
return dict ? dict.values : [];
} else return [];
},
getValue(key, label) {
if (this.dicts().length) {
let dict = this.dicts().find((e) => e.key == key);
if (dict) {
let item = dict.values.find((v) => v.label == label);
return item ? item.value : label;
} else return label;
} else return label;
},
getLabel(key, value) {
if (this.dicts().length) {
let dict = this.dicts().find((e) => e.key == key);
if (dict) {
let item = dict.values.find((v) => v.value == value);
return item ? item.label : value;
} else return value ? value : '';
} else return value ? value : '';
},
getColor(key, value) {
if (this.dicts().length) {
let dict = this.dicts().find((e) => e.key == key);
if (dict) {
let item = dict.values.find((v) => v.dictValue == value);
return item ? item.dictColor : value;
} else return value;
} else return value;
}
}
export default $dictHlj

View File

@@ -1,5 +1,4 @@
import dict from "./dict"
import dictHlj from "./dictHlj"
import dayjs from './monent'
import qs from 'query-string'
import reg from "./regular";
@@ -256,7 +255,6 @@ export const copy = any => {
export default {
dict,
dictHlj,
confirm,
calcAge,
injectLib: (url, cb = () => 0) => {

View File

@@ -58,10 +58,6 @@ export default {
size: {default: 10 * 1024 * 1024},
disabled: Boolean,
sourceType: {default: () => ['album', 'camera']},
withoutToken: {
type: Boolean,
default: false,
},
},
computed: {
...mapState(['token']),
@@ -143,8 +139,7 @@ export default {
uni.hideLoading()
} else {
this.$http.post(this.api, formData, {
params: {type: this.type},
withoutToken: this.withoutToken
params: {type: this.type}
}).then((res) => {
if (res?.data) {
this.$emit('data', res.data)
@@ -167,8 +162,6 @@ export default {
this.fileList.push(res.data)
} else if (this.api == '/admin/file/add-portrait') {
this.fileList.push({url: res.data?.split(";")?.[0], id: res.data?.split(";")?.[1]})
}else if (this.api == '/common/upload') { //黑龙江图片上传接口
this.fileList.push({fileName: res.data.fileName, filePath: res.data.fileName})
}
this.$emit("update:def", this.fileList)
this.$emit("list", this.fileList)

View File

@@ -28,7 +28,6 @@ Vue.prototype.$dayjs = dayjs
Vue.prototype.$cdn = 'https://cdn.cunwuyun.cn/dvcp/h5/';
Object.keys(utils).map((e) => (Vue.prototype['$' + e] = utils[e]));
utils.dict.init({instance: axios})
utils.dictHlj.init({instance: axios})
App.mpType = 'app';
process.env.NODE_ENV == 'development' && new VConsole();
// new VConsole()

View File

@@ -29,7 +29,7 @@
"open": true,
"proxy": {
"/lan": {
"target": "http://8.148.23.227:8080",
"target": "http://192.168.1.87:9000",
"changeOrigin": true,
"pathRewrite": {
"^/lan": "/"

View File

@@ -9,7 +9,6 @@
"components",
"common/util.js",
"common/dict.js",
"common/dictHlj.js",
"common/monent.js",
"common/modules.js",
"common/http.js",

View File

@@ -1,245 +0,0 @@
<template>
<section class="AppChildrenDetail">
<div class="info-list">
<div class="item">
<div class="title-flex" @click="view(0)">
<div class="item-title">基本信息</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" :class="isShowBasic ? 'right-icon' : 'right-icon right-icon-active'">
</div>
<div class="item-content" v-if="isShowBasic">
<div class="item-form">
<div class="label">儿童类别</div>
<div class="value">{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', info.childType) || '-'}}</div>
</div>
<div class="item-form">
<div class="label">儿童名称</div>
<div class="value">{{info.childName || '-'}}</div>
</div>
<div class="item-form">
<div class="label">身份证号</div>
<div class="value">{{info.idNumber || '-'}}</div>
</div>
<div class="item-form">
<div class="label">儿童编号</div>
<div class="value">{{info.childNumber || '-'}}</div>
</div>
<div class="item-form">
<div class="label">性别</div>
<div class="value">{{$dictHlj.getLabel('GENDER_CODE', info.gender) || '-'}}</div>
</div>
<div class="item-form">
<div class="label">年龄</div>
<div class="value">{{info.age || '-'}}</div>
</div>
<div class="item-form">
<div class="label">福利证号</div>
<div class="value">{{info.welfareCertificateNumber || '-'}}</div>
</div>
<div class="item-form">
<div class="label">现住址</div>
<div class="value">{{info.presentAddress || '-'}}</div>
</div>
</div>
</div>
<div class="item">
<div class="title-flex" @click="view(1)">
<div class="item-title">生活费信息</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" :class="isShowLifeMoney ? 'right-icon' : 'right-icon right-icon-active'">
</div>
<div class="item-content" v-if="isShowLifeMoney">
<div class="item-form">
<div class="label">起领年月</div>
<div class="value">{{info.startingDate || '-'}}</div>
</div>
<div class="item-form">
<div class="label">末领年月</div>
<div class="value">{{info.lastDate || '-'}}</div>
</div>
<div class="item-form">
<div class="label">领取人</div>
<div class="value">{{info.personName || '-'}}</div>
</div>
<div class="item-form">
<div class="label">领取人与儿童关系</div>
<div class="value">{{info.relationshipChildren || '-'}}</div>
</div>
</div>
</div>
<div class="item">
<div class="title-flex" @click="view(2)">
<div class="item-title">福利机构信息</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" :class="isShowInstitution ? 'right-icon' : 'right-icon right-icon-active'">
</div>
<div class="item-content" v-if="isShowInstitution">
<div class="item-form">
<div class="label">机构名称</div>
<div class="value">{{info.institutionName || '-'}}</div>
</div>
<div class="item-form">
<div class="label">负责人</div>
<div class="value">{{info.legalPersonName || '-'}}</div>
</div>
<!-- <div class="item-form">
<div class="label">固定电话</div>
<div class="value">{{info.value || '-'}}</div>
</div> -->
<div class="item-form">
<div class="label">联系电话</div>
<div class="value">{{info.institutionTelephone || '-'}}</div>
</div>
<div class="item-form">
<div class="label">机构地址</div>
<div class="value">{{info.houseAddress || '-'}}</div>
</div>
</div>
</div>
</div>
<!-- <div class="footer-btn">
<div class="btn primary" @click="toView()">查看儿童详细信息</div>
<div class="btn">返回</div>
</div> -->
</section>
</template>
<script>
export default {
name: "AppChildrenDetail",
appName: "儿童信息详情",
data() {
return {
childType: '',
synId: '',
info: {},
isShowBasic: true,
isShowLifeMoney: true,
isShowInstitution: true
}
},
onLoad(option) {
this.childType = option.childType
this.synId = option.synId
this.$dictHlj.load(['CHILD_CATEGORY_CODE', 'GENDER_CODE']).then(() => {
this.getDetail()
})
},
onShow() {
document.title = '儿童信息详情'
},
methods: {
view(type) {
if(!type) {
this.isShowBasic = !this.isShowBasic
}else if(type == 1) {
this.isShowLifeMoney = !this.isShowLifeMoney
}else {
this.isShowInstitution = !this.isShowInstitution
}
},
toView() {
uni.navigateTo({url: `./AppChildrenDetailView`})
},
getDetail() {
this.$http.get(`/mobile/childrenInfo/findDetails/${this.synId}/${this.childType}`,
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.info = {...res.data}
}else {
this.$u.toast(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppChildrenDetail {
.info-list {
.item {
padding-left: 32px;
box-sizing: border-box;
margin-bottom: 24px;
background-color: #fff;
.title-flex {
width: 100%;
display: flex;
line-height: 42px;
.item-title {
width: calc(100% - 80px);
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #222;
padding: 20px 0;
}
.right-icon {
width: 40px;
height: 40px;
padding: 20px;
transform: rotate(-90deg);
transition: all 0.3s ease-in-out;
}
.right-icon-active {
transform: rotate(90deg);
}
}
.item-content {
.item-form {
width: 100%;
padding: 16px 20px 16px 0;
border-bottom: 1px solid #E4E5E6;
box-sizing: border-box;
word-break: break-all;
font-family: PingFangSC-Regular;
.label {
height: 44px;
font-size: 32px;
color: #999;
margin-bottom: 20px;
}
.value {
line-height: 40px;
font-size: 28px;
color: #222;
letter-spacing: 0;
}
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
z-index: 9;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>

View File

@@ -1,150 +0,0 @@
<template>
<section class="AppChildrenDetailView">
<div class="info-list">
<div class="item" v-for="(item, index) in list" :key="index">
<div class="title-flex">
<div class="item-title">{{item.title}}</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" :class="item.isView ? 'right-icon' : 'right-icon right-icon-active'" @click="view(index)">
</div>
<div class="item-content" v-if="item.isView">
<!-- <div class="item-form" v-for="(items, indexs) in item.infoList" :key="indexs">
<div class="label">{{items.label}}</div>
<div class="value">{{items.value}}</div>
</div> -->
<p>详细基本信息包括儿童的健康状态患病情况工学情况等</p>
</div>
</div>
</div>
<div class="footer-btn">
<div class="btn">返回</div>
</div>
</section>
</template>
<script>
export default {
name: "AppChildrenDetailView",
appName: "儿童详细信息",
data() {
return {
list: [
{
title: '详细基本信息',
isView: false,
},
{
title: '父母信息',
isView: false,
}
]
}
},
onShow() {
document.title = '儿童详细信息'
},
methods: {
view(index) {
this.list[index].isView = !this.list[index].isView
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppChildrenDetailView {
.info-list {
.item {
box-sizing: border-box;
background-color: #fff;
.title-flex {
width: calc(100% - 32px);
display: flex;
line-height: 42px;
margin-left: 32px;
border-bottom: 1px solid #E4E5E6;
.item-title {
width: calc(100% - 80px);
padding: 40px 0 34px 0;
line-height: 42px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 30px;
color: #333;
}
.right-icon {
width: 40px;
height: 40px;
padding: 20px;
transform: rotate(-90deg);
transition: all 0.3s ease-in-out;
margin-top: 10px;
}
.right-icon-active {
transform: rotate(90deg);
}
}
.item-content {
padding: 20px 32px;
box-sizing: border-box;
background-color: #F5F6F7;
p {
width: 100%;
line-height: 40px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 28px;
color: #999;
word-break: break-all;
}
// .item-form {
// width: 100%;
// padding: 16px 20px 16px 0;
// border-bottom: 1px solid #E4E5E6;
// box-sizing: border-box;
// word-break: break-all;
// font-family: PingFangSC-Regular;
// .label {
// height: 44px;
// font-size: 32px;
// color: #999;
// margin-bottom: 20px;
// }
// .value {
// line-height: 40px;
// font-size: 28px;
// color: #222;
// letter-spacing: 0;
// }
// }
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
z-index: 9;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
}
}
</style>

View File

@@ -1,153 +0,0 @@
<template>
<section class="AppChildrenInfo">
<div class="form">
<div class="item">
<span class="requier">*</span>
<div class="item-content" @click="isShowtype=true">
<div class="label">儿童类型</div>
<div :class="childType ? 'value' : 'value placeholder'">{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', childType) || '请选择'}}</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" class="right-icon">
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">儿童姓名</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="childName" maxlength="10"/>
</div>
</div>
</div>
<!-- <div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">儿童身份证号</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="value" maxlength="10"/>
</div>
</div>
</div> -->
</div>
<div class="footer-btn">
<!-- <div class="btn primary">扫描身份证</div> -->
<div class="btn primary" @click="toList()">查询</div>
<!-- <div class="btn" @click="back">返回</div> -->
</div>
<u-select v-model="isShowtype" :list="$dictHlj.getDict('CHILD_CATEGORY_CODE')" value-name="value" label-name="label" @confirm="typeChange"></u-select>
</section>
</template>
<script>
export default {
name: "AppChildrenInfo",
appName: "各类儿童信息查询",
data() {
return {
childName: '',
childType: '',
isShowtype: false
}
},
onLoad() {
this.$dictHlj.load(['CHILD_CATEGORY_CODE'])
},
onShow() {
document.title = '各类儿童信息查询'
},
methods: {
typeChange(e) {
this.childType = e[0].value
},
toList() {
if(!this.childType) {
return this.$u.toast(`请选择儿童类型`)
}
if(!this.childName) {
return this.$u.toast(`请输入儿童姓名`)
}
uni.navigateTo({url: `./AppChildrenList?childType=${this.childType}&childName=${this.childName}`})
},
back() {
uni.navigateBack()
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppChildrenInfo {
.form {
background-color: #fff;
.item {
display: flex;
padding-top: 16px;
.requier {
line-height: 44px;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #F46;
padding: 0 4px 0 12px;
}
.item-content {
width: calc(100% - 32px);
padding-bottom: 16px;
border-bottom: 1px solid #F4F4F5;
font-family: PingFangSC-Regular;
position: relative;
.label {
line-height: 44px;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #666;
margin-bottom: 20px;
}
.value {
line-height: 40px;
font-size: 28px;
color: #333;
}
.placeholder {
color: #999;
}
.right-icon {
position: absolute;
top: 12px;
right: 0;
width: 40px;
height: 40px;
padding: 20px;
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>

View File

@@ -1,139 +0,0 @@
<template>
<section class="AppChildrenList">
<div class="user-list">
<div class="item" v-for="(item, index) in list" :key="index" @click="toDetail(item)">
<div class="name-flex">
<div class="name">{{item.childName}}</div>
<div class="type-list">
<div class="type">{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', item.childType)}}</div>
</div>
</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" class="right-icon">
<div class="sex-info">
<span>{{$dictHlj.getLabel('GENDER_CODE', item.gender)}}</span>
<span>{{item.age}}</span>
</div>
</div>
<AiEmpty v-if="!list.length"></AiEmpty>
</div>
</section>
</template>
<script>
export default {
name: "AppChildrenList",
appName: "各类儿童信息查询",
data() {
return {
childName: '',
childType: '',
current: 1,
pageTotal: 2,
list: []
}
},
onLoad(option) {
this.childType = option.childType
this.childName = option.childName
this.$dictHlj.load(['CHILD_CATEGORY_CODE', 'GENDER_CODE']).then(() => {
this.getList()
})
},
onShow() {
document.title = '各类儿童信息查询'
},
methods: {
toDetail(row) {
uni.navigateTo({url: `./AppChildrenDetail?synId=${row.synId}&childType=${row.childType}`})
},
getList() {
if(this.current > this.pageTotal) return
this.$http.post(`/mobile/childrenInfo/findListPage`,
{
childName: this.childName,
childType: this.childType,
pageNum: this.current,
pageSize: 10,
},
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.list = this.current > 1 ? [...this.list, ...res.data.rows] : res.data.rows
this.pageTotal = Math.ceil(res.data.total/10)
}else {
this.$u.toast(res.msg)
}
})
}
},
onReachBottom() {
this.current++
this.getList()
}
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppChildrenList {
.user-list {
padding: 28px 32px 0 32px;
width: 100%;
box-sizing: border-box;
.item {
width: 100%;
background: #FFF;
border-radius: 16px;
padding: 24px;
box-sizing: border-box;
position: relative;
margin-bottom: 24px;
.name-flex {
display: flex;
margin-bottom: 16px;
.name {
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #333;
margin-right: 32px;
}
.type-list {
.type {
display: inline-block;
line-height: 48px;
background: #F5FCF5;
border: 1px solid #E2F6E1;
border-radius: 8px;
padding: 0 16px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #3BBC37;
}
}
}
.right-icon {
position: absolute;
top: 50px;
right: 20px;
width: 40px;
height: 40px;
}
.sex-info {
span {
display: inline-block;
line-height: 36px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #999;
margin-right: 28px;
}
}
}
}
}
</style>

View File

@@ -1,71 +0,0 @@
<template>
<section class="AppHome">
<div class="card-list">
<div class="item-card" v-for="(item, index) in cardList" :key="index" @click="linkTo(item.linkUrl)">
<img :src="item.imgUrl" alt="">
</div>
</div>
</section>
</template>
<script>
export default {
name: "AppHome",
appName: "黑龙江儿童福利系统",
data() {
return {
cardList: [
{
imgUrl: 'https://cdn.sinoecare.com/i/2024/09/06/66da65a3635e2.png',
linkUrl: '../AppChildrenInfo/AppChildrenInfo'
},
{
imgUrl: 'https://cdn.sinoecare.com/i/2024/09/06/66da65a41973a.png',
linkUrl: '../AppRecognize/AppRecognize'
},
{
imgUrl: 'https://cdn.sinoecare.com/i/2024/09/23/66f129149bd83.png',
linkUrl: '../AppSecurityObject/AppSecurityObject'
}
]
}
},
onLoad() {
// uni.setNavigationBarColor({
// frontColor: '#ffffff',
// backgroundColor: '#2183FF'
// })
// uni.setNavigationBarTitle({
// title: '黑龙江儿童福利系统'
// })
},
onShow() {
document.title = '黑龙江儿童福利系统'
},
methods: {
linkTo(url) {
uni.navigateTo({url})
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #fff;
}
.AppHome {
.card-list {
padding: 28px 32px 0 32px;
.item-card {
margin-bottom: 28px;
width: 100%;
img {
width: 100%;
height: 180px;
}
}
}
}
</style>

View File

@@ -1,243 +0,0 @@
<template>
<section class="AppRecognize">
<!-- <u-navbar title="认亲助养" title-color="#fff" title-width="300" title-size="34"
:title-bold="true" :background="backgroundNavbar" :height="44" back-icon-color="#fff">
<div slot="right" class="btn-right" @click="showAdd=!showAdd">查询/新增</div>
</u-navbar>
<div class="select-content" v-if="showAdd">
<span class="triangle-up"></span>
<div class="item" @click="linkTo('./AppRecognizeSearchTab')">查询</div>
<div class="item" @click="linkTo(`./AppRecognizeAdd?assistanceMethod=${tabList[tabIndex].val}`)">新增认亲助养</div>
</div> -->
<div class="top-fixed">
<u-tabs u-tabs :list="tabList" :is-scroll="false" :current="tabIndex" @change="change" height="112" :bar-style="barStyle"
bg-color="#fff" inactive-color="#666" active-color="#222" :active-item-style="activeStyle"></u-tabs>
</div>
<div class="user-list">
<div class="item" v-for="(item, index) in list" :key="index" @click="toDetail(item)">
<div class="item-top">
<div class="title">助养方{{item.sponsorName}}</div>
<div class="info">助养对象{{item.sponsoredChildName}}</div>
<div class="info">相信描述{{item.details}}</div>
</div>
<div class="item-bottom">
<div class="time">{{item.processingDate}}</div>
</div>
</div>
<AiEmpty v-if="!list.length"></AiEmpty>
</div>
<div class="footer-btn">
<div class="btn primary" @click="linkTo('./AppRecognizeSearchTab')">查询</div>
<div class="btn" @click="linkTo(`./AppRecognizeAdd?assistanceMethod=${tabList[tabIndex].val}`)">新增认亲助养</div>
</div>
</section>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: "AppRecognize",
appName: "认亲助养",
customNavigation: true,
data() {
return {
backgroundNavbar: {
backgroundColor: '#2183FF'
},
tabList: [{name: '一次性助养', val: 2}, {name: '长期助养', val: 1}],
tabIndex: 0,
barStyle: {
'width': '20px',
'bottom': '-3px',
'background': '#4181FF',
'border-radius': '2px'
},
activeStyle: {
'font-weight' : '400',
'color': '#222'
},
showAdd: false,
current: 1,
pageTotal: 2,
list: []
}
},
computed: {
...mapState(['user']),
},
onLoad() {
this.getList()
uni.$on('updateList', () => {
this.getListInit()
})
},
onShow() {
document.title = '认亲助养'
},
methods: {
linkTo(url) {
this.showAdd = false
uni.navigateTo({url})
},
toDetail(row) {
uni.navigateTo({url: `./AppRecognizeDetail?id=${row.id}`})
},
change(e) {
this.tabIndex = e
this.getListInit()
},
getListInit() {
this.current = 1
this.pageTotal = 2
this.list = []
this.getList()
},
getList() {
if(this.current > this.pageTotal) return
this.$http.post(`/mobile/supportRaise/findListPage`,
{
sponsorshipMethod: this.tabList[this.tabIndex].val,
pageNum: this.current,
pageSize: 10,
divisionCode: this.user.divisionCode || ''
},
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.list = this.current > 1 ? [...this.datas, ...res.data.rows] : res.data.rows
this.pageTotal = Math.ceil(res.data.total/10)
}else {
this.$u.toast(res.msg)
}
})
}
},
onReachBottom() {
this.current++
this.getList()
}
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppRecognize {
position: relative;
.btn-right {
font-family: PingFangSC-SNaNpxibold;
font-weight: 600;
font-size: 34px;
color: #FFF;
padding-right: 22px;
}
::v-deep .u-tabs {
border-bottom: 1px solid #ddd;
}
.select-content {
border-radius: 16px;
padding: 12px 32px 0 32px;
background-color: #fff;
box-shadow: 6px 6px 12px 0px #999;
width: 256px;
position: fixed;
top: 104px;
right: 32px;
z-index: 999;
.item {
line-height: 88px;
text-align: center;
font-family: PingFangSC-Regular;
font-weight: 400;
font-size: 28px;
color: #323233;
}
.item:nth-of-type(1) {
border-bottom: 1px solid #eee;
}
.triangle-up {
width: 0;
height: 0;
border-bottom: 16px solid #fff;
border-left: 16px solid transparent;
border-right: 16px solid transparent;
position: absolute;
top: -16px;
right: 66px;
z-index: 999;
}
}
.top-fixed {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.user-list {
padding: 144px 32px 300px 32px;
box-sizing: border-box;
.item {
width: 100%;
background: #FFF;
border-radius: 16px;
margin-bottom: 24px;
.item-top {
padding: 24px;
.title {
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #333;
margin-bottom: 12px;
word-break: break-all;
}
.info {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #666;
}
}
.item-bottom {
padding: 14px 0 10px 24px;
border-top: 1px solid #E4E5E6;
.time {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 24px;
color: #999;
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>

View File

@@ -1,604 +0,0 @@
<template>
<section class="AppRecognizeAdd">
<div class="step-info">
<div class="step-list">
<div :class="index <= stepIndex ? 'step-item step-active' : 'step-item'" v-for="(item, index) in stepTitleList" :key="index">
<div class="index">{{index+1}}</div>
<div class="line" v-if="index!=3"></div>
<p class="text">{{item.name}}</p>
</div>
</div>
<u-search placeholder="搜索儿童姓名" :show-action="false" bg-color="#F5F6F7" search-icon-color="#666" color="#666"
height="58" v-model="searchChildrenName" @search="getChildrenListInit()" v-if="stepIndex == 1"/>
</div>
<div class="form" v-if="stepIndex == 0">
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">助养人姓名</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="form.assistanceName" maxlength="10"/>
</div>
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content" @click="isShowRelationship=true">
<div class="label">与助养对象关系</div>
<div :class="form.relationshipWithChild ? 'value' : 'value placeholder'">{{$dictHlj.getLabel('relationship_children', form.relationshipWithChild) || '请选择'}}</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" class="right-icon">
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content" @click="isShowMethod=true">
<div class="label">助养方式</div>
<div :class="form.assistanceMethod ? 'value' : 'value placeholder'">{{$dictHlj.getLabel('handling_Date', form.assistanceMethod) || '请选择'}}</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" class="right-icon">
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">详细描述</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="form.details" maxlength="10"/>
</div>
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">助养人身份证号</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="form.assistanceIdNumber" maxlength="18"/>
</div>
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content" @click="isShowDate=true">
<div class="label">办理日期</div>
<div :class="form.handlingDate ? 'value' : 'value placeholder'">{{form.handlingDate || '请选择'}}</div>
<img src="https://cdn.sinoecare.com/i/2024/09/23/66f0cbedbbd23.png" alt="" class="right-icon">
</div>
</div>
</div>
<div class="user-list" v-if="stepIndex == 1">
<div class="item" v-for="(item, index) in childrenList" :key="index">
<div class="item-top">
<div class="title">儿童姓名{{item.childName}}</div>
<div class="info">身份证号{{item.childNumber}}</div>
<div class="info">儿童类别{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', item.childCategory)}}</div>
<div class="info">出生年月{{item.birthDate}}</div>
<img :src="item.isCheck ? 'https://cdn.sinoecare.com/i/2024/07/16/6695ddf91113c.png' :
'https://cdn.sinoecare.com/i/2024/07/16/6695ddf890b1e.png'" alt="" class="check-img" @click="checkChildren(index)">
</div>
<div class="item-bottom" @click="toChildrenDetail(item)">
<div class="btn">详情</div>
</div>
</div>
<AiEmpty v-if="!childrenList.length"></AiEmpty>
</div>
<div class="form" v-if="stepIndex == 2">
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">助养者身份证信息(身份证正反面)</div>
<div class="value">
<AiUploader style="margin-top: 12px;" :def.sync="filesId" :limit="2" :multiple="true" action="/common/upload" :withoutToken="true" @list="changeId"></AiUploader>
</div>
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">助养者经济状况证明</div>
<div class="value">
<AiUploader style="margin-top: 12px;" :def.sync="filesEconomy" :limit="9" :multiple="true" action="/common/upload" :withoutToken="true" @list="changeEconomy"></AiUploader>
</div>
</div>
</div>
<div class="item">
<span class="requier"></span>
<div class="item-content">
<div class="label">助养者健康状况</div>
<div class="value">
<AiUploader style="margin-top: 12px;" :def.sync="filesHealth" :limit="9" :multiple="true" action="/common/upload" :withoutToken="true" @list="changeHealth"></AiUploader>
</div>
</div>
</div>
<div class="item">
<span class="requier"></span>
<div class="item-content">
<div class="label">其他材料</div>
<div class="value">
<AiUploader style="margin-top: 12px;" :def.sync="filesOther" :limit="9" :multiple="true" action="/common/upload" :withoutToken="true" @list="changeOther"></AiUploader>
</div>
</div>
</div>
</div>
<div class="form" v-if="stepIndex == 3">
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">办理人</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="form.agentId" maxlength="10"/>
</div>
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">办理人联系电话</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="form.agentPhone" maxlength="10"/>
</div>
</div>
</div>
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">办理机构</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="form.agency" maxlength="10"/>
</div>
</div>
</div>
</div>
<div class="footer-btn">
<div class="btn primary" @click="next" v-if="stepIndex < 3">下一步</div>
<div class="btn primary" @click="confirm" v-if="stepIndex == 3">确认</div>
<div class="btn" @click="pre" v-if="stepIndex != 0">返回</div>
</div>
<u-select v-model="isShowRelationship" :list="$dictHlj.getDict('relationship_children')" value-name="value" label-name="label" @confirm="shipChange"></u-select>
<u-select v-model="isShowMethod" :list="$dictHlj.getDict('handling_Date')" value-name="value" label-name="label" @confirm="methodChange"></u-select>
<u-calendar v-model="isShowDate" @change="onDateChange" mode="date"></u-calendar>
</section>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: "AppRecognizeAdd",
appName: "认亲助养",
data() {
return {
stepTitleList: [{name: '助养信息'}, {name: '助养对象'}, {name: '相关文件'}, {name: '经办人'}],
stepIndex: 0,
files: [],
form: {
assistanceName: '',
relationshipWithChild: '',
assistanceMethod: '',
details: '',
assistanceIdNumber: '',
// 110102190001010731
handlingDate: '',
assistanceInformationFile: [],
agentId: '',
agentPhone: '',
agency: '',
childBusinessId: '',
childType: '',
},
isShowDate: false,
isShowRelationship: false,
isShowMethod: false,
current: 1,
pageTotal: 2,
childrenList: [],
searchChildrenName: '',
checkChildrenInfo: {}, //第二步选择儿童信息
filesId: [], //身份证照片
filesEconomy: [], //经济状况证明
filesHealth: [], //健康证明
filesOther: [], //其它
imgUrlHttp: '',
isNextFlag: true
}
},
computed: {
...mapState(['user']),
},
onLoad(option) {
this.$dictHlj.load(['handling_Date', 'relationship_children', 'CHILD_CATEGORY_CODE'])
this.$http.get(`/system/config/configKey/upload.file.path`,
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.imgUrlHttp = res.data
}
})
this.form.agentId = this.user.name
this.form.agentPhone = this.user.phone
this.form.assistanceMethod = option.assistanceMethod
},
onShow() {
document.title = '认亲助养'
},
methods: {
shipChange(e) {
this.form.relationshipWithChild = e[0].value
},
methodChange(e) {
this.form.assistanceMethod = e[0].value
},
onDateChange(e) {
this.form.handlingDate = `${e.result}`
},
changeId(list) {
list.map((item) => {
item.url = this.imgUrlHttp + item.fileName
})
this.filesId = list
},
changeEconomy(list) {
list.map((item) => {
item.url = this.imgUrlHttp + item.fileName
})
this.filesEconomy = list
},
changeHealth(list) {
list.map((item) => {
item.url = this.imgUrlHttp + item.fileName
})
this.filesHealth = list
},
changeOther(list) {
list.map((item) => {
item.url = this.imgUrlHttp + item.fileName
})
this.filesOther = list
},
next() {
if(!this.stepIndex) { //第一步
return this.validateFirst()
}
if(this.stepIndex == 1) { //第二步选择儿童
return this.validateSecond()
}
if(this.stepIndex == 2) {
return this.validateThird() //第三步
}
if(this.stepIndex == 3) {
return this.confrim()
}
},
validateFirst() {
if (!this.form.assistanceName) {
return this.$u.toast(`请输入助养人姓名`)
}
if (!this.form.relationshipWithChild) {
return this.$u.toast(`请选择与助养对象关系`)
}
if (!this.form.assistanceMethod) {
return this.$u.toast(`请选择助养方式`)
}
if (!this.form.details) {
return this.$u.toast(`请输入详细描述`)
}
if (!this.form.assistanceIdNumber) {
return this.$u.toast(`请输入助养人身份号码`)
}
if (!/^[1-9]\d{5}(19\d{2}|20[0-2]\d)(0[1-9]|1[0-2])(0[1-9]|[1-2][0-9]|3[0-1])\d{3}([0-9xX])$/.test(this.form.assistanceIdNumber)) {
return this.$u.toast('请输入正确的助养人身份证号')
}
if (!this.form.handlingDate) {
return this.$u.toast(`请选择办理日期`)
}
this.stepIndex ++
this.getChildrenListInit()
},
getChildrenListInit() {
this.pageNum = 1
this.pageTotal = 2
this.childrenList = []
this.checkChildrenInfo = {}
this.getChildrenList()
},
getChildrenList() {
if(this.current > this.pageTotal) return
this.$http.post(`/mobile/supportRaise/findChildrenList`,
{
childName: this.searchChildrenName,
pageSize: 20,
pageNum: this.current,
divisionCode: this.user.divisionCode || ''
},
{
withoutToken: true
}).then((res) => {
if (res.code == 200 && res.data.rows?.length) {
res.data.rows.map((item) => {
item.isCheck = false
})
this.childrenList = this.current > 1 ? [...this.childrenList, ...res.data.rows] : res.data.rows
this.pageTotal = Math.ceil(res.data.total/20)
}else {
this.$u.toast(`未查询到有效的儿童信息,请输入正确的助养人姓名`)
}
})
},
toChildrenDetail(row) {
uni.navigateTo({url: `../AppChildrenInfo/AppChildrenDetail?synId=${row.childId}&childType=${row.childCategoryType}`})
},
checkChildren(index) {
this.childrenList.map((item) => {
item.isCheck = false
})
this.childrenList[index].isCheck = true
this.checkChildrenInfo = this.childrenList[index]
},
validateSecond() {
if(this.checkChildrenInfo.childId) {
this.form.childType = this.checkChildrenInfo.childCategoryType
this.form.childBusinessId = this.checkChildrenInfo.childId
this.stepIndex ++
}else {
this.$u.toast(`请勾选助养儿童`)
}
},
validateThird() {
if(!this.filesId.length) {
return this.$u.toast(`请上传助养者身份证信息`)
}
if(this.filesId.length < 2) {
return this.$u.toast(`请上传助养者身份证正反面信息`)
}
if(!this.filesEconomy.length) {
return this.$u.toast(`请上传经济状况证明`)
}
this.filesId.map((item) => {
item.type = 1
})
this.filesEconomy.map((item) => {
item.type = 2
})
this.filesHealth.map((item) => {
item.type = 3
})
this.filesOther.map((item) => {
item.type = 4
})
this.form.assistanceInformationFile = this.filesId.concat(this.filesEconomy, this.filesHealth, this.filesOther)
this.stepIndex ++
},
confirm() {
this.$http.post(`/mobile/supportRaise/insert`,
{...this.form},
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.$u.toast('新增成功!')
uni.$emit('updateList')
setTimeout(() => {
uni.navigateBack()
}, 800)
}else {
this.$u.toast(res.msg)
}
})
},
pre() {
this.stepIndex --
}
},
onReachBottom() {
this.current++
this.getChildrenList()
}
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppRecognizeAdd {
padding-bottom: 324px;
.step-info {
width: 100%;
padding: 40px 32px 44px;
background-color: #fff;
box-sizing: border-box;
margin-bottom: 24px;
position: fixed;
top: 0;
left: 0;
z-index: 9;
.step-list {
display: flex;
.step-item {
font-family: PingFangSC-Regular;
font-size: 26px;
position: relative;
.index {
display: inline-block;
width: 40px;
line-height: 40px;
text-align: center;
border-radius: 50%;
background: #D0D1D6;
color: #FFF;
margin: 0 140px 0 16px;
}
.line {
width: 140px;
height: 1px;
background: #D0D1D6;
position: absolute;
top: 20px;
left: 62px;
}
.text {
font-family: PingFangSC-Regular;
font-size: 26px;
color: #999;
margin-top: 18px;
}
}
.step-item:nth-child(1) {
.index {
margin-left: 30px;
}
.line {
left: 78px;
}
}
.step-item:nth-child(2),
.step-item:nth-child(3) {
.text {
margin-left: -10px;
}
}
.step-active {
.index, .line {
background: #2183FF;
}
.text {
color: #2183FF;
}
}
}
::v-deep .u-search {
margin-top: 24px!important;
}
}
.form {
padding-top: 200px;
.item {
display: flex;
padding-top: 16px;
background-color: #fff;
.requier {
line-height: 44px;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #F46;
padding: 0 4px 0 12px;
}
.item-content {
width: calc(100% - 32px);
padding-bottom: 16px;
border-bottom: 1px solid #F4F4F5;
font-family: PingFangSC-Regular;
position: relative;
.label {
line-height: 44px;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #666;
margin-bottom: 20px;
}
.value {
line-height: 40px;
font-size: 28px;
color: #333;
}
.placeholder {
color: #999;
}
.right-icon {
position: absolute;
top: 12px;
right: 0;
width: 40px;
height: 40px;
padding: 20px;
}
}
}
}
.user-list {
padding: 282px 32px 0 32px;
box-sizing: border-box;
::v-deep .u-search {
margin-bottom: 32px!important;
}
.item {
width: 100%;
background: #FFF;
border-radius: 16px;
margin-bottom: 24px;
.item-top {
padding: 24px;
position: relative;
.title {
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #333;
margin-bottom: 12px;
word-break: break-all;
}
.info {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #666;
}
.check-img {
width: 48px;
height: 48px;
padding: 8px;
position: absolute;
top: 24px;
right: 32px;
}
}
.item-bottom {
padding: 14px 0 10px 24px;
height: 58px;
border-top: 1px solid #E4E5E6;
position: relative;
.btn {
line-height: 58px;
font-family: PingFangSC-Regular;
font-size: 28px;
color: #fff;
width: 98px;
text-align: center;
border-radius: 4px;
background-color: #2183FF;
position: absolute;
top: 14px;
right: 32px;
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>

View File

@@ -1,351 +0,0 @@
<template>
<section class="AppRecognizeDetail">
<div class="top-fixed">
<u-tabs :list="tabList" :is-scroll="false" :current="tabIndex" @change="change" height="112" :bar-style="barStyle"
bg-color="#fff" inactive-color="#666" active-color="#222" :active-item-style="activeStyle"></u-tabs>
</div>
<div class="info-content" v-if="!tabIndex">
<div class="item">
<div class="label">助养人姓名</div>
<div class="value">{{info.assistanceName}}</div>
</div>
<div class="item">
<div class="label">与助养对象关系</div>
<div class="value">{{$dictHlj.getLabel('relationship_children', info.relationshipWithChild)}}</div>
</div>
<div class="item">
<div class="label">助养方式</div>
<div class="value">{{$dictHlj.getLabel('handling_Date', info.assistanceMethod)}}</div>
</div>
<div class="item">
<div class="label">详细描述</div>
<div class="value">{{info.details}}</div>
</div>
<div class="item">
<div class="label">助养人身份证号</div>
<div class="value">{{info.assistanceIdNumber}}</div>
</div>
<div class="item">
<div class="label">办理日期</div>
<div class="value">{{info.handlingDate}}</div>
</div>
</div>
<div class="info-content" v-if="tabIndex == 1">
<div class="item">
<div class="label">儿童姓名</div>
<div class="value">{{info.childName}}</div>
</div>
<div class="item">
<div class="label">身份证号</div>
<div class="value">{{info.childIdNumber}}</div>
</div>
<div class="item">
<div class="label">儿童类别</div>
<div class="value">{{$dictHlj.getLabel('child_type', info.childType)}}</div>
</div>
<div class="item">
<div class="label">出生年月</div>
<div class="value">{{info.childBirthDate}}</div>
</div>
</div>
<div class="info-content" v-if="tabIndex == 2">
<div class="item">
<div class="label">助养者身份证信息</div>
<div class="value">
<div class="img-list" v-if="filesIdImg.length">
<img :src="item.url" alt="" v-for="(item, index) in filesIdImg" :key="index" @click.stop="previewImages(filesIdImg, item.url)">
</div>
<div class="file-list" v-if="filesId.length">
<div class="file-item" v-for="(item, index) in filesId" :key="index" @click="previewFile(item)">
<img src="https://cdn.sinoecare.com/i/2024/07/16/66963dd133cfd.png" alt="">
<div>{{ item.fileName }}</div>
</div>
</div>
<p v-if="!filesIdImg.length && !filesId.length">暂无数据</p>
</div>
</div>
<div class="item">
<div class="label">助养者经济状况证明</div>
<div class="value">
<div class="img-list" v-if="filesEconomyImg.length">
<img :src="item.url" alt="" v-for="(item, index) in filesEconomyImg" :key="index" @click.stop="previewImages(filesEconomyImg, item.url)">
</div>
<div class="file-list" v-if="filesEconomy.length">
<div class="file-item" v-for="(item, index) in filesEconomy" :key="index" @click="previewFile(item)">
<img src="https://cdn.sinoecare.com/i/2024/07/16/66963dd133cfd.png" alt="">
<div>{{ item.fileName }}</div>
</div>
</div>
<p v-if="!filesEconomyImg.length && !filesEconomy.length">暂无数据</p>
</div>
</div>
<div class="item">
<div class="label">助养者健康状况</div>
<div class="value">
<div class="img-list" v-if="filesHealthImg.length">
<img :src="item.url" alt="" v-for="(item, index) in filesHealthImg" :key="index" @click.stop="previewImages(filesHealthImg, item.url)">
</div>
<div class="file-list" v-if="filesHealth.length">
<div class="file-item" v-for="(item, index) in filesHealth" :key="index" @click="previewFile(item)">
<img src="https://cdn.sinoecare.com/i/2024/07/16/66963dd133cfd.png" alt="">
<div>{{ item.fileName }}</div>
</div>
</div>
<p v-if="!filesHealthImg.length && !filesHealth.length">暂无数据</p>
</div>
</div>
<div class="item">
<div class="label">其他材料</div>
<div class="value">
<div class="img-list" v-if="filesOtherImg.length">
<img :src="item.url" alt="" v-for="(item, index) in filesOtherImg" :key="index" @click.stop="previewImages(filesOtherImg, item.url)">
</div>
<div class="file-list" v-if="filesOther.length">
<div class="file-item" v-for="(item, index) in filesOther" :key="index" @click="previewFile(item)">
<img src="https://cdn.sinoecare.com/i/2024/07/16/66963dd133cfd.png" alt="">
<div>{{ item.fileName }}</div>
</div>
</div>
<p v-if="!filesOtherImg.length && !filesOther.length">暂无数据</p>
</div>
</div>
</div>
<div class="info-content" v-if="tabIndex == 3">
<div class="item">
<div class="label">办理人</div>
<div class="value">{{info.agentId || '-'}}</div>
</div>
<div class="item">
<div class="label">办理人联系电话</div>
<div class="value">{{info.agentPhone || '-'}}</div>
</div>
<div class="item">
<div class="label">办理机构</div>
<div class="value">{{info.agency || '-'}}</div>
</div>
</div>
</section>
</template>
<script>
export default {
name: "AppRecognizeDetail",
appName: "认亲助养",
data() {
return {
tabList: [{name: '助养信息'}, {name: '助养对象'}, {name: '相关文件'}, {name: '经办人'}],
tabIndex: 0,
barStyle: {
'width': '20px',
'bottom': '-3px',
'background': '#4181FF',
'border-radius': '2px'
},
activeStyle: {
'font-weight' : '400',
'color': '#222'
},
id: '',
info: {},
filesIdImg: [], //身份证照片
filesId: [], //身份证附件
filesEconomyImg: [], //经济状况证明照片
filesEconomy: [], //经济状况证明附件
filesHealthImg: [], //健康证明照片
filesHealth: [], //健康证明附件
filesOtherImg: [], //其它照片
filesOther: [], //其它附件
imgUrlHttp: '',
}
},
onLoad(option) {
this.id = option.id
this.$http.get(`/system/config/configKey/upload.file.path`,
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.imgUrlHttp = res.data
}
})
this.$dictHlj.load(['handling_Date', 'relationship_children', 'child_type']).then(() => {
this.getDetail()
})
},
onShow() {
document.title = '认亲助养'
},
methods: {
linkTo(url) {
uni.navigateTo({url})
},
change(e) {
this.tabIndex = e
},
getDetail() {
this.$http.get(`/mobile/supportRaise/findById/${this.id}`,
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.info = {...res.data}
res.data.assistanceInformationFile.map((item) => {
item.url = this.imgUrlHttp + item.fileName
var e = item.fileName.split('.')
item.postfix = e[e.length-1]
if(item.type == 1) {
if(['jpeg', 'jpg', 'png'].includes(item.postfix)) {
this.filesIdImg.push(item)
}else {
this.filesId.push(item)
}
}
if(item.type == 2) {
if(['jpeg', 'jpg', 'png'].includes(item.postfix)) {
this.filesEconomyImg.push(item)
}else {
this.filesEconomy.push(item)
}
}
if(item.type == 3) {
if(['jpeg', 'jpg', 'png'].includes(item.postfix)) {
this.filesHealthImg.push(item)
}else {
this.filesHealth.push(item)
}
}
if(item.type == 4) {
if(['jpeg', 'jpg', 'png'].includes(item.postfix)) {
this.filesOtherImg.push(item)
}else {
this.filesOther.push(item)
}
}
})
}else {
this.$u.toast(res.msg)
}
})
},
previewImages(images, img) {
uni.previewImage({
urls: images.map(v => v.url),
current: img
})
},
previewFile(e) {
uni.downloadFile({
url: e.url,
success: function (res) {
var filePath = res.tempFilePath;
uni.openDocument({
filePath: filePath,
fileType: e.postfix,
showMenu: true,
});
}
});
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #f5f6f7;
}
.AppRecognizeDetail {
::v-deep .u-tabs {
border-bottom: 1px solid #ddd;
}
.top-fixed {
position: fixed;
top: 0;
left: 0;
width: 100%;
}
.info-content {
padding-top: 144px;
.item {
padding-left: 32px;
background-color: #fff;
font-family: PingFangSC-Regular;
width: 100%;
box-sizing: border-box;
.label {
padding: 16px 32px 20px 0;
line-height: 44px;
font-size: 32px;
color: #999;
box-sizing: border-box;
}
.value {
padding: 0 20px 16px 0;
box-sizing: border-box;
line-height: 40px;
font-size: 28px;
color: #222;
border-bottom: 1px solid #E4E5E6;
.img-list {
img {
width: 200px;
height: 200px;
margin-right: 16px;
margin-bottom: 16px;
}
img:nth-child(3n) {
margin-right: 0;
}
}
.file-list {
.file-item {
padding: 16px;
border: 1px solid #CCCCCC;
border-radius: 8px;
display: flex;
margin-bottom: 32px;
img {
width: 96px;
height: 96px;
}
div {
align-self: center;
}
}
}
p {
color: #999;
line-height: 44px;
padding: 8px 0;
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>

View File

@@ -1,138 +0,0 @@
<template>
<section class="AppRecognizeSearch">
<div class="form">
<div class="item">
<span class="requier">*</span>
<div class="item-content">
<div class="label">{{navName == '个人助养' ? '助养人名称' : '助养方名称'}}</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="assistanceName" maxlength="10"/>
</div>
</div>
</div>
<!-- <div class="item" v-if="navName == '个人助养'">
<span class="requier">*</span>
<div class="item-content">
<div class="label">助养人身份证号</div>
<div class="value">
<u-input type="text" placeholder="请输入" placeholder-style="color:#999;font-size:14px;" height="40" v-model="assistanceIdNumber" maxlength="18"/>
</div>
</div>
</div> -->
</div>
<div class="footer-btn">
<div class="btn primary" @click="toList()">查询</div>
<!-- <div class="btn" @click="back">返回</div> -->
</div>
</section>
</template>
<script>
export default {
name: "AppRecognizeSearch",
appName: "查询个人助养",
data() {
return {
assistanceName: '',
assistanceIdNumber: '',
navName: ''
}
},
onLoad(option) {
this.navName = option.name
},
onShow() {
document.title = this.navName == '个人助养' ? '查询个人助养' : '查询集体助养'
},
methods: {
toList() {
if(!this.assistanceName) {
return this.$u.toast(this.navName == '个人助养' ? '请输入助养人名称' : '请输入助养方名称')
}
// if(this.navName == '个人助养' && !this.assistanceIdNumber) {
// return this.$u.toast('请输入助养人身份证号')
// }
var assistanceMethod = this.navName == '个人助养' ? 2 : 1
uni.navigateTo({url: `./AppRecognizeSearchList?assistanceName=${this.assistanceName}&assistanceMethod=${assistanceMethod}`})
},
back() {
uni.navigateBack()
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppRecognizeSearch {
.form {
background-color: #fff;
.item {
display: flex;
padding-top: 16px;
.requier {
line-height: 44px;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #F46;
padding: 0 4px 0 12px;
}
.item-content {
width: calc(100% - 32px);
padding-bottom: 16px;
border-bottom: 1px solid #F4F4F5;
font-family: PingFangSC-Regular;
position: relative;
.label {
line-height: 44px;
font-family: PingFangSC-Regular;
font-size: 32px;
color: #666;
margin-bottom: 20px;
}
.value {
line-height: 40px;
font-size: 28px;
color: #333;
}
.right-icon {
position: absolute;
top: 12px;
right: 0;
width: 40px;
height: 40px;
padding: 20px;
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>

View File

@@ -1,123 +0,0 @@
<template>
<section class="AppRecognizeSearchList">
<div class="user-list">
<div class="item" v-for="(item, index) in list" :key="index" @click="toDetail(item)">
<div class="item-top">
<div class="title">助养方{{item.sponsorName}}</div>
<div class="info">助养对象{{item.sponsoredChildName}}</div>
<div class="info">相信描述{{item.details}}</div>
</div>
<div class="item-bottom">
<div class="time">{{item.processingDate}}</div>
</div>
</div>
<AiEmpty v-if="!list.length"></AiEmpty>
</div>
</section>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: "AppRecognizeSearchList",
appName: "查询认亲助养",
data() {
return {
assistanceName: '',
assistanceIdNumber: '',
assistanceMethod: '',
current: 1,
pageTotal: 2,
list: []
}
},
computed: {
...mapState(['user']),
},
onLoad(option) {
this.assistanceName = option.assistanceName
// this.assistanceIdNumber = option.assistanceIdNumber
this.assistanceMethod = option.assistanceMethod
this.getList()
},
onShow() {
document.title = '查询认亲助养'
},
methods: {
toDetail(row) {
uni.navigateTo({url: `./AppRecognizeDetail?id=${row.id}`})
},
getList() {
if(this.current > this.pageTotal) return
this.$http.post(`/mobile/supportRaise/findListPage`,
{
sponsorName: this.assistanceName,
sponsorshipMethod: this.sponsorshipMethod,
pageNum: this.current,
pageSize: 10,
divisionCode: this.user.divisionCode || ''
},
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.list = this.current > 1 ? [...this.datas, ...res.data.rows] : res.data.rows
this.pageTotal = Math.ceil(res.data.total/10)
}else {
this.$u.toast(res.msg)
}
})
}
},
onReachBottom() {
this.current++
this.getList()
}
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppRecognizeSearchList {
.user-list {
padding: 24px 32px 0 32px;
box-sizing: border-box;
.item {
width: 100%;
background: #FFF;
border-radius: 16px;
margin-bottom: 24px;
.item-top {
padding: 24px;
.title {
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #333;
margin-bottom: 12px;
word-break: break-all;
}
.info {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #666;
}
}
.item-bottom {
padding: 14px 0 10px 24px;
border-top: 1px solid #E4E5E6;
.time {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 24px;
color: #999;
}
}
}
}
}
</style>

View File

@@ -1,60 +0,0 @@
<template>
<section class="AppRecognizeSearchTab">
<div class="item" v-for="(item, index) in list" :key="index" @click="toSearch(item)">
<div class="title-flex">
<div class="title">{{item}}</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" class="right-icon">
</div>
</div>
</section>
</template>
<script>
export default {
name: "AppRecognizeSearchTab",
appName: "查询认清助养",
data() {
return {
list: ['个人助养', '集体助养']
}
},
onShow() {
document.title = '查询认亲助养'
},
methods: {
toSearch(name) {
uni.navigateTo({url: `./AppRecognizeSearch?name=${name}`})
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppRecognizeSearchTab {
.item {
padding-left: 32px;
box-sizing: border-box;
background-color: #fff;
.title-flex {
display: flex;
padding: 40px 20px 34px 0;
border-bottom: 1px solid #E4E5E6;
justify-content: space-between;
.title {
line-height: 42px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 30px;
color: #333;
}
.right-icon {
width: 40px;
height: 40px;
}
}
}
}
</style>

View File

@@ -1,197 +0,0 @@
<template>
<section class="AppSecurityObject">
<div class="top-fixed">
<div class="tab-content">
<u-tabs :list="tabList" :is-scroll="false" :current="tabIndex" @change="change" height="112" :bar-style="barStyle"
bg-color="#fff" inactive-color="#666" active-color="#222" :active-item-style="activeStyle"></u-tabs>
</div>
<div class="select-type" @click="isShowType=true">
{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', childTypeCode) || '儿童类别'}}<u-icon name="arrow-down" color="#999" size="28"></u-icon>
</div>
</div>
<div class="user-list">
<div class="item" v-for="(item, index) in list" :key="index" @click="toDetail(item)">
<div class="item-top">
<div class="title">儿童姓名{{item.name}}</div>
<div class="info">身份证号{{item.idNumber}}</div>
<div class="info">儿童类别{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', item.childTypeCode)}}</div>
<div class="type">{{item.itemName}}</div>
</div>
<div class="item-bottom">
<div class="time">{{item.applicationDate}}</div>
</div>
</div>
<AiEmpty v-if="!list.length"></AiEmpty>
</div>
<u-select v-model="isShowType" :list="typeList" value-name="value" label-name="label" @confirm="typeChange"></u-select>
</section>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: "AppSecurityObject",
appName: "保障对象管理",
data() {
return {
tabList: [{name: '全部', val: ''}, {name: '助医', val: 2}, {name: '助学', val: 1}, {name: '基本生活费', val: 3}],
tabIndex: 0,
barStyle: {
'width': '20px',
'bottom': '-3px',
'background': '#4181FF',
'border-radius': '2px'
},
activeStyle: {
'font-weight' : '400',
'color': '#222'
},
current: 1,
pageTotal: 2,
list: [],
isShowType: false,
typeList: [],
childTypeCode: ''
}
},
onLoad() {
this.$dictHlj.load(['item_Type', 'CHILD_CATEGORY_CODE']).then(() => {
this.typeList = this.$dictHlj.getDict('CHILD_CATEGORY_CODE')
this.typeList.unshift({label: '全部', value: ''})
this.getList()
})
},
onShow() {
document.title = '保障对象管理'
},
computed: {
...mapState(['user']),
},
methods: {
change(e) {
this.tabIndex = e
this.getListInit()
},
getListInit() {
this.current = 1
this.pageTotal = 2
this.list = []
this.getList()
},
getList() {
if(this.current > this.pageTotal) return
this.$http.post(`/mobile/guaranteeObject/findListPage`,
{
itemType: this.tabList[this.tabIndex].val,
pageNum: this.current,
pageSize: 10,
divisionCode: this.user.divisionCode || '',
childTypeCode: this.childTypeCode
},
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.list = this.current > 1 ? [...this.datas, ...res.data.rows] : res.data.rows
this.pageTotal = Math.ceil(res.data.total/10)
}else {
this.$u.toast(res.msg)
}
})
},
toDetail(row) {
uni.navigateTo({url: `./AppSecurityObjectDetail?childrenId=${row.childrenId}&childTypeCode=${row.childTypeCode}&itemType=${row.itemType}`})
},
typeChange(e) {
this.childTypeCode = e[0].value
this.getListInit()
},
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppSecurityObject {
.top-fixed {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 9;
}
.tab-content {
padding-right: 120px;
box-sizing: border-box;
background-color: #fff;
}
.select-type {
width: 100%;
line-height: 40px;
background: #FFF;
border-top: 1px solid #ddd;
padding: 24px 32px;
box-sizing: border-box;
font-family: PingFangSC-Regular;
font-size: 8px;
color: #222;
.u-icon {
margin-left: 14px;
}
}
.user-list {
padding: 236px 32px 0 32px;
box-sizing: border-box;
.item {
width: 100%;
background: #FFF;
border-radius: 16px;
margin-bottom: 24px;
.item-top {
padding: 24px;
position: relative;
.title {
line-height: 48px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 34px;
color: #333;
margin-bottom: 12px;
word-break: break-all;
}
.info {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #666;
}
.type {
position: absolute;
top: 24px;
right: 24px;
padding: 6px 16px;
line-height: 36px;
font-family: PingFangSC-Regular;
font-size: 26px;
color: #2A6DF4;
background: #F5F7FC;
border: 1px solid #E1E8F6;
border-radius: 8px;
}
}
.item-bottom {
padding: 14px 0 10px 24px;
border-top: 1px solid #E4E5E6;
.time {
line-height: 48px;
font-family: PingFangSC-Regular;
font-size: 24px;
color: #999;
}
}
}
}
}
</style>

View File

@@ -1,250 +0,0 @@
<template>
<section class="AppSecurityObjectDetail">
<div class="info-list">
<div class="item">
<div class="title-flex" @click="view(0)">
<div class="item-title">基本信息</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" :class="isShowBasic ? 'right-icon' : 'right-icon right-icon-active'">
</div>
<div class="item-content" v-if="isShowBasic">
<div class="item-form">
<div class="label">儿童类别</div>
<div class="value">{{$dictHlj.getLabel('CHILD_CATEGORY_CODE', info.childType) || '-'}}</div>
</div>
<div class="item-form">
<div class="label">儿童名称</div>
<div class="value">{{info.name || '-'}}</div>
</div>
<div class="item-form">
<div class="label">身份证号</div>
<div class="value">{{info.idNumber || '-'}}</div>
</div>
<div class="item-form">
<div class="label">性别</div>
<div class="value">{{$dictHlj.getLabel('GENDER_CODE', info.gender) || '-'}}</div>
</div>
<div class="item-form">
<div class="label">户籍地址</div>
<div class="value">{{info.householdAddress|| '-'}}</div>
</div>
</div>
</div>
<div class="item">
<div class="title-flex" @click="view(1)">
<div class="item-title">事项信息</div>
<img src="https://cdn.sinoecare.com/i/2024/09/06/66da67b778d99.png" alt="" :class="isShowMatter ? 'right-icon' : 'right-icon right-icon-active'">
</div>
<div class="item-content" v-if="isShowMatter">
<div class="item-form">
<div class="label">事项名称</div>
<div class="value">{{info.itemName || '-'}}</div>
</div>
<div class="item-form">
<div class="label">申请时间</div>
<div class="value">{{info.applicationDate || '-'}}</div>
</div>
<div v-if="info.itemType == 2">
<div class="item-form">
<div class="label">住院日期</div>
<div class="value">{{info.hospitalizationDate || '-'}}</div>
</div>
<div class="item-form">
<div class="label">出院日期</div>
<div class="value">{{info.dischargeDate || '-'}}</div>
</div>
<div class="item-form">
<div class="label">医疗费用</div>
<div class="value">{{info.medicalExpenses || '-'}}</div>
</div>
</div>
<div v-if="info.itemType == 1">
<div class="item-form">
<div class="label">就读学校</div>
<div class="value">{{info.school || '-'}}</div>
</div>
<div class="item-form">
<div class="label">学历</div>
<div class="value">{{info.education || '-'}}</div>
</div>
<div class="item-form">
<div class="label">助学开始日期</div>
<div class="value">{{info.educationStartDate || '-'}}</div>
</div>
<div class="item-form">
<div class="label">助学结束日期</div>
<div class="value">{{info.educationEndDate || '-'}}</div>
</div>
</div>
<div v-if="info.itemType == 3">
<!-- <div class="item-form">
<div class="label">起领年月</div>
<div class="value">{{info.startingDate || '-'}}</div>
</div>
<div class="item-form">
<div class="label">末领年月</div>
<div class="value">{{info.lastDate || '-'}}</div>
</div> -->
</div>
</div>
</div>
</div>
<!-- <div class="footer-btn">
<div class="btn primary" @click="toView()">查看儿童详细信息</div>
<div class="btn">返回</div>
</div> -->
</section>
</template>
<script>
import {mapState} from 'vuex'
export default {
name: "AppSecurityObjectDetail",
appName: "保障对象详情",
data() {
return {
childrenId: '',
childTypeCode: '',
itemType: '',
info: {},
isShowBasic: true,
isShowMatter: true,
}
},
onLoad(option) {
this.childrenId = option.childrenId
this.childTypeCode = option.childTypeCode
this.itemType = option.itemType
this.$dictHlj.load(['CHILD_CATEGORY_CODE', 'GENDER_CODE']).then(() => {
this.getDetail()
})
},
onShow() {
document.title = '保障对象详情'
},
computed: {
...mapState(['user']),
},
methods: {
view(type) {
if(!type) {
this.isShowBasic = !this.isShowBasic
}else if(type == 1) {
this.isShowMatter = !this.isShowMatter
}
},
getDetail() {
this.$http.post(`/mobile/guaranteeObject/findDetails`,
{
childrenId: this.childrenId,
childTypeCode: this.childTypeCode,
divisionCode: this.user.divisionCode || "230000000000",
itemType: this.itemType
},
{
withoutToken: true
}).then((res) => {
if (res.code == 200) {
this.info = {...res.data}
}else {
this.$u.toast(res.msg)
}
})
},
},
}
</script>
<style lang="scss" scoped>
uni-page-body {
background-color: #F5F6F7;
}
.AppSecurityObjectDetail {
.info-list {
.item {
padding-left: 32px;
box-sizing: border-box;
margin-bottom: 24px;
background-color: #fff;
.title-flex {
width: 100%;
display: flex;
line-height: 42px;
.item-title {
width: calc(100% - 80px);
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #222;
padding: 20px 0;
}
.right-icon {
width: 40px;
height: 40px;
padding: 20px;
transform: rotate(-90deg);
transition: all 0.3s ease-in-out;
}
.right-icon-active {
transform: rotate(90deg);
}
}
.item-content {
.item-form {
width: 100%;
padding: 16px 20px 16px 0;
border-bottom: 1px solid #E4E5E6;
box-sizing: border-box;
word-break: break-all;
font-family: PingFangSC-Regular;
.label {
height: 44px;
font-size: 32px;
color: #999;
margin-bottom: 20px;
}
.value {
line-height: 40px;
font-size: 28px;
color: #222;
letter-spacing: 0;
}
}
}
}
}
.footer-btn {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
padding: 16px 32px 52px 16px;
box-sizing: border-box;
background-color: #fff;
z-index: 9;
.btn {
width: 100%;
text-align: center;
height: 96px;
line-height: 94px;
border: 1px solid #2183FF;
border-radius: 8px;
font-family: PingFangSC-Medium;
font-weight: 500;
font-size: 32px;
color: #2183FF;
margin-bottom: 16px;
}
.primary {
background-color: #2183FF;
color: #fff;
}
}
}
</style>