This commit is contained in:
yanran200730
2022-01-27 14:33:22 +08:00
76 changed files with 1637 additions and 2014 deletions

View File

@@ -74,6 +74,12 @@ const start = () => {
name: file.replace(/.*\\([^\\]+).vue/g, '$1'),
path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/')
}
let vue = fs.readFileSync(file)?.toString()
if (/appName/.test(vue)) {
let appName = vue.replace(/[\s\S]*(appName:.+),[\s\S]*/gm, '$1'),
title = appName.replace(/(appName:|["'])/g, '')
app.style = {navigationBarTitleText: title}
}
json.pages.push(app)
}
}).then(() => {
@@ -83,6 +89,12 @@ const start = () => {
name: file.replace(/.*\\([^\\]+).vue/g, '$1'),
path: file.replace(/^src\\(.*).vue/g, '$1').replace(/\\/g, '/')
}
let vue = fs.readFileSync(file)?.toString()
if (/appName/.test(vue)) {
let appName = vue.replace(/[\s\S]*(appName:.+),[\s\S]*/gm, '$1'),
title = appName.replace(/(appName:|["'])/g, '')
app.style = {navigationBarTitleText: title}
}
json.pages.push(app)
}
})

View File

@@ -69,7 +69,7 @@ export default {
this.checkAccess()
},
onShow() {
uni.setNavigationBarTitle({title:"问卷调查"})
document.title = '问卷调查'
wx.hideOptionMenu()
},
}

View File

@@ -5,21 +5,18 @@
</template>
<script>
import Detail from './detail'
import Add from './add'
import List from './list'
import SearchMap from './components/searchMap'
import Map from './map'
import SearchMap from "./components/searchMap";
export default {
name: 'AppBuilding',
components: {SearchMap},
appName: '以房找人',
data() {
return {
show: true
}
},
components: {Detail, Add, List, SearchMap, Map},
onShow() {
this.show = false
this.$nextTick(() => {

View File

@@ -108,6 +108,7 @@
import {mapState} from 'vuex'
export default {
name:"searchMap",
data() {
return {
ops: {},

View File

@@ -69,7 +69,7 @@
<div class="row-item center">
<span class="right-line"></span>
<span class="left-line"></span>
<h3>{{ $dateFormat(houseInfo.startDate,'YYYY-MM-DD') }}</h3>
<h3>{{ $dateFormat(houseInfo.startDate, 'YYYY-MM-DD') }}</h3>
<p>起租日期</p>
</div>
<div class="row-item right">
@@ -168,6 +168,9 @@ export default {
this.$dict.load('householdRelation', 'houselivingStatus', 'houseLeaseSituation', 'houseUseStatus',
'isFilingCertificateStatus', 'communityBuildingType', 'yesOrNo', 'BulidResidentType')
this.getBuilding()
if (this.show && !!this.houseId) {
this.getHouseDetail(this.houseId)
}
},
methods: {
getSelectList(communityId) {

View File

@@ -43,6 +43,7 @@ export default {
this.areaName = this.user.areaName
this.getList()
this.cdn = this.$cdn.replace("/dvcp/h5", "");
document.title = '乡村相册'
},
methods: {
areaSelect(e) {

View File

@@ -27,8 +27,7 @@ Vue.prototype.$http = axios;
Vue.prototype.$cdn = 'https://cdn.cunwuyun.cn/dvcp/h5/';
Object.keys(utils).map((e) => (Vue.prototype['$' + e] = utils[e]));
App.mpType = 'app';
// process.env.NODE_ENV == 'development' && new VConsole();
new VConsole()
process.env.NODE_ENV == 'development' && new VConsole();
const app = new Vue({
store,
...App

View File

@@ -6,6 +6,9 @@
<ai-result v-if="result.tips" v-bind="result"/>
<input v-if="!!$route.query.code" class="codeText" :value="$route.query.code"/>
<div class="codeBtn" @click="handleLogin">去登录</div>
<u-radio-group v-model="currentLib" @change="getApps">
<u-radio v-for="(op,i) in libs" :key="i" :name="op.dir">{{ op.label }}</u-radio>
</u-radio-group>
<input class="codeText" v-model="search" placeholder="搜索要查找的应用"/>
<div flex class="appsPane wrap">
<b v-for="app in appsList" :key="app.key" @tap="handleGotoApp(app)">{{ app.name }}</b>
@@ -16,10 +19,11 @@
<script>
import {mapActions, mapState} from 'vuex'
import AiResult from "../components/AiResult";
import AiSelect from "../components/AiSelect";
export default {
name: 'loading',
components: {AiResult},
components: {AiSelect, AiResult},
inject: ['root'],
computed: {
...mapState(['token', 'openUser', 'user']),
@@ -35,33 +39,26 @@ export default {
return {
result: {},
apps: [],
libs: [
{label: "通用版", dir: "apps"},
{label: "上架版", dir: "sass"},
],
currentLib: "apps",
search: ""
}
},
methods: {
...mapActions(['agentSign']),
redirectTo(path) {
let {query, hash} = this.$route
delete query.app
uni.navigateTo({
url: `/apps${path}`, success: () => {
this.$router.push({query, hash})
},
fail: err => {
console.error(err)
}
})
},
handleGotoApp(app) {
uni.navigateTo({url: `/apps${app.path}`})
uni.navigateTo({url: `/${this.currentLib}${app.path}`})
},
handleLogin() {
uni.navigateTo({url: "./login"})
},
getApps() {
this.apps = []
let applications = require.context('../apps', true, /\.(\/.+)\/App[^\/]+\.vue$/)
console.log(applications.keys())
let applications = this.currentLib == "apps" ? require.context('../apps', true, /\.(\/.+)\/App[^\/]+\.vue$/) :
this.currentLib == "sass" ? require.context('../sass', true, /\.(\/.+)\/App[^\/]+\.vue$/) : null
applications.keys().map(path => {
if (applications(path).default) {
let {name: key, appName: name} = applications(path).default

View File

@@ -5,21 +5,18 @@
</template>
<script>
import Detail from './detail'
import Add from './add'
import List from './list'
import SearchMap from './components/searchMap'
import Map from './map'
import SearchMap from "./components/searchMap";
export default {
name: 'AppBuilding',
components: {SearchMap},
appName: '以房找人',
data() {
return {
show: true
}
},
components: {Detail, Add, List, SearchMap, Map},
onShow() {
this.show = false
this.$nextTick(() => {

View File

@@ -108,6 +108,7 @@
import {mapState} from 'vuex'
export default {
name:"searchMap",
data() {
return {
ops: {},

View File

@@ -3,11 +3,15 @@
<div class="build-btn">
<img src="./components/img/model-icon.png" alt="" @click="toDetail"> 楼栋<br/>模型
</div>
<div class="build-btn locate">
<img src="https://cdn.cunwuyun.cn/dvcp/h5/Location2.png" alt="" @click="getLocale"/>
当前<br>位置
</div>
<div class="map-content">
<AiTMap v-if="user.areaId" :areaId="user.areaId" :map.sync="map" :lib.sync="lib" :ops="ops" :libraries="['service', 'tools']"></AiTMap>
<AiTMap v-if="user.areaId" :areaId="user.areaId" :map.sync="map" :lib.sync="lib" :ops="ops"
:libraries="['service', 'tools']"/>
</div>
<div class="footer">
<div class="click" @click="isFlag=true">点击定位</div>
<div class="btn" @click="confirm">确认定位</div>
</div>
<!-- <u-popup v-model="show" mode="bottom" border-radius="14">
@@ -62,7 +66,7 @@ export default {
retryTimes: 0
}
},
computed: {...mapState(['user', ])},
computed: {...mapState(['user',])},
mounted() {
this.initMap()
},
@@ -72,28 +76,11 @@ export default {
methods: {
initMap() { //初始化地图
this.$nextTick(() => {
let {lib: TMap, map, retryTimes} = this
let {map, retryTimes} = this
if (map) {
map.setZoom(15)
map.on("click", (evt) => {
if (this.markerLayer) {
this.markerLayer.setMap(null);
}
this.markerLayer = new TMap.MultiMarker({
id: 'marker-layer',
map: map
});
if (this.isFlag) {
this.markerLayer.add({
position: evt.latLng
});
this.latLng = {
lat: evt.latLng.lat,
lng: evt.latLng.lng
}
}
this.handleMapClick(evt)
});
} else {
if (retryTimes < 5)
@@ -104,23 +91,39 @@ export default {
}
})
},
getLocale() {
wx.getLocation({
type: 'gcj02',
success: res => {
let {latitude: lat, longitude: lng} = res
this.handleMapClick({latlng: {lat, lng}})
}
})
},
handleMapClick(evt) {
let {lib: TMap, map} = this
if (this.markerLayer) {
this.markerLayer.setMap(null);
}
this.markerLayer = new TMap.MultiMarker({id: 'marker-layer', map});
this.markerLayer.add({
position: evt.latLng
});
this.latLng = evt.latlng
},
confirm() {
if (!this.latLng.lat) {
return this.$u.toast(`未获取到定位信息,无法定位`)
}
let {id} = this.$route.query
this.$http.post(`/app/appcommunitybuildinginfo/updateLocation`, null, {
params: {
id,
lat: this.latLng.lat,
lng: this.latLng.lng,
}
params: {id, ...this.latLng}
}).then(res => {
if (res.code == 0) {
if (res?.code == 0) {
this.$u.toast('提交成功')
uni.$emit('updateList')
setTimeout(() => {
uni.navigateBack()
uni.navigateBack({})
}, 600)
}
})
@@ -158,6 +161,10 @@ uni-page-body {
color: #666;
line-height: 30px;
&.locate {
transform: translateY(calc(-100% - 20px));
}
img {
width: 48px;
height: 48px;

View File

@@ -1,118 +0,0 @@
<template>
<div class="AppHome">
<component v-if="refresh" :is="component" @change="onChange" :params="params"> </component>
<div class="tabs">
<div class="item" @click="tabClick(index, item.component)" v-for="(item, index) in tabs" :key="index">
<img :src="tabIndex == index ? item.activeImg : item.img" alt="" />
<p :class="tabIndex == index ? 'color-3267F0' : ''">{{ item.text }}</p>
</div>
</div>
</div>
</template>
<script>
import home from './home.vue'
import application from './application.vue'
import statistics from './statistics.vue'
import my from './my.vue'
export default {
name: 'AppHome',
appName: '首页',
data() {
return {
component: 'home',
params: {},
refresh: true,
tabIndex: 0,
tabs: [
{
img: require('./components/img/home-icon.png'),
activeImg: require('./components/img/home-icon-active.png'),
text: '首页',
component: 'home',
},
{
img: require('./components/img/app-icon.png'),
activeImg: require('./components/img/app-icon-active.png'),
text: '应用',
component: 'application',
},
{
img: require('./components/img/statistics-icon.png'),
activeImg: require('./components/img/statistics-icon-active.png'),
text: '统计',
component: 'statistics',
},
{
img: require('./components/img/my-icon.png'),
activeImg: require('./components/img/my-icon-active.png'),
text: '我的',
component: 'my'
}
],
isTab: true,
}
},
components: {
home,
application,
statistics,
my,
},
methods: {
onChange(e) {
this.params = e.params
this.component = e.type
},
tabClick(index, component) {
this.tabIndex = index
this.component = component
this.refresh = false
this.$nextTick(() => {
this.refresh = true
})
},
linkTo(url) {
uni.navigateTo({ url })
},
},
}
</script>
<style lang="scss" scoped>
.AppHome {
.tabs {
width: 100%;
height: 98px;
background: #fff;
border-top: 1px solid #ddd;
position: fixed;
bottom: 0;
left: 0;
display: flex;
z-index: 999;
.item {
flex: 1;
text-align: center;
img {
width: 56px;
height: 56px;
margin-top: 8px;
}
p {
font-size: 22px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #c4cad4;
line-height: 8px;
}
.color-3267F0 {
color: #3267f0;
}
}
}
}
</style>

View File

@@ -1,166 +0,0 @@
<template>
<div class="application">
<!-- 网格管理 -->
<div class="card">
<div class="card-title">网格管理</div>
<div class="app-list">
<div class="app-item">
<div>
<img src="./components/img/icon1wg@2x.png" alt="" class="app-img">
</div>
<div class="app-name">网格管理</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon2ts@2x.png" alt="" class="app-img">
</div>
<div class="app-name">特殊人群</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon3yf@2x.png" alt="" class="app-img">
</div>
<div class="app-name">以房找人</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon4jm@2x.png" alt="" class="app-img">
</div>
<div class="app-name">居民管理</div>
</div>
</div>
</div>
<!-- 事务处理 -->
<div class="card">
<div class="card-title">事务处理</div>
<div class="app-list">
<div class="app-item">
<div>
<img src="./components/img/icon5md@2x.png" alt="" class="app-img">
</div>
<div class="app-name">矛盾调解</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon6zf@2x.png" alt="" class="app-img">
</div>
<div class="app-name">走访慰问</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon7sw@2x.png" alt="" class="app-img">
</div>
<div class="app-name">事务记录</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon8wj@2x.png" alt="" class="app-img">
</div>
<div class="app-name">问卷表单</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon9hy@2x.png" alt="" class="app-img">
</div>
<div class="app-name">会议通知</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon10txl@2x.png" alt="" class="app-img">
</div>
<div class="app-name">通讯录</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon11tzgg@2x.png" alt="" class="app-img">
</div>
<div class="app-name">通知公告</div>
</div>
</div>
</div>
<!-- 疫情防控 -->
<div class="card">
<div class="card-title">疫情防控</div>
<div class="app-list">
<div class="app-item">
<div>
<img src="./components/img/icon12jksb@2x.png" alt="" class="app-img">
</div>
<div class="app-name">健康上报</div>
</div>
<div class="app-item">
<div>
<img src="./components/img/icon13fxdj@2x.png" alt="" class="app-img">
</div>
<div class="app-name">返乡登记</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'application',
data() {
return {
}
},
methods: {
},
onShow() {
document.title = '应用'
},
}
</script>
<style lang="scss" scoped>
.application {
padding: 40px 28px 0px 28px;
box-sizing: border-box;
.card {
padding: 20px 30px;
margin-bottom: 32px;
box-sizing: border-box;
width: 100%;
background-color: #FFFFFF;
border-radius: 12px;
box-shadow: 0px 2px 4px 2px rgba(173, 173, 173, 0.05);
.card-title {
height: 40px;
line-height: 40px;
font-weight: 800;
}
.app-list {
display: flex;
flex-wrap: wrap;
.app-item {
width: 25%;
height: 150px;
text-align: center;
padding-top: 20px;
box-sizing: border-box;
.app-img {
width: 72px;
height: 72px;
}
.app-name {
font-size: 26px;
}
}
}
}
}
</style>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 891 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 456 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 973 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 896 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 560 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

View File

@@ -1,92 +0,0 @@
<template>
<div class="feedback">
<div class="suggest">
<div class="title">请输入您的宝贵意见</div>
<textarea v-model="content" placeholder="请输入500字以内" placeholder-style="font-size: 16px;" style="width: 100%;"></textarea>
</div>
<div class="space"></div>
<div class="photo">
<div class="photo-title">图片 <span>最多9张</span></div>
<div class="pad-120">
<AiUploader :limit="9" multiple :def.sync="picture" placeholder="上传图片"></AiUploader>
</div>
</div>
<div style="height: 56px;"></div>
<div class="btn" @click="submit">保存</div>
</div>
</template>
<script>
export default {
name: 'feedback',
data() {
return {
content: '',
picture: []
}
},
methods: {
submit() {}
},
onShow() {
document.title = '意见反馈'
},
}
</script>
<style lang="scss" scoped>
.feedback {
.suggest {
padding: 15px 30px;
box-sizing: border-box;
background-color: #FFFFFF;
.title {
width: 100%;
height: 100px;
line-height: 100px;
font-size: 32px;
color: #333333;
}
}
.space {
width: 100%;
height: 16px;
background-color: #F5F5F5;
}
.photo {
background-color: #FFFFFF;
padding: 20px 30px;
.photo-title {
width: 100%;
height: 100px;
line-height: 80px;
color: #333333;
& > span {
color: #999999;
}
}
}
.btn {
position: fixed;
bottom: 0px;
left: 0px;
width: 100%;
height: 112px;
line-height: 112px;
text-align: center;
background-color: #1365DD;
color: #FFFFFF;
}
}
</style>

View File

@@ -1,498 +0,0 @@
<template>
<div class="home">
<div class="header-img">
<img src="./components/img/home-banner-center.png" alt="">
</div>
<div class="tab-flex">
<div class="item" v-for="(item, index) in tabs" :key="index">
<img :src="item.icon" alt="">
<p>{{item.text}}</p>
</div>
</div>
<div class="app-list">
<div class="item" v-for="(item, index) in appList" :key="index">
<img :src="item.icon" alt="">
<p>{{item.text}}</p>
</div>
</div>
<div class="banner-img">
<img src="./components/img/home-banner-center.png" alt="">
</div>
<div class="notice">
<div class="left">
<img src="./components/img/notice.png" alt="">
</div>
<div class="right">
<p><span>最新</span>市委人大工作会议召开关于各县(市委人大工作会议召开关于各县</p>
<p><span>最新</span>市委人大工作会议召开关于各县(市委人大工作会议召开关于各县</p>
</div>
</div>
<div class="matter">
<div class="left">
<div>
<p :class="tabIndex == 1 ? 'title-matter' : 'title-matter active'" @click="tabIndex = 0">待办事件</p>
<p :class="tabIndex == 1 ? 'title-meet active' : 'title-meet'" @click="tabIndex = 1">待参加会议</p>
<span class="tips" :class="tabIndex == 1 ? 'right-tips' : 'left-tips'"></span>
</div>
<p class="text">即刻提醒,及时跟进工作进度</p>
</div>
<div class="right">
<img src="./components/img/matter-banner.png" alt="">
</div>
</div>
<div class="matter-list" v-if="tabIndex != 1">
<div class="item">
<p>
<span>待处理</span>
张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行
</p>
<div class="flex">
<div class="time">
<img src="./components/img/time-icon.png" alt="">2022-01-10 14:00:08
</div>
<div class="type">民生服务</div>
</div>
</div>
<div class="item">
<p>
<span>待处理</span>
张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行
</p>
<div class="flex">
<div class="time">
<img src="./components/img/time-icon.png" alt="">2022-01-10 14:00:08
</div>
<div class="type">民生服务</div>
</div>
</div>
<div class="item">
<p>
<span>待处理</span>
张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行张家湾地铁站门口有大量建筑垃圾没有进行
</p>
<div class="flex">
<div class="time">
<img src="./components/img/time-icon.png" alt="">2022-01-10 14:00:08
</div>
<div class="type">民生服务</div>
</div>
</div>
</div>
<div class="meet-list">
<div class="item">
<div class="item-content">
<p class="title">区统计局数据上报会议</p>
<div class="time-flex">
<div class="time">
<h2>14:30</h2>
<p>2022年1月9日 周二</p>
</div>
<img src="./components/img/home-right-big.png" alt="">
<div class="time">
<h2>14:30</h2>
<p>2022年1月9日 周二</p>
</div>
</div>
<div class="info">
<span class="label">发起人员</span>
<span class="value">李维民</span>
</div>
<div class="info">
<span class="label">会议地点</span>
<span class="value">综合楼6楼 大会议室综合楼6楼 大会议室综合楼6楼 大会议室</span>
</div>
<img src="./components/img/status0.png" alt="" class="status-img">
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: 'home',
data() {
return {
tabs: [
{
icon: require('./components/img/mdtj.png'),
text: '矛盾调解'
},
{
icon: require('./components/img/wggl.png'),
text: '网格管理'
},
{
icon: require('./components/img/tsrq.png'),
text: '特殊人群'
},
{
icon: require('./components/img/zfww.png'),
text: '走访慰问'
}
],
appList: [
{
icon: require('./components/img/hytz.png'),
text: '会议通知'
},
{
icon: require('./components/img/txl.png'),
text: '通讯录'
},
{
icon: require('./components/img/wjbd.png'),
text: '问卷表单'
},
{
icon: require('./components/img/swjl.png'),
text: '事务记录'
},
{
icon: require('./components/img/yfzr.png'),
text: '以房找人'
},
{
icon: require('./components/img/jmgl.png'),
text: '居民管理'
},
{
icon: require('./components/img/jkgl.png'),
text: '健康管理'
},
{
icon: require('./components/img/gd.png'),
text: '更多'
},
],
tabIndex: 1
}
},
methods: {
},
onShow() {
document.title = '首页'
},
}
</script>
<style lang="scss" scoped>
.home {
position: relative;
overflow: hidden;
background-color: #F4F7FD;
height: calc(100% - 98px);
.header-img{
width: 100%;
img{
width: 100%;
height: 324px;
}
}
.tab-flex{
width: calc(100% - 64px);
background: #FFF;
box-shadow: 0px 2px 4px 0px rgba(146, 211, 255, 0.3);
border-radius: 16px;
display: flex;
position: absolute;
top: 300px;
left: 30px;
.item{
flex: 1;
text-align: center;
padding-bottom: 30px;
img{
width: 88px;
height: 88px;
margin-top: 32px;
}
p{
margin-top: 4px;
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 40px;
}
}
}
.app-list{
width: 100%;
background: #FFF;
border-radius: 16px 16px 0px 0px;
padding: 194px 32px 16px;
box-sizing: border-box;
overflow: hidden;
.item{
width: 25%;
float: left;
text-align: center;
padding-bottom: 32px;
img{
width: 48px;
height: 48px;
}
p{
margin-top: 8px;
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 40px;
}
}
}
.banner-img{
width: 100%;
padding: 0 24px 48px;
background-color: #fff;
box-sizing: border-box;
img{
width: 100%;
height: 168px;
border-radius: 16px;
}
}
.notice{
padding: 24px 58px 22px 32px;
box-sizing: border-box;
background-color: #fff;
display: flex;
margin-bottom: 12px;
.left{
width: 94px;
img{
width: 68px;
height: 82px;
}
}
.right{
width: calc(100% - 94px);
p{
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 18px;
span{
display: inline-block;
padding: 0 6px;
line-height: 36px;
border-radius: 4px;
border: 1px solid #23C3E4;
box-sizing: border-box;
font-size: 26px;
font-family: PingFangSC-Regular, PingFang SC;
color: #23C3E4;
margin-right: 16px;
}
}
}
}
.matter{
background-color: #fff;
padding: 20px 24px 28px 32px;
box-sizing: border-box;
display: flex;
border-bottom: 2px solid #f3f6f9;
.left{
width: calc(100% - 328px);
padding-top: 58px;
div{
display: flex;
justify-content: space-between;
position: relative;
height: 52px;
p{
font-size: 30px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999;
line-height: 42px;
position: absolute;
top: 0;
z-index: 9;
}
.title-matter{
left: 0;
}
.title-meet{
right: 0;
}
.active{
font-size: 38px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 52px;
}
.tips{
display: inline-block;
width: 28px;
height: 28px;
background: linear-gradient(63deg, rgba(228, 244, 252, 0.62) 0%, #D6EDF8 28%, #3AB3F0 100%);
border-radius: 50%;
position: absolute;
top: 0;
z-index: 1;
}
.right-tips{
right: -10px;
}
.left-tips{
left: 128px;
}
}
.text{
font-size: 26px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999;
line-height: 36px;
margin-top: 8px;
}
}
.right{
width: 328px;
img{
width: 286px;
height: 170px;
}
}
}
.matter-list{
.item{
padding: 32px 32px 48px 24px;
box-sizing: border-box;
background-color: #fff;
border-bottom: 1px solid #ddd;
p{
width: 100%;
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
font-size: 30px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
color: #333;
line-height: 40px;
span{
display: inline-block;
padding: 0 10px;
font-size: 24px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFF;
line-height: 40px;
border-radius: 8px;
margin-right: 16px;
background-color: #F1826D;
}
}
.flex{
margin-top: 32px;
display: flex;
justify-content: space-between;
img{
width: 28px;
height: 28px;
margin-right: 4px;
vertical-align: text-bottom;
}
.time{
font-size: 24px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #666;
line-height: 34px;
}
.type{
display: inline-block;
padding: 0 14px;
font-size: 24px;
font-family: PingFangSC-Regular, PingFang SC;
color: #44B6F0;
line-height: 34px;
border-radius: 18px;
border: 1px solid #44B6F0;
}
}
}
}
.meet-list{
.item{
padding: 0 32px 32px 32px;
background-color: #fff;
.item-content{
padding: 32px 32px 22px 32px;
background-color: #F7F9FF;
position: relative;
.title{
width: 640px;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 44px;
}
.time-flex{
display: flex;
justify-content: space-between;
padding: 48px 0;
img{
width: 88px;
height: 88px;
}
.time{
width: 200px;
text-align: center;
h2{
font-size: 60px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 84px;
}
p{
font-size: 22px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 32px;
}
}
}
.info{
font-size: 30px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
line-height: 42px;
margin-bottom: 20px;
.label{
display: inline-block;
width: 150px;
color: #999;
vertical-align: top;
}
.value{
display: inline-block;
width: calc(100% - 150px);
color: #343D65;
}
}
.status-img{
width: 112px;
height: 112px;
position: absolute;
top: 0;
right: 0;
}
}
}
}
}
</style>

View File

@@ -1,52 +0,0 @@
<template>
<section class="mainEntry">
<component ref="CurrentEntry" v-if="app" :is="app"/>
<div v-else>
<AiResult tips="读取数据中..." status="loading" btn="返回主页" :btn-tap="back"/>
</div>
</section>
</template>
<script>
import {mapActions} from "vuex";
export default {
name: "mainEntry",
inject: {root: {}},
data() {
return {
app: ""
}
},
methods: {
...mapActions(['agentSign']),
back() {
// uni.reLaunch({url:""})
this.root.goto({path: "/pages/loading"})
},
init(params) {
this.agentSign(params).then(() => {
this.app = params.app || ""
this.$nextTick(() => {
this.$refs.CurrentEntry?.emitShow?.()
})
})
}
},
onLoad(params) {
this.init(params)
},
onShow() {
this.init(this.$route.query)
},
onReachBottom() {
this.$refs.CurrentEntry?.emitReachBottom?.()
}
}
</script>
<style lang="scss" scoped>
.mainEntry {
min-height: 100%;
}
</style>

View File

@@ -1,248 +0,0 @@
<template>
<div class="my">
<!-- 个人信息 -->
<div class="card">
<div class="userInfoCard">
<div class="user">
<div>
<img src="./components/img/tx@2x.png" alt="" class="avtar">
<!-- <img :src="" alt="" class="avtar"> -->
</div>
<div class="user-info">
<div class="user-name">李文盛</div>
<div class="user-job">长岗路街道办事处花园社区网格员</div>
</div>
</div>
<div class="myGrid">
<div class="my-grid">我的网格<span class="num">9</span></div>
<div class="all-grid">
<div class="gridBox">
<div class="grid-name"><span>长港路网格一</span></div>
<div class="grid-name"><span>长港路网格二</span></div>
<div class="grid-name"><span>长港路网格三</span></div>
</div>
<div class="arrow-right" @click="more"><u-icon name="arrow-right"></u-icon></div>
</div>
</div>
</div>
</div>
<!-- 选项 -->
<div class="option">
<div class="option-item">
<div>
<img src="./components/img/txsc@2x.png" alt="" class="option-img">
</div>
<div class="option-info">
<div class="option-text">头像上传</div>
<div class="option-icon" @click="upload">
<u-icon name="arrow-right" size="28"></u-icon>
</div>
</div>
</div>
<div class="option-item">
<div>
<img src="./components/img/yjfk@2x.png" alt="" class="option-img">
</div>
<div class="option-info">
<div class="option-text">意见反馈</div>
<div class="option-icon" @click="feedback">
<u-icon name="arrow-right" size="28"></u-icon>
</div>
</div>
</div>
<div class="option-item">
<div>
<img src="./components/img/lxwm@2x.png" alt="" class="option-img">
</div>
<div class="option-info">
<div class="option-text">联系我们</div>
<div class="option-icon" @click="contactUs">
<u-icon name="arrow-right" size="28"></u-icon>
</div>
</div>
</div>
</div>
<!-- 头像上传遮罩层 -->
<u-popup v-model="show" mode="bottom" border-radius="0">
<div class="btn-pat">拍照</div>
<div class="btn-album">从相册选择</div>
<div class="space"></div>
<div class="btn-cancel">取消</div>
</u-popup>
</div>
</template>
<script>
export default {
name: 'my',
data() {
return {
show: false,
}
},
methods: {
upload() {
this.show = true
},
feedback() {
uni.navigateTo({url: './feedback'})
},
contactUs() {}
},
onShow() {
document.title = '个人中心'
},
}
</script>
<style lang="scss" scoped>
.my {
background-color: #fff;
.card {
position: relative;
height: 458px;
background: url(./components/img/bg.png) no-repeat;
background-size: 100%;
.userInfoCard {
position: absolute;
top: 180px;
left: 32px;
width: calc(100% - 64px);
height: 320px;
background-color: #FFFFFF;
border-radius: 12px;
padding-left: 32px;
box-sizing: border-box;
box-shadow: 0px 2px 4px 2px rgba(0, 0, 0, 0.12);
.user {
display: flex;
justify-content: flex-start;
padding-top: 44px;
margin-bottom: 15px;
.avtar {
width: 90px;
height: 90px;
margin-right: 24px;
}
.user-name {
font-size: 44px;
color: #333333;
font-weight: 800;
}
.user-job {
font-size: 28px;
color: #999999;
}
}
.myGrid {
padding: 5px 15px;
.my-grid {
font-size: 28px;
font-weight: 800;
color: #333333;
.num {
font-weight: normal;
margin-left: 15px;
font-size: 26px;
color: #3476B9;
}
}
.all-grid {
display: flex;
justify-content: space-between;
margin-top: 16px;
.gridBox {
display: flex;
justify-content: flex-start;
.grid-name {
margin-right: 10px;
height: 46px;
line-height: 46px;
background-color: #F4F9FF;
color: #3476B9;
font-size: 24px;
padding: 6px 16px;
}
}
.arrow-right {
width: 40px;
padding-top: 10px;
}
}
}
}
}
.option {
margin-top: 64px;
background-color: #fff;
.option-item {
display: flex;
justify-content: flex-start;
align-items: center;
width: 100%;
height: 104px;
box-sizing: border-box;
padding: 0 30px;
.option-img {
width: 50px;
}
.option-info {
display: flex;
justify-content: space-between;
width: 100%;
.option-text {
font-size: 20px;
}
.option-icon {
padding-left: 100px;
}
}
}
}
.btn-pat,
.btn-album,
.btn-cancel {
width: 100%;
height: 112px;
line-height: 112px;
text-align: center;
}
.btn-pat {
border-bottom: 1px solid #DDDDDD;
}
.space {
width: 100%;
height: 16px;
background-color: #F5F5F5;
}
}
</style>

View File

@@ -1,250 +0,0 @@
<template>
<div class="statistics">
<div class="tab-select">
<div class="item">
本周<img src="./components/img/down-icon-666.png" alt="">
</div>
<div class="item">
所有网格<img src="./components/img/down-icon-666.png" alt="">
</div>
</div>
<p class="time-title">2021-12-18 2022-1-14</p>
<div class="num-content">
<div class="item">
<p>新增居民群</p>
<h2>341</h2>
<img src="./components/img/down-icon-666.png" alt="">
<span class="right-line"></span>
</div>
<div class="item">
<p>新增居民群</p>
<h2>341</h2>
<img src="./components/img/down-icon-666.png" alt="">
<span class="right-line"></span>
</div>
<div class="item">
<p>新增居民群</p>
<h2>341</h2>
<img src="./components/img/down-icon-666.png" alt="">
<span class="right-line"></span>
</div>
<div class="item">
<p>新增居民群</p>
<h2>341</h2>
<img src="./components/img/down-icon-666.png" alt="">
<span class="right-line"></span>
</div>
</div>
<div class="list-content">
<div class="title">
<div class="text">网格入群数排行</div>
<div class="more">更多<img src="./components/img/right-icon-999.png" alt=""></div>
</div>
<div class="content">
<div class="item">
<div class="name">
<span>1</span>
<p>千岩街网格一千岩街</p>
</div>
<div class="num">6702</div>
</div>
</div>
</div>
<div class="list-content">
<div class="title">
<div class="text">网格事件处理排行</div>
<div class="more">更多<img src="./components/img/right-icon-999.png" alt=""></div>
</div>
<div class="content">
<div class="item">
<div class="name">
<span>1</span>
<p>千岩街网格一千岩街</p>
</div>
<div class="num">6702</div>
</div>
</div>
</div>
<img src="./components/img/user-static.png" alt="" class="back-img">
</div>
</template>
<script>
export default {
name: 'statistics',
data() {
return {
}
},
methods: {
},
onShow() {
document.title = '统计'
},
}
</script>
<style lang="scss" scoped>
.statistics {
height: calc(100% - 98px);
background-color: #F6F8F8;
.tab-select{
display: flex;
background-color: #fff;
.item{
flex: 1;
text-align: center;
line-height: 88px;
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
img{
width: 32px;
height: 32px;
margin-left: 8px;
vertical-align: middle;
}
}
}
.time-title{
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
line-height: 28px;
padding-left: 54px;
margin: 28px 0 38px 0;
}
.num-content{
width: calc(100% - 32px);
margin: 0 16px 32px 16px;
padding: 0 20px 0 4px;
box-sizing: border-box;
background-color: #fff;
overflow: hidden;
.item{
display: inline-block;
width: 50%;
float: left;
position: relative;
margin-top: 36px;
padding: 0 44px 36px 48px;
box-sizing: border-box;
border-bottom: 1px solid #F5F6F9;
p{
font-size: 26px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #71777E;
line-height: 36px;
margin-top: -18px;
}
h2{
font-size: 40px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 56px;
}
img{
width: 72px;
height: 72px;
position: absolute;
right: 44px;
top: 0;
}
.right-line{
position: absolute;
top: 0;
right: 0;
height: 72px;
border-right: 1px solid #F6F6F6;
}
}
.item:nth-of-type(2n) {
.right-line{
display: none;
}
}
.border-b{
border-bottom: 1px solid #F6F6F6;
}
}
.list-content{
width: calc(100% - 60px);
margin: 0 30px 32px;
border-radius: 16px;
.title{
display: flex;
justify-content: space-between;
background-color: #fff;
padding: 28px 6px 0 50px;
.text{
font-size: 28px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #000;
line-height: 48px;
}
.more{
font-size: 28px;
font-family: PingFangSC-Regular, PingFang SC;
color: #666;
line-height: 40px;
img{
width: 40px;
height: 40px;
vertical-align: middle;
}
}
}
.content{
padding: 0 50px 32px 50px;
background-color: #fff;
}
.item{
display: flex;
justify-content: space-between;
padding: 28px 0;
border-bottom: 1px solid #E1E1E1;
.name{
width: calc(100% - 100px);
span{
display: inline-block;
padding: 0 10px;
height: 30px;
background: #3399FF;
font-size: 20px;
font-family: PingFangSC-Regular, PingFang SC;
color: #FFF;
line-height: 30px;
border-radius: 50%;
margin-right: 34px;
vertical-align: top;
margin-top: 6px;
}
p{
display: inline-block;
width: calc(100% - 70px);
word-break: break-all;
}
}
.num{
display: inline-block;
width: 100px;
text-align: right;
}
}
}
.back-img{
position: fixed;
bottom: 466px;
right: 0;
width: 132px;
height: 132px;
}
}
</style>

View File

@@ -40,7 +40,7 @@ import qs from "query-string"
export default {
name: "AppInterview",
appName: "调查走访",
appName: "事务记录",
inject: {
root: {}
},
@@ -102,7 +102,7 @@ export default {
}
},
onShow() {
document.title = "调查走访"
document.title = "事务记录"
this.current = 1;
this.getList()
},

View File

@@ -2,10 +2,10 @@
<div class="interviewDetail">
<template v-if="isEdit">
<u-form ref="interviewForm" label-position="top" :model="form">
<u-form-item label="调查走访事项" prop="title" required>
<u-form-item label="记录事项" prop="title" required>
<u-input v-model="form.title" placeholder="请输入最多30字" maxlength="30"/>
</u-form-item>
<u-form-item label="调查走访内容" prop="content">
<u-form-item label="记录内容" prop="content">
<AiTextarea v-model="form.content" placeholder="请输入最多500字" :maxlength="500"/>
</u-form-item>
<u-form-item label="图片最多9张">
@@ -54,12 +54,12 @@ export default {
this.searchDetail();
},
onLoad () {
document.title = this.$route.query.id ? '调查走访详情' : '新增调查走访'
document.title = this.$route.query.id ? '记录详情' : '新增记录'
},
methods: {
submitForm() {
if (!this.form.title) {
return this.$u.toast("请输入调查走访事项")
return this.$u.toast("请输入记录事项")
}
this.$loading()

View File

@@ -1,541 +1,415 @@
<template>
<div class="add">
<div class="pad-l32">
<div class="item">
<span class="label"><span class="tips">*</span>类型</span>
<div class="value" @click="showType=true">
<span :class="appId ? '' : 'color-999'">{{appName}}</span>
<u-icon name="arrow-right" color="#cccccc" ></u-icon>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>人员类别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.type" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="info-content" v-for="(items, indexs) in formDataList" :key="indexs">
<div v-for="(item, index) in items" :key="index">
<!-- input输入框 -->
<div class="item" v-if="item.type == 'input' || item.type == 'name' || item.type == 'phone'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-input type="text" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" />
</div>
</div>
<!-- number 输入框 -->
<div class="item" v-if="item.type == 'number'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-input type="number" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" />
</div>
</div>
<!-- 身份证输入框 -->
<div class="item" v-if="item.type == 'idNumber'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-input type="idcard" placeholder="请输入" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" />
</div>
</div>
<!-- textarea输入框 富文本-->
<div class="textarea" v-if="item.type == 'textarea' || item.type == 'text' || item.type == 'rtf'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-input type="textarea" placeholder="请输入请输入" placeholder-style="color:#999;font-size:16px;" height="200" v-model="formData[item.fieldDbName]" :maxlength="item.maxLength" />
</div>
</div>
<!-- 字典下拉选择 -->
<div class="item" v-if="item.type == 'dict'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value" @click="selectClick(item.fieldDbName, item.dict)">
<span :class="formData[item.fieldDbName] ? '' : 'color-999'">{{$dict.getLabel(item.dict, formData[item.fieldDbName]) || '请选择'}}</span>
<u-icon name="arrow-right area-icon" color="#cccccc" ></u-icon>
</div>
</div>
<!-- 单选radio -->
<div class="item" v-if="item.type == 'radio'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-radio-group v-model="formData[item.fieldDbName]">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict(item.dict)" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
<!-- 开关onOff -->
<div class="item" v-if="item.type == 'onOff'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-switch v-model="formData[item.fieldDbName]" :active-value="1" :inactive-value="0"></u-switch>
</div>
</div>
<!-- 多选checkbox -->
<div class="textarea" v-if="item.type == 'checkbox'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<u-checkbox-group>
<u-checkbox
v-model="e.checked"
v-for="(e, i) in item.checkList" :key="i"
:name="item.dictValue"
@change="checkboxChange(indexs, index, i)"
>{{e.dictName}}</u-checkbox>
</u-checkbox-group>
</div>
</div>
<!-- 附件 -->
<div class="textarea" v-if="item.type == 'upload'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" :def.sync="formData[item.fieldDbName]"
action="/admin/file/add2"></AiUploader>
</div>
</div>
<!-- 地区选择 -->
<div class="item area" v-if="item.type == 'area'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value">
<AiAreaPicker :value="formData[item.fieldDbName]" @select="v => formData[item.fieldDbName] = v" :areaId="user.areaId" all :name.sync="formData[item.fieldDbName+'_name']"></AiAreaPicker>
<u-icon name="arrow-right area-icon" color="#cccccc" ></u-icon>
</div>
</div>
<!-- 人员选择 -->
<div class="item" v-if="item.type == 'user'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value" @click="handleSelectUser(item.fieldDbName)">
<template v-if="!formData[item.fieldDbName].length">
<span>请选择</span>
</template>
<template v-else>
已选择<em>{{ formData[item.fieldDbName].map(e => e.name).slice(0, 2).join("、") }}</em><em>{{
formData[item.fieldDbName].length
}}</em>
</template>
<u-icon name="arrow-right" color="#cccccc" ></u-icon>
</div>
</div>
<!-- 日期选择 / 日期带时分秒选择 / 时间-时分秒选择 -->
<div class="item" v-if="item.type == 'date' || item.type == 'datetime' || item.type == 'time'">
<span class="label"><span class="tips">{{item.mustFill == 1 ? '*' : ''}}</span>{{item.fieldName}}</span>
<div class="value" @click="dateClick(indexs, index)">
<span :class="formData[item.fieldDbName] ? '' : 'color-999'">{{formData[item.fieldDbName] || '请选择'}}</span>
<u-icon name="arrow-right area-icon" color="#cccccc" ></u-icon>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>姓名</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入姓名" v-model="form.name" :maxlength="15" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>身份证号</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入身份证号" v-model="form.idNum" type="number" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>性别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.sex" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>出生日期</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="isShowDate = true">
<div class="ai-area__wrapper">
<span class="label" v-if="form.birthday">{{ form.birthday }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</div>
</div>
</div>
</div>
<u-picker mode="time" v-model="dateShow" :params="deteParams" @confirm="dateConfirm" >请选择</u-picker>
<u-select v-model="selectShow" mode="single-column" :list="selectList" label-name="dictName" value-name="dictValue" @confirm="selectConfirm"></u-select>
<u-select v-model="showType" :list="typeList" label-name="applicationName" value-name="id" @confirm="typeConfirm"></u-select>
<div class="footer" @click="submit" v-if="appId">
<div class="btn">保存</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>联系电话</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.phone"/>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>所属区域</h2>
</div>
<div class="form-item__right">
<ai-area-picker ref="area" class="ai-area" :value="form.startAreaId" :fullName.sync="form.startAreaName" all mode="custom" @select="v => form.startAreaId = v">
<div class="ai-area__wrapper">
<span class="label" v-if="form.area">{{ form.area }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</ai-area-picker>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>详细地址</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.address" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>所属网格</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.grid" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<!-- 残疾人 -->
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>家庭年收入</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.income" type="number" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>婚姻情况</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.marStatus" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>身体状况</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.healthStatus" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>残疾类型</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableType" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>残疾级别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableRank" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<u-picker mode="time" :params="dataParams" v-model="isShowDate" @confirm="onDateChange"></u-picker>
<div style="height: 56px;"></div>
<div class="btn" @click="submit">保存</div>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex'
import AiSelect from '../../components/AiSelect'
import AiAreaPicker from '../../components/AiAreaPicker.vue'
export default {
name: 'Add',
data() {
return {
appId: '',
appName: '请选择',
showType: false,
typeList: [],
formDataList: [],
formData: {},
pageShow: false,
dateShow: false,
deteParams: {},
datePropIndex: '', //时间选择 formDataList索引
dateIndex: '', //时间选择 formDataList 数组里面的索引
selectName: '',
selectList: [],
selectShow: false,
id: ''
value: '',
form: {
type: [],
name: '',
idNum: '',
sex: [],
birthday: '',
phone: '',
address: '',
grid: '',
income: '',
marStatus: [],
healthStatus: [],
disableType: [],
disableRank: []
},
isShowDate: false
}
},
computed: { ...mapState(['user']) },
created() {
this.getType()
components: {
AiSelect,
AiAreaPicker
},
onLoad() {
},
onShow() {
document.title = '新增人员'
},
methods: {}
methods: {
...mapActions(['selectEnterpriseContact']),
handleSelectUser(fieldDbName) {
this.selectEnterpriseContact({
fromDepartmentId: 0,
type: ["user"],
selectedUserIds: this.form[fieldDbName]?.map(e => e.id)
}).then(res => {
this.form[fieldDbName] = res?.userList || []
})
},
getType() {
this.$http.post(`/app/appapplicationinfo/queryApplicationListByType?type=0`).then((res) => {
if (res?.data) {
this.typeList = res.data
}
})
},
typeConfirm(e) {
this.appId = e[0].value
this.appName = e[0].label
this.$http.post(`/app/appapplicationinfo/queryApplicationInfo?appId=${this.appId}`).then((res) => {
if (res?.data) {
var data = res.data
let dictList = []
let formList = {}
data.tableInfos.map((item) => {
let colItem
if (item.dictionaryCode) {
dictList.push(item.dictionaryCode)
}
if (item.dictionaryCode && item.type != 'radio' && item.type != 'checkbox' && item.type != 'onOff') {
colItem = {
...item,
type: 'dict',
dict: item.dictionaryCode,
fieldValue: item.defaultValue || ''
}
} else if (item.type == 'radio') {
colItem = {
...item,
dict: item.dictionaryCode,
fieldValue: item.defaultValue || ''
}
} else if (item.type == 'checkbox') {
colItem = {
...item,
dict: item.dictionaryCode,
fieldValue: ''
}
if (item.defaultValue) {
var val = item.defaultValue?.split('`')
colItem.fieldValue = val
}
} else if (item.type == 'onOff') {
colItem = {
...item,
fieldValue: 0
}
} else if (item.type == 'number') {
colItem = {
...item,
type: item.type,
min: item.minValue || '',
max: item.maxValue || '',
fieldValue: Number(item.defaultValue) || 0
}
}else if(item.type == 'upload' || item.type == 'user') {
colItem = {
...item,
type: item.type,
fieldValue: []
}
}else if(item.type == 'area') {
colItem = {
...item,
type: item.type,
fieldValue: this.user.areaId,
}
}else {
if (item.type == 'date') {
item.params = { year: true, month: true, day: true, hour: false, minute: false, second: false}
}
if (item.type == 'datetime') {
item.params = { year: true, month: true, day: true, hour: true, minute: true, second: true}
}
if (item.type == 'time') {
item.params = { year: false, month: false, day: false, hour: true, minute: true, second: true}
}
colItem = {
...item,
type: item.type,
}
colItem.fieldValue = item.defaultValue || ''
}
formList[item.groupIndex]?.push(colItem) || (formList[item.groupIndex] = [colItem])
this.$set(this.formData, colItem.fieldDbName, colItem.fieldValue || "")
})
this.formDataList = Object.values(formList)
if (dictList.length) {
this.getDictList(dictList)
} else {
this.formDataList.map((item)=> {
item.map((e) => {
if (e.type == 'onOff') { //开关
this.formData[e.fieldDbName] = 0
}
if (e.type == 'area') { //地区
this.formData[e.fieldDbName+'_name'] = this.user.areaName
}
})
})
this.$forceUpdate()
console.log(this.formData)
this.pageShow = true
}
}
})
},
getDictList(listName) {
this.$dict.load(listName.join(',')).then(() => {
this.formDataList.map((item)=> {
item.map((e) => {
if(e.type == 'checkbox') { //多选
var list = this.$dict.getDict(e.dict)
list.map((items) => {
items.checked = false
})
e.checkList = list
}
if (e.type == 'onOff') { //开关
this.formData[e.fieldDbName] = 0
}
if (e.type == 'area') { //地区
this.formData[e.fieldDbName+'_name'] = this.user.areaName
}
})
})
this.$forceUpdate()
console.log(this.formData)
this.pageShow = true
})
},
selectClick(name, dictName) {
this.selectName = name
this.selectList = this.$dict.getDict(dictName)
this.selectShow = true
},
selectConfirm(e) {
this.formData[this.selectName] = e[0].value
},
checkboxChange(indexs, index, i) {
this.formDataList[indexs][index].checkList[i].checked = !this.formDataList[indexs][index].checkList[i].checked
this.$forceUpdate()
},
dateClick(indexs, index) {
this.deteParams = this.formDataList[indexs][index].params
this.datePropIndex = indexs
this.dateIndex = index
this.$nextTick(() => {
this.dateShow = true
})
},
dateConfirm(e) {
var fieldDbName = this.formDataList[this.datePropIndex][this.dateIndex].fieldDbName
if(this.formDataList[this.datePropIndex][this.dateIndex].type == 'date') { //年月日
this.formData[fieldDbName] = `${e.year}-${e.month}-${e.day}`
}
if(this.formDataList[this.datePropIndex][this.dateIndex].type == 'datetime') { //年月日时分秒
this.formData[fieldDbName] = `${e.year}-${e.month}-${e.day} ${e.hour}-${e.minute}-${e.second}`
}
if(this.formDataList[this.datePropIndex][this.dateIndex].type == 'time') { //时分秒
this.formData[fieldDbName] = `${e.hour}-${e.minute}-${e.second}`
}
console.log(e)
},
submit() {
var isValid = true
this.formDataList.map((item) => {
if (item.length) {
item.map((items) => {
if (items.type == 'checkbox') { //多选
this.formData[items.fieldDbName] = ''
var list = []
items.checkList.map((e) => {
if(e.checked) {
list.push(e.dictValue)
}
})
this.formData[items.fieldDbName] = list?.toString()
}
if (items.type == 'upload' && this.formData[items.fieldDbName].length) { //附件 只传id
var files = []
this.formData[items.fieldDbName].map((item) => {
files.push(item.id)
})
this.formData[items.fieldDbName] = files.join(',')
}
// if (items.type == 'onOff') { //开关
// this.formData[items.fieldDbName] = this.formData[items.fieldDbName] ? '1' : '0'
// }
if(items.type == 'area' && this.formData[items.fieldDbName]) {
console.log(this.formData)
var area = []
area.push(this.formData[items.fieldDbName])
area.push(this.formData[items.fieldDbName+'_name'])
this.formData[items.fieldDbName] = area.join('_')
}
})
}
})
this.formDataList.map((item) => {
item.map((items) => {
if(items.mustFill == 1 && this.formData[items.fieldDbName] === '') {
isValid = false
return this.$u.toast(`${items.fieldName}为必填项`)
}
})
})
if (!isValid) return
this.$http.post(`/app/appapplicationinfo/addOrUpdate?appId=${this.appId}`, {
...this.formData,
id: this.id || ''
}).then((res) => {
if (res.code == 0) {
this.$u.toast('提交成功')
uni.$emit('specialPeopleList')
setTimeout(() => {
uni.navigateBack()
}, 600)
}
})
},
}
}
</script>
<style lang="scss" scoped>
.add {
padding-bottom: 112px;
.title{
width: 100%;
height: 96px;
line-height: 96px;
background: #FFF;
font-size: 32px;
font-weight: 500;
color: #262B36;
padding-right: 32px;
box-sizing: border-box;
overflow: hidden;
.tips{
display: inline-block;
width: 8px;
height: 32px;
background: #4E75FE;
box-shadow: 0px 8px 24px 2px #C9D8FA;
border-radius: 4px;
vertical-align: middle;
margin-right: 22px;
}
.select{
float: right;
font-size: 30px;
color: #1365DD;
}
}
.item{
width: 100%;
padding: 34px 32px 34px 0;
background: #FFFFFF;
border-bottom: 1px solid #D8DDE6;
display: flex;
justify-content: space-between;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 44px;
box-sizing: border-box;
position: relative;
.value{
.u-icon{
margin-left: 16px;
height: 100%;
.form-item {
padding-left: 32px;
.form-item__checkbox {
width: 100%;
div {
width: 90%;
height: 90px;
line-height: 100px;
margin-bottom: 24px;
text-align: center;
background: #FFFFFF;
border-radius: 16px;
color: #333333;
font-size: 28px;
border: 1px solid #CCCCCC;
&.active {
background: #4181FF;
color: #fff;
border-color: #4181FF;
}
}
}
::v-deep .u-input{
font-size: 32px;
.form-item__radio {
display: flex;
align-items: center;
flex-wrap: wrap;
div {
width: 212px;
height: 90px;
line-height: 90px;
margin-right: 16px;
margin-bottom: 8px;
text-align: center;
background: #FFFFFF;
border-radius: 16px;
color: #333333;
font-size: 28px;
border: 1px solid #CCCCCC;
&:nth-of-type(3n) {
margin-right: 0;
}
&.active {
background: #4181FF;
color: #fff;
border-color: #4181FF;
}
}
}
.ai-area__wrapper {
display: flex;
align-items: center;
padding-left: 100px;
span {
color: #333;
font-size: 30px;
}
i {
color: #999;
font-size: 30px;
font-style: initial;
}
image {
width: 16px;
height: 8px;
}
}
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 90px;
padding-right: 28px;
border-bottom: 1px solid #DDDDDD;
input {
flex: 1;
height: 100%;
text-align: right;
color: #333;
padding-right: 10px;
}
.form-item__right {
display: flex;
align-items: center;
font-size: 32px;
.select {
._i {
padding-left: 100px;
}
}
span {
max-width: 400px;
margin-right: 8px;
color: #333333;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
i {
margin-right: 8px;
color: #999999;
}
}
}
&:last-child {
.form-item__wrapper {
border-bottom: none;
}
}
.form-item__title {
display: flex;
align-items: center;
i {
font-size: 32px;
color: #FF4466;
}
span {
font-size: 28px;
color: #999999;
}
h2 {
padding: 0 4px;
font-weight: 400;
font-size: 32px;
color: #333333;
}
}
&.form-item__imgs, &.form-item__textarea {
.form-item__wrapper {
display: block;
height: auto;
padding-bottom: 32px;
}
textarea {
width: 100%;
height: 90px;
}
.form-item__title {
padding: 32px 0;
}
.form-item__right {
padding-left: 18px;
}
}
}
}
.color-999{
color: #999;
}
.tips{
display: inline-block;
width: 16px;
height: 44px;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
color: #F46;
line-height: 44px;
}
.textarea{
width: 100%;
padding: 34px 32px 34px 0;
background: #FFFFFF;
border-bottom: 1px solid #D8DDE6;
.label{
display: inline-block;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 44px;
margin-bottom: 8px;
}
.value{
padding: 0 16px;
}
}
::v-deep .default{
width: 160px!important;
height: 160px!important;
}
.area{
padding: 16px 54px 16px 0;
.label{
display: inline-block;
line-height: 78px!important;
}
.u-icon{
vertical-align: super;
position: absolute;
top: 42px;
right: 16px;
}
}
.area-icon{
vertical-align: super;
position: absolute;
top: 10px;
right: 0;
}
.footer{
width: 100%;
.btn {
position: fixed;
bottom: 0;
left: 0;
}
.btn{
width: 100%;
height: 112px;
line-height: 112px;
background: #1365dd;
text-align: center;
background: #1365DD;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFF;
}
.line-bg{
width: 100%;
height: 16px;
background: #F5F5F5;
}
.pad-l32{
padding-left: 32px;
background-color: #fff;
color: #ffffff;
z-index: 9999;
}
}
</style>
</style>

View File

@@ -0,0 +1,439 @@
<template>
<div class="addCorrectionUser">
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>人员类别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.type" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>姓名</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入姓名" v-model="form.name" :maxlength="15" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>身份证号</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入身份证号" v-model="form.idNum" :maxlength="18" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>性别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.sex" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>出生日期</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="isShowEndTime = true">
<div class="ai-area__wrapper">
<span class="label" v-if="form.birthday">{{ form.birthday }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</div>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>联系电话</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.phone" :maxlength="20" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>所属区域</h2>
</div>
<div class="form-item__right">
<ai-area-picker ref="area" class="ai-area" :value="form.startAreaId" :fullName.sync="form.startAreaName" all mode="custom" @select="v => form.startAreaId = v">
<div class="ai-area__wrapper">
<span class="label" v-if="form.area">{{ form.area }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</ai-area-picker>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>详细地址</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.address" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>所属网格</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.grid" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<!-- 社区矫正人群 -->
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i></i>
<h2>具体罪名</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入具体罪名" v-model="form.name"/>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>矫正类别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableType" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i></i>
<h2>矫正开始日期</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="isShowEndTime = true">
<div class="ai-area__wrapper">
<span class="label" v-if="form.birthday">{{ form.birthday }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</div>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i></i>
<h2>矫正结束日期</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="isShowEndTime = true">
<div class="ai-area__wrapper">
<span class="label" v-if="form.birthday">{{ form.birthday }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</div>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>是否建立矫正小组</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableType" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>是否有托管</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableRank" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<u-picker mode="time" :params="params" v-model="isShowStartTime" @confirm="onStartChange"></u-picker>
<u-picker mode="time" :params="params" v-model="isShowEndTime" @confirm="onEndChange"></u-picker>
<div style="height: 56px;"></div>
<div class="btn" @click="submit">保存</div>
</div>
</template>
<script>
import AiSelect from '../../components/AiSelect'
import AiAreaPicker from '../../components/AiAreaPicker.vue'
export default {
name: 'addCorrectionUser',
data() {
return {
value: '',
form: {
type: [],
name: '',
idNum: '',
sex: [],
birthday: '',
phone: '',
address: '',
grid: '',
income: '',
marStatus: [],
healthStatus: [],
disableType: [],
disableRank: []
},
isShowStartTime: false,
isShowEndTime: false,
}
},
components: {
AiSelect,
AiAreaPicker
},
onLoad() {
},
onShow() {
document.title = '新增人员'
},
methods: {}
}
</script>
<style lang="scss" scoped>
.addCorrectionUser {
height: 100%;
.form-item {
padding-left: 32px;
.form-item__checkbox {
width: 100%;
div {
width: 90%;
height: 90px;
line-height: 100px;
margin-bottom: 24px;
text-align: center;
background: #FFFFFF;
border-radius: 16px;
color: #333333;
font-size: 28px;
border: 1px solid #CCCCCC;
&.active {
background: #4181FF;
color: #fff;
border-color: #4181FF;
}
}
}
.form-item__radio {
display: flex;
align-items: center;
flex-wrap: wrap;
div {
width: 212px;
height: 90px;
line-height: 90px;
margin-right: 16px;
margin-bottom: 8px;
text-align: center;
background: #FFFFFF;
border-radius: 16px;
color: #333333;
font-size: 28px;
border: 1px solid #CCCCCC;
&:nth-of-type(3n) {
margin-right: 0;
}
&.active {
background: #4181FF;
color: #fff;
border-color: #4181FF;
}
}
}
.ai-area__wrapper {
display: flex;
align-items: center;
padding-left: 100px;
span {
color: #333;
font-size: 30px;
}
i {
color: #999;
font-size: 30px;
font-style: initial;
}
image {
width: 16px;
height: 8px;
}
}
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 90px;
padding-right: 28px;
border-bottom: 1px solid #DDDDDD;
input {
flex: 1;
height: 100%;
text-align: right;
color: #333;
padding-right: 10px;
}
.form-item__right {
display: flex;
align-items: center;
font-size: 32px;
.select {
._i {
padding-left: 100px;
}
}
span {
max-width: 400px;
margin-right: 8px;
color: #333333;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
i {
margin-right: 8px;
color: #999999;
}
}
}
&:last-child {
.form-item__wrapper {
border-bottom: none;
}
}
.form-item__title {
display: flex;
align-items: center;
i {
font-size: 32px;
color: #FF4466;
}
span {
font-size: 28px;
color: #999999;
}
h2 {
padding: 0 4px;
font-weight: 400;
font-size: 32px;
color: #333333;
}
}
&.form-item__imgs, &.form-item__textarea {
.form-item__wrapper {
display: block;
height: auto;
padding-bottom: 32px;
}
textarea {
width: 100%;
height: 90px;
}
.form-item__title {
padding: 32px 0;
}
.form-item__right {
padding-left: 18px;
}
}
}
.btn {
position: fixed;
bottom: 0;
width: 100%;
height: 112px;
line-height: 112px;
background: #1365dd;
text-align: center;
font-size: 32px;
font-weight: 500;
color: #ffffff;
z-index: 9999;
}
}
</style>

View File

@@ -0,0 +1,259 @@
<template>
<div class="addPrisonUser">
<div class="pad-l32">
<div class="item">
<span class="label"><span class="tips">*</span>类型</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips">*</span>姓名</span>
<div class="value">
<u-input type="text" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="15" :clearable="false" />
</div>
</div>
<div class="item">
<span class="label"><span class="tips">*</span>身份证号</span>
<div class="value">
<u-input type="idcard" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="15" :clearable="false" />
</div>
</div>
<div class="item">
<span class="label"><span class="tips">*</span>性别</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips">*</span>出生日期</span>
<div class="value" @click="selectTime('startDate')">
<span :class="form.startDate === '' ? 'color-999' : ''">{{ $dateFormat(form.startDate,'YYYY-MM-DD') || '请选择' }}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips">*</span>联系电话</span>
<div class="value">
<u-input type="number" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="11" :clearable="false" />
</div>
</div>
<div class="item">
<span class="label"><span class="tips">*</span>所属区域</span>
<div class="value">
<u-input type="text" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="15"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>详细地址</span>
<div class="value">
<u-input type="text" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="15" :clearable="false" />
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>所属网格</span>
<div class="value">
<u-input type="text" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="15"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>是否累犯</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>原罪名</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>服刑场所</span>
<div class="value">
<u-input type="text" placeholder="请输入" v-model="form.houseArea" input-align="right" placeholder-style="color:#999;font-size:16px;" height="48" :maxlength="15" :clearable="false" />
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>危险性评估</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>安置情况</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>安置时间</span>
<div class="value" @click="selectTime('startDate')">
<span :class="form.startDate === '' ? 'color-999' : ''">{{ $dateFormat(form.startDate,'YYYY-MM-DD') || '请选择' }}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>衔接情况</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>衔接时间</span>
<div class="value" @click="selectTime('startDate')">
<span :class="form.startDate === '' ? 'color-999' : ''">{{ $dateFormat(form.startDate,'YYYY-MM-DD') || '请选择' }}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
<div class="item">
<span class="label"><span class="tips"></span>是否重新犯罪</span>
<div class="value" @click="selectClick('houselivingStatus', 'livingStatus')">
<span :class="form.livingStatus === '' ? 'color-999' : ''">{{ $dict.getLabel('houselivingStatus', form.livingStatus) || '请选择'}}</span>
<u-icon name="arrow-right" color="#cccccc" size="14"/>
</div>
</div>
</div>
<div class="footer" @click="submit">
<div class="btn">保存</div>
</div>
<u-picker mode="time" v-model="dateShow" :params="deteParams" start-year="2010" @confirm="dateConfirm">请选择</u-picker>
<u-select v-model="showSelect" :list="$dict.getDict(selectDict)" label-name="dictName" value-name="dictValue" @confirm="confirmRelation"/>
</div>
</template>
<script>
import {mapActions, mapState} from 'vuex'
export default {
data() {
return {
form: {
},
dateShow: false,
deteParams: {year: true, month: true, day: true, hour: false, minute: false, second: false},
showSelect: false,
selectDict: '',
selectName: ''
}
},
computed: {...mapState(['user'])},
created() {
this.$dict.load('householdRelation', 'houselivingStatus', 'houseLeaseSituation', 'houseUseStatus',
'isFilingCertificateStatus', 'communityBuildingType', 'yesOrNo', 'BulidResidentType').then(() => {
// this.getDetail()
})
},
onShow() {
document.title = '新增人员'
},
methods: {
submit() {
this.$http.post(`app/appcommunityform/update`, this.form).then(res => {
if (res?.code == 0) {
this.$u.toast('提交成功')
setTimeout(() => {
uni.navigateBack({})
}, 600)
}
})
},
selectClick(dictName, formName) {
this.dictName = dictName
this.selectName = formName
this.showSelect = true
},
confirmSelect(e) {
this.form[this.selectName] = e[0].value
},
selectTime(formName) {
this.selectName = formName
this.dateShow = true
},
dateConfirm(e) {
this.form[this.selectName] = `${e.year}-${e.month}-${e.day} 00:00:00`
}
}
}
</script>
<style lang="scss" scoped>
.addPrisonUser {
padding-bottom: 112px;
.item {
width: 100%;
padding: 34px 32px 34px 0;
background: #FFFFFF;
border-bottom: 1px solid #D8DDE6;
display: flex;
justify-content: space-between;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
color: #333;
line-height: 44px;
box-sizing: border-box;
.color-999 {
color: #999;
}
.value {
.u-icon {
margin-left: 16px;
}
}
.tips{
display: inline-block;
width: 16px;
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
color: #F46;
line-height: 44px;
}
}
.footer {
width: 100%;
position: fixed;
bottom: 0;
left: 0;
}
.btn {
width: 100%;
height: 112px;
line-height: 112px;
text-align: center;
background: #1365DD;
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFF;
}
.line-bg {
width: 100%;
height: 16px;
background: #F5F5F5;
}
.pad-l32 {
padding-left: 32px;
background-color: #fff;
}
}
</style>

View File

@@ -0,0 +1,431 @@
<template>
<div class="addPsychosisUser">
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>人员类别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.type" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>姓名</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入姓名" v-model="form.name" :maxlength="15" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>身份证号</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入身份证号" v-model="form.idNum" :maxlength="18" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>性别</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.sex" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>出生日期</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="isShowDate = true">
<div class="ai-area__wrapper">
<span class="label" v-if="form.checkTime">{{ form.checkTime }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</div>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>联系电话</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.phone" :maxlength="20" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i>*</i>
<h2>所属区域</h2>
</div>
<div class="form-item__right">
<ai-area-picker ref="area" class="ai-area" :value="form.startAreaId" :fullName.sync="form.startAreaName" all mode="custom" @select="v => form.startAreaId = v">
<div class="ai-area__wrapper">
<span class="label" v-if="form.area">{{ form.area }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</ai-area-picker>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>详细地址</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.address" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>所属网格</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.grid" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<!-- 精神病患者 -->
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>家庭年收入</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.income" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i></i>
<h2>发病日期</h2>
</div>
<div class="form-item__right">
<div class="ai-area" @click="illTime = true">
<div class="ai-area__wrapper">
<span class="label" v-if="form.birthday">{{ form.birthday }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
</div>
</div>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i></i>
<h2>监护人姓名</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入姓名" v-model="form.name" :maxlength="15" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i></i>
<h2>监护人联系方式</h2>
</div>
<div class="form-item__right">
<input placeholder="请输入" v-model="form.phone" type="number" />
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>目前危险等级</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableType" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<div class="form-item">
<div class="form-item__wrapper">
<div class="form-item__title">
<i> </i>
<h2>治疗情况</h2>
</div>
<div class="form-item__right">
<ai-select v-model="form.disableRank" dict="epidemicRecentPersonType" class="select"></ai-select>
</div>
</div>
</div>
<u-picker mode="time" :params="dataParams" v-model="isShowDate" @confirm="onDateChange"></u-picker>
<div style="height: 56px;"></div>
<div class="btn" @click="submit">保存</div>
</div>
</template>
<script>
import AiSelect from '../../components/AiSelect'
import AiAreaPicker from '../../components/AiAreaPicker.vue'
export default {
name: 'addPsychosisUser',
data() {
return {
value: [],
form: {
type: [],
name: '',
idNum: '',
sex: [],
birthday: '',
phone: '',
address: '',
grid: '',
income: '',
marStatus: [],
healthStatus: [],
disableType: [],
disableRank: []
},
isShowDate: false,
}
},
components: {
AiSelect,
AiAreaPicker
},
onLoad() {
},
onShow() {
document.title = '新增人员'
},
methods: {}
}
</script>
<style lang="scss" scoped>
.addPsychosisUser {
height: 100%;
.form-item {
padding-left: 32px;
.form-item__checkbox {
width: 100%;
div {
width: 90%;
height: 90px;
line-height: 100px;
margin-bottom: 24px;
text-align: center;
background: #FFFFFF;
border-radius: 16px;
color: #333333;
font-size: 28px;
border: 1px solid #CCCCCC;
&.active {
background: #4181FF;
color: #fff;
border-color: #4181FF;
}
}
}
.form-item__radio {
display: flex;
align-items: center;
flex-wrap: wrap;
div {
width: 212px;
height: 90px;
line-height: 90px;
margin-right: 16px;
margin-bottom: 8px;
text-align: center;
background: #FFFFFF;
border-radius: 16px;
color: #333333;
font-size: 28px;
border: 1px solid #CCCCCC;
&:nth-of-type(3n) {
margin-right: 0;
}
&.active {
background: #4181FF;
color: #fff;
border-color: #4181FF;
}
}
}
.ai-area__wrapper {
display: flex;
align-items: center;
padding-left: 100px;
span {
color: #333;
font-size: 30px;
}
i {
color: #999;
font-size: 30px;
font-style: initial;
}
image {
width: 16px;
height: 8px;
}
}
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 90px;
padding-right: 28px;
border-bottom: 1px solid #DDDDDD;
input {
flex: 1;
height: 100%;
text-align: right;
color: #333;
padding-right: 10px;
}
.form-item__right {
display: flex;
align-items: center;
font-size: 32px;
.select {
._i {
padding-left: 100px;
}
}
span {
max-width: 400px;
margin-right: 8px;
color: #333333;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
i {
margin-right: 8px;
color: #999999;
}
}
}
&:last-child {
.form-item__wrapper {
border-bottom: none;
}
}
.form-item__title {
display: flex;
align-items: center;
i {
font-size: 32px;
color: #FF4466;
}
span {
font-size: 28px;
color: #999999;
}
h2 {
padding: 0 4px;
font-weight: 400;
font-size: 32px;
color: #333333;
}
}
&.form-item__imgs, &.form-item__textarea {
.form-item__wrapper {
display: block;
height: auto;
padding-bottom: 32px;
}
textarea {
width: 100%;
height: 90px;
}
.form-item__title {
padding: 32px 0;
}
.form-item__right {
padding-left: 18px;
}
}
}
.btn {
position: fixed;
bottom: 0;
width: 100%;
height: 112px;
line-height: 112px;
background: #1365dd;
text-align: center;
font-size: 32px;
font-weight: 500;
color: #ffffff;
z-index: 9999;
}
}
</style>

View File

@@ -35,10 +35,10 @@
<div class="info-content">
<div class="title">本月新增</div>
<div class="num-content color-org">
<div class="num-item" v-for="(item, index) in statisticsListMon" :key="index">
<h3>{{item.value}}</h3>
<p>{{item.label}}</p>
</div>
<div class="num-item num" v-for="(item, index) in statisticsListMon" :key="index">
<div>{{item.label}}</div>
<div>{{item.value}}</div>
</div>
<AiEmpty v-if="!statisticsListMon.length"/>
</div>
</div>
@@ -55,10 +55,16 @@
<img src="./img/user-img.png" alt="">
</div>
<div class="user-info">
<p class="name">{{e.name}}</p>
<div class="user-tel">
<p class="name">{{e.name}}</p>
<span class="tel">{{e.phone}}</span>
</div>
<div class="phone">
<span>{{idNumberInit(e.idNumber)}}</span>
<span>{{e.phone}}</span>
<div>
<span class="edit">编辑</span>
<span class="del">删除</span>
</div>
</div>
</div>
</div>
@@ -292,6 +298,7 @@ export default {
width: 33%;
padding: 40px 0;
text-align: center;
h3{
font-size: 64px;
font-family: DINAlternate-Bold, DINAlternate;
@@ -308,6 +315,17 @@ export default {
line-height: 40px;
}
}
.num {
display: flex;
justify-content:space-between;
float: none;
width: 100%;
height: 60px;
line-height: 60px;
padding: 0 30px;
box-sizing: border-box;
}
}
.color-org{
.num-item{
@@ -358,14 +376,24 @@ export default {
}
.user-info{
width: 100%;
.name{
.user-tel {
display: flex;
justify-content: space-between;
.name{
font-size: 32px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
line-height: 44px;
margin-bottom: 8px;
}
.tel {
color: #999;
}
}
.phone{
width: 100%;
font-size: 26px;
@@ -374,6 +402,12 @@ export default {
line-height: 36px;
display: flex;
justify-content: space-between;
.edit,
.del {
padding: 0 20px;
color: #2197f2;
}
}
}
}

View File

@@ -5,8 +5,8 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="format-detection" content="telephone=yes" />
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta name="format-detection" content="telephone=yes"/>
<title>企微应用产品库</title>
<!-- 正式发布的时候使用,开发期间不启用。↓ -->
<!-- <script src="/h5/touch-emulator.js"></script>
@@ -36,28 +36,23 @@ if (document.documentElement.clientWidth > 1024) {
// document.documentElement.style.fontSize = document.documentElement.clientWidth / 20 + 'px'
// })
</script>
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
<link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css"/>
<script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js" referrerpolicy="origin"></script>
<script src="https://open.work.weixin.qq.com/wwopen/js/jwxwork-1.0.0.js" referrerpolicy="origin"></script>
<!-- 测试使用-->
<script src="https://cdn.bootcss.com/vConsole/3.3.0/vconsole.min.js"></script>
<script>
// init vConsole
var vConsole = new VConsole();
console.log('Hello world');
</script>
<script src="https://cdn.bootcdn.net/ajax/libs/vConsole/3.11.1/vconsole.min.js"></script>
<!--end-->
</head>
<body>
<!-- 该文件为 H5 平台的模板 HTML并非应用入口。 -->
<!-- 请勿在此文件编写页面代码或直接运行此文件。 -->
<!-- 详见文档https://uniapp.dcloud.io/collocation/manifest?id=h5-template -->
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
<!-- 该文件为 H5 平台的模板 HTML并非应用入口。 -->
<!-- 请勿在此文件编写页面代码或直接运行此文件。 -->
<!-- 详见文档https://uniapp.dcloud.io/collocation/manifest?id=h5-template -->
<noscript>
<strong>Please enable JavaScript to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
</html>