Commit c85dae88 authored by sheng du's avatar sheng du
Browse files

init

parents
<script>
export default {
onLaunch: function() {
// console.log('App Launch')
},
onShow: function() {
// console.log('App Show')
},
onHide: function() {
// console.log('App Hide')
}
}
</script>
<style lang="less">
// @import url('@/style/app.less');
.uni-body{
font-size: 28rpx;
}
.uni-page-head {
background-color: #fff;
}
/*每个页面公共css */
</style>
\ No newline at end of file
<template>
<view class="file-upload">
<view class="upload-btn flex-center">
<image src="../../static/images/upload.png" style="width: 30rpx;height: 20rpx;" mode=""></image>
<text>选择文件</text>
</view>
<view class="file-list">
<view class="card-file">
<view class="left flex-items-center">
<image src="../../static/images/file.png" style="width: 69rpx;height: 57rpx" mode=""></image>
<view class="msg">
<view class="name">意見圖片.png <text class="size">4.1M</text></view>
<view class="progress">
<progress :percent="60" backgroundColor="#fff" activeColor="#32BAEC" stroke-width="4" />
<text class="progress-info">60%</text>
</view>
</view>
</view>
<view class="pre-view"><uni-icons type="closeempty" size="24"></uni-icons></view>
</view>
<view class="card-file">
<view class="left flex-items-center">
<image src="../../static/images/file.png" style="width: 69rpx;height: 57rpx" mode=""></image>
<view class="msg">
<view class="name">意見圖片.png <text class="size">4.1M</text></view>
<view class="progress">
<progress :percent="60" backgroundColor="#fff" activeColor="#32BAEC" stroke-width="4" />
<text class="progress-info">60%</text>
</view>
</view>
</view>
<view class="pre-view"><uni-icons type="closeempty" size="24"></uni-icons></view>
</view>
</view>
</view>
</template>
<script>
export default {
name: "FileUploader",
data() {
return {
};
}
}
</script>
<style lang="less" scoped>
@import url('@/style/index.less');
.upload-btn {
display: inline-block;
padding: 0 24rpx;
height: 48rpx;
border-radius: 8rpx;
background: #32BAEC;
color: #fff;
text {
padding-left: 10rpx;
}
}
.card-file {
width: 100%;
margin-bottom: 40rpx;
}
.name {
display: flex;
align-items: flex-end;
}
.size {
font-size: 24rpx;
padding-left: 20rpx;
}
.progress{
display: flex;
align-items: center;
uni-progress{
flex-shrink: 0;
width: 240rpx;
}
}
.progress-info{
font-size: 24rpx;
color: #999;
padding-left: 20rpx;
}
</style>
\ No newline at end of file
<template>
<view class="mask-selecter" v-if="show">
<view v-if="type == 'select'" class="select">
<view class="item flex-center" v-for="(item,index) in options" :key="index" @click="$emit('change',item)">
{{item.label}}
</view>
</view>
<view v-if="type == 'tag'" class="select tag-select">
<view class="tag-item flex-center" v-for="(item,index) in options" :key="index"
@click="$emit('change',item)">
{{item.label}}
</view>
</view>
<view v-if="type == 'children'" class="select children-select">
<view class="left">
<view class="left-item item flex-center" :class="leftItem.value == item.value ? 'active' : ''"
v-for="(item,index) in options" @click="selectLeft(item)">{{item.label}}
</view>
</view>
<view class="right">
<template v-if="rightOptions.length">
<view class="right-item item flex-center" v-for="(item,index) in rightOptions" :key="index"
@click="$emit('change',item)">
{{item.label}}
</view>
</template>
</view>
<!-- <view class="tag-item flex-center" v-for="(item,index) in options" :key="index"
@click="$emit('change',item)">
{{item.label}}
</view> -->
</view>
</view>
</template>
<script>
export default {
name: "MaskSelecter",
props: {
value: {
type: Boolean,
default: () => false
},
type: {
//children 联动 ,select选择 tag 标签选择
type: String,
default: () => 'select'
},
options: {
type: Array,
default: () => []
},
},
computed: {
show: {
get() {
return this.value
},
set(newVal) {
this.$emit('input', newVal)
}
}
},
data() {
return {
leftItem: {},
rightOptions: []
};
},
methods: {
selectLeft(leftItem) {
this.leftItem = leftItem
this.rightOptions = leftItem.children || []
}
}
}
</script>
<style lang="less" scoped>
@import url('@/style/index.less');
.mask-selecter {
height: calc(100vh - 188rpx);
position: fixed;
bottom: 0;
width: 100%;
z-index: 999;
background-color: rgba(0, 0, 0, .3);
}
.select {
background-color: @uni-bg-color;
.item {
height: 75rpx;
}
}
.tag-select {
display: flex;
flex-wrap: wrap;
padding: 20rpx 32rpx;
box-sizing: border-box;
.tag-item {
width: 218rpx;
height: 60rpx;
border-radius: 8rpx;
border: 2rpx solid @uni-border-color;
margin-bottom: 30rpx;
margin-right: 12rpx;
overflow: hidden;
&:nth-child(3n) {
margin-right: 0;
}
}
}
.children-select {
background-color: #f5f5f5;
display: flex;
.left {
flex-shrink: 0;
width: 240rpx;
.active {
color: @uni-color-primary;
}
}
.right {
width: 100%;
background-color: #fff;
}
.item {
height: 84rpx;
}
}
</style>
\ No newline at end of file
<template>
<picker @change="bindPickerChange" :value="index" :range="range" range-key="label">
<view class="uni-input">{{showText}}</view>
</picker>
</template>
<script>
export default {
name: "PubPicker",
props: {
range: {
type: Array,
default: () => []
},
value: {
type: [String, Number],
default: () => ''
},
placeholder: {
type: String,
default: () => '请选择'
},
},
computed: {
pickerValue: {
get() {
return this.value;
},
set(newValue) {
this.$emit('input', newValue);
},
},
showText() {
let findItem = this.range.find(item => item.value == this.pickerValue)
if (findItem) {
return findItem.label
}
return this.placeholder || ''
}
},
data() {
return {
index: 0,
};
},
methods: {
bindPickerChange(val) {
// console.log(val.detail.value);
this.index = val.detail.value
this.pickerValue = this.range[this.index]?.value
},
}
}
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<script>
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
CSS.supports('top: constant(a)'))
document.write(
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<!--preload-links-->
<!--app-context-->
</head>
<body>
<div id="app"><!--app-html--></div>
<script type="module" src="/main.js"></script>
</body>
</html>
import App from './App'
// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif
\ No newline at end of file
{
"name" : "hehuangApp",
"appid" : "__UNI__27F5A0B",
"description" : "",
"versionName" : "1.0.0",
"versionCode" : "100",
"transformPx" : false,
/* 5+App特有相关 */
"app-plus" : {
"usingComponents" : true,
"nvueStyleCompiler" : "uni-app",
"compilerVersion" : 3,
"splashscreen" : {
"alwaysShowBeforeRender" : true,
"waiting" : true,
"autoclose" : true,
"delay" : 0
},
/* 模块配置 */
"modules" : {},
/* 应用发布信息 */
"distribute" : {
/* android打包配置 */
"android" : {
"permissions" : [
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
"<uses-feature android:name=\"android.hardware.camera\"/>",
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
],
"abiFilters" : [ "arm64-v8a", "x86" ]
},
/* ios打包配置 */
"ios" : {
"dSYMs" : false
},
/* SDK配置 */
"sdkConfigs" : {
"ad" : {}
}
}
},
/* 快应用特有相关 */
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "",
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
},
"mp-alipay" : {
"usingComponents" : true
},
"mp-baidu" : {
"usingComponents" : true
},
"mp-toutiao" : {
"usingComponents" : true
},
"uniStatistics" : {
"enable" : false
},
"vueVersion" : "2"
}
{
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
{
"path": "pages/login/property/property",
"style": {
"navigationBarTitleText": "选择物业"
}
},
{
"path": "pages/login/login/login",
"style": {
"navigationBarTitleText": "登陆"
}
},
{
"path": "pages/opinion/list",
"style": {
"navigationBarTitleText": "意见列表"
}
},
{
"path": "pages/opinion/detail",
"style": {
"navigationBarTitleText": "意见详情"
}
},
{
"path": "pages/user/user",
"style": {
"navigationBarTitleText": "我的"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "hehuangApp",
"navigationBarBackgroundColor": "#fff",
"backgroundColor": "#F8F8F8"
},
"uniIdRouter": {},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#32BAEC",
"fontSize": "12px",
"iconWidth": "20px",
"borderStyle": "white",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/opinion/list",
"iconPath": "static/images/index.png",
"selectedIconPath": "static/images/index-active.png",
"text": "意见列表"
}, {
"pagePath": "pages/user/user",
"iconPath": "static/images/user.png",
"selectedIconPath": "static/images/user-active.png",
"text": "我的"
}]
}
}
\ No newline at end of file
<template>
<view class="page">
</view>
</template>
<script>
</script>
<style lang="less" scoped>
</style>
\ No newline at end of file
<template>
<view class="flex-col flex-center">
<view class="logo">LOGO/和黄App</view>
<view class="login-form bd-card">
<view class="flex inout-box bd-bt">
<view class="flex">
<uni-icons type="person" size="24" color="#999"></uni-icons>
<input type="text" placeholder="账号" />
</view>
</view>
<view class="flex inout-box">
<view class="flex">
<uni-icons type="locked" size="24" color="#999"></uni-icons>
<input type="text" placeholder="请输入密码" />
</view>
</view>
</view>
<div class="btn page-btn" @click="login">登陆</div>
<view class="flex flex-items-center agreement">
<checkbox value="cb" checked="true" style="transform:scale(0.7)" />
<text>已阅读并同意<text class="parmary-text">用户协议</text></text>
</view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
login(){
uni.switchTab({
url:'/pages/opinion/list'
})
},
}
}
</script>
<style lang="less" scoped>
@import url('@/style/index.less');
.login-form{
width: 600rpx;
}
.logo{
margin: 160rpx 0;
}
.inout-box{
padding: 20rpx 40rpx;
input{
padding-left: 20rpx;
}
}
.page-btn{
margin-top: 160rpx;
width: 600rpx;
}
.agreement{
width: 600rpx;
padding: 30rpx 0;
}
</style>
\ No newline at end of file
<template>
<view class="page">
<view class="search-box">
<view class="search">
<uni-icons type="search" size="24" color="#999"></uni-icons>
<input type="text" placeholder="查找物业" />
</view>
</view>
<view class="list" ref="list">
<scroll-view :scroll-top="scrollTop" scroll-y class="scroll-Y" :scroll-into-view="listIndex"
scroll-with-animation :style="'height:'+listHeight+'px'">
<view class="group" v-for="item in list" :key="item.code" :id="'index'+item.code">
<view class="group-name">{{item.code}}</view>
<view class="item" v-for="child in item.children" @click="selected(child)">{{child.name}}</view>
</view>
</scroll-view>
<!-- <view class="group" v-for="item in list" :key="item.code">
<view class="group-name" :id="`index${item.code}`">{{item.code}}</view>
<view class="item" v-for="child in item.children">{{child.name}}< /view>
</view> -->
</view>
<view class="indexed">
<view class="code" :class="active == item.code ? 'active' : ''" @click="changeIndex(item)"
v-for="item in list" :key="'code'+item.code"><text>{{item.code}}</text>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
scrollTop: 0,
listIndex: '',
listHeight: 573,
active: '',
list: [{
code: 'C',
children: [{
name: '城市花园',
id: 21
}, {
name: '城市花园2',
id: 22
}, {
name: '城市花园3',
id: 23
}, {
name: '城市花园4',
id: 24
}]
}, {
code: 'F',
children: [{
name: '富慧阁',
id: 31
}, {
name: '富慧阁2',
id: 32
}, {
name: '富慧阁3',
id: 33
}, {
name: '富慧阁4',
id: 34
}]
}, {
code: 'L',
children: [{
name: '丽城花园',
id: 1
}, {
name: '丽城花园2',
id: 2
}, {
name: '丽城花园3',
id: 3
}, {
name: '丽城花园4',
id: 4
}]
}, {
code: 'X',
children: [{
name: '香港仔中心',
id: 11
}, {
name: '香港仔中心2',
id: 12
}, {
name: '香港仔中心3',
id: 13
}, {
name: '香港仔中心4',
id: 14
}]
}]
}
},
onLoad() {
this.$nextTick(() => {
console.log();
this.listHeight = this.$refs.list?.$el.clientHeight || 573
})
},
methods: {
changeIndex(item) {
this.listIndex = 'index' + item.code
console.log(this.listIndex);
this.active = item.code
},
//选择物业
selected(item) {
uni.navigateTo({
url: '/pages/login/login/login'
})
}
}
}
</script>
<style lang="less" scoped>
@import url('@/style/app.less');
.page {
display: flex;
flex-flow: column;
justify-content: center;
align-items: center;
height: calc(100vh - 88rpx);
}
.search-box {
width: 100%;
flex-shrink: 0;
height: 100rpx;
display: flex;
justify-content: center;
align-items: center;
.search {
width: 690rpx;
height: 64rpx;
border-radius: 40rpx;
background-color: @uni-bg-color-grey;
display: flex;
// justify-content: center;
align-items: center;
padding: 0 30rpx;
box-sizing: border-box;
input {
margin-left: 20rpx;
}
}
}
.list {
width: 100%;
height: 100%;
overflow-y: auto;
.group-name {
background-color: @uni-bg-color-grey;
line-height: 80rpx;
padding-left: 20rpx;
}
.item {
line-height: 90rpx;
padding-left: 30rpx;
border-bottom: 1px solid @uni-border-color;
&:last-child {
border-bottom: none;
}
}
}
.indexed {
position: fixed;
right: 0;
width: 60rpx;
.code {
height: 48rpx;
font-size: 28rpx;
display: flex;
align-items: center;
justify-content: center;
position: relative;
&.active {
color: #fff;
text {
position: relative;
z-index: 2;
}
&::after {
content: '';
position: absolute;
width: 40rpx;
height: 40rpx;
background-color: @uni-color-primary;
z-index: 1;
border-radius: 50%;
}
}
}
}
</style>
\ No newline at end of file
<template>
<view class="page">
<view class="header">
<view class="flex-between head">
<view class="code">參考編號:CPL202309250001</view>
<text class="status">待跟進</text>
</view>
<view class="flex level-line">
<view class="level pub-tag warning">紧急</view>
<view class="level pub-tag">一般</view>
<view class="level pub-tag success">不紧急</view>
<view class="pub-tag success">非住客投诉</view>
</view>
</view>
<view class="pub-card">
<view class="card-title">新增意见</view>
<view class="card-content">
<view class="label">地址</view>
<view class="content bold">一期-8幢2單元座 6樓XXXX</view>
</view>
<view class="card-content">
<view class="label">意见内容</view>
<view class="content">曬台不知道在做什麼,還打了洞,架了管道,馬服務業看。曬台不知道在做什麼,還打了洞,架了管道,馬服務業看。曬台不知道在做什麼,還打了洞,架了管道,馬服務業
</view>
</view>
<view class="card-content">
<view class="label">意见凭证</view>
<view class="card-file">
<view class="left flex-items-center">
<image src="../../static/images/file.png" style="width: 69rpx;height: 57rpx" mode=""></image>
<view class="msg">
<view class="name">意見圖片.png</view>
<view class="size">4.1M</view>
</view>
</view>
<view class="pre-view">预览</view>
</view>
<view class="card-file">
<view class="left flex-items-center">
<image src="../../static/images/file.png" style="width: 69rpx;height: 57rpx" mode=""></image>
<view class="msg">
<view class="name">意見圖片.png</view>
<view class="size">4.1M</view>
</view>
</view>
<view class="pre-view">预览</view>
</view>
</view>
<view class="card-content">
<view class="label">意见类别</view>
<view class="content">公共设施</view>
</view>
<view class="card-content">
<view class="label">意见负责人</view>
<view class="content">唐天浩</view>
</view>
<view class="card-content">
<view class="label">意见来源</view>
<view class="content">电话</view>
</view>
<view class="card-content">
<view class="label">投诉人</view>
<view class="content">唐嫣</view>
</view>
<view class="card-content">
<view class="label">聯繫電話</view>
<view class="content">15874589632</view>
</view>
<view class="card-content">
<view class="label">電郵地址</view>
<view class="content">數據格式按回傳的內容</view>
</view>
<view class="line"></view>
<view class="card-content">
<view class="label">建立日期</view>
<view class="content">2023-05-23  30:53:34</view>
</view>
<view class="card-content">
<view class="label">建立者</view>
<view class="content">01010080062-6-201H</view>
</view>
<view class="card-content">
<view class="label">最后更改日期</view>
<view class="content">2023-05-23  30:53:34</view>
</view>
<view class="card-content">
<view class="label">最后更改者</view>
<view class="content">張海</view>
</view>
<view class="card-content">
<view class="label">完成时间</view>
<view class="content">2023-05-23  30:53:34</view>
</view>
<view class="card-content">
<view class="label">完成操作者</view>
<view class="content">張海</view>
</view>
</view>
<view class="pub-card" v-if="isFollow">
<view class="card-title">职员跟进</view>
<view class="pub-form card-form">
<view class="form-item flex-between bd-bt">
<view class="label">意见类别</view>
<view class="pub-form-content">
<PubPicker :range="typeRange" v-model="form.type"></PubPicker>
</view>
</view>
<view class="form-item bd-bt">
<view class="label">内容</view>
<textarea v-model="form.content" placeholder="請輸入您的意見內容" cols="30" rows="10"></textarea>
</view>
<view class="form-item bd-bt">
<view class="label">上传凭证<text class="tip">(支持png、jpg、pdf格式,最多可傳9个)</text></view>
<FileUploader></FileUploader>
</view>
</view>
</view>
<view class="page-bottom-btns">
<template v-if="isFollow">
<view class="btn" style="width:710rpx">提交</view>
</template>
<template v-else>
<view class="btn">转单</view>
<view class="btn">修改意见</view>
<!-- <view class="btn">分配人员</view> -->
<!-- <view class="btn">查看跟进</view> -->
<!-- <view class="btn">重新提交跟进</view> -->
<view class="btn" @click="handleFollow">意见跟进</view>
</template>
</view>
</view>
</template>
<script>
import PubPicker from '@/components/PubPicker/PubPicker.vue'
import FileUploader from '@/components/FileUploader/FileUploader.vue'
export default {
components: {
PubPicker,
FileUploader
},
data() {
return {
isFollow: false,
form: {
type: '',
content: ''
},
typeRange: [{
label: 'A清洁',
value: 1
}, {
label: 'B保安',
value: 2
}]
}
},
methods: {
handleFollow() {
this.isFollow = true
},
}
}
</script>
<style lang="less" scoped>
@import url('@/style/index.less');
.page {
min-height: calc(100vh - 88rpx);
overflow-y: auto;
padding-bottom: 120rpx;
}
.header {
background-color: #fff;
padding: 26rpx 36rpx;
border-top: 1px solid @uni-border-color;
}
.head {
height: 40rpx;
.code {
font-size: 28rpx;
color: #333;
font-weight: bold;
}
.status {
font-size: 24rpx;
color: @uni-color-primary;
}
}
.level-line {
padding-top: 10rpx;
.level {
margin-right: 18rpx;
}
}
</style>
\ No newline at end of file
<template>
<view class="page">
<view class="filters flex">
<view class="filter-item flex-items-center" :class="showSelect && selectKey == item.field ? 'active' :''"
v-for="(item,index) in filters" :key="index" @click="openSelect(item)">
<text v-if="filterValues[item.field]">{{filterNames[item.field]}}</text>
<text v-else>{{item.name}}</text>
<image v-if="showSelect && selectKey == item.field" src="../../static/images/down-active.png"
style="width:16rpx;height: 12rpx;" mode=""></image>
<image v-else src="../../static/images/down.png" style="width:16rpx;height: 12rpx;" mode=""></image>
</view>
</view>
<view class="list" ref="list">
<scroll-view :scroll-top="scrollTop" scroll-y class="scroll-Y" scroll-with-animation
:style="'height:'+listHeight+'px'">
<view class="opinion" v-for="(item,index) in 10" :key="index" :id="'index'+index"
@click="toDetail(item)">
<view class="flex-between head">
<view class="code">參考編號:CPL202309250001</view>
<view class="right flex-items-center">
<text class="status">待跟進</text>
<image src="../../static/images/back.png" style="width: 32rpx;height: 32rpx;" mode="">
</image>
</view>
</view>
<view class="flex level-line">
<view class="level pub-tag warning">紧急</view>
<view class="room" v-if="index == 0">一期-8幢2單元座 6樓XXXX</view>
<view class="pub-tag success" v-else>非住客投诉</view>
</view>
<view class="content">曬台不知道在做什麼,還打了洞,架了管道,馬服務業看架了管道···</view>
<view class="flex-between bottom">
<view class="pub-tag plain">公共设施</view>
<view class="time">2023-06-28 15:25:12</view>
</view>
</view>
<div class="bottom-block" style="width: 100%;height: 180rpx;"></div>
</scroll-view>
<view class="add-btn flex-center">
<view class="page-btn">新增意见</view>
</view>
</view>
<MaskSelecter v-model="showSelect" :type="selectType" :options="options[selectKey]" @change="changeFilter">
</MaskSelecter>
</view>
</template>
<script>
import MaskSelecter from '@/components/MaskSelecter/MaskSelecter.vue'
export default {
components: {
MaskSelecter
},
data() {
return {
value: '',
scrollTop: 0,
listHeight: 573,
showSelect: false,
selectKey: '',
selectType: 'select',
filterValues: {
room: '',
success: '',
important: '',
type: '',
sort: '',
},
filterNames: {
room: '',
success: '',
important: '',
type: '',
sort: '',
},
list: [],
options: {
room: [{
label: 'XX小区1',
value: '1',
children: [{
label: 'XX小区1一期',
value: '11',
}, {
label: 'XX小区1二期',
value: '12',
}]
}, {
label: 'XX小区2',
value: '2',
children: [{
label: 'XX小区2一期',
value: '21',
}, {
label: 'XX小区2二期',
value: '22',
}, {
label: 'XX小区2三期',
value: '23',
}]
}],
success: [{
label: '等跟进',
value: 1
}, {
label: '已跟进(待审批)',
value: 2
}, {
label: '审批通过',
value: 3
}, {
label: '审批未通过',
value: 4
}, {
label: '已完成',
value: 5
}],
important: [{
label: '紧急',
value: 1
}, {
label: '一般',
value: 2
}, {
label: '不紧急',
value: 3
}],
type: [{
label: 'A清洁',
value: 1
}, {
label: 'B保安',
value: 2
}, {
label: 'C园艺',
value: 3
}, {
label: 'D维修',
value: 4
}, {
label: 'F冷气供应',
value: 5
}],
sort: [{
label: '按遞交日期由近到遠',
value: 1
}, {
label: '按遞交日期由遠到近',
value: 2
}, {
label: '按最後期限由近到遠',
value: 3
}, {
label: '按最後期限由遠到近',
value: 4
}]
},
}
},
computed: {
filters() {
return [{
name: '小区-期数',
field: 'room',
type: 'children',
}, {
name: '完成情况',
field: 'success',
type: 'select',
}, {
name: '重要情况',
field: 'important',
type: 'select',
}, {
name: '意见类别',
field: 'type',
type: 'tag',
}, {
name: '排序选择',
field: 'sort',
type: 'select',
}]
},
},
onLoad() {
this.$nextTick(() => {
console.log();
this.listHeight = this.$refs.list?.$el.clientHeight || 573
})
},
methods: {
toDetail(item) {
uni.navigateTo({
url: `/pages/opinion/detail?id=${item.id || 1}`
})
},
openSelect(item) {
this.selectKey = item.field
this.selectType = item.type
// if (item.field == 'room') {
this.showSelect = !this.showSelect
// }
},
changeFilter(val) {
this.showSelect = false
this.filterNames[this.selectKey] = val.label
this.filterValues[this.selectKey] = val.value
},
}
}
</script>
<style lang="less" scoped>
@import url('@/style/index.less');
.page {
overflow: hidden;
width: 100%;
height: calc(100vh - 188rpx);
background-color: @uni-bg-color-grey;
display: flex;
flex-flow: column;
}
.filters {
justify-content: space-around;
background-color: @uni-bg-color;
flex-shrink: 0;
height: 100rpx;
font-size: 24rpx;
.filter-item {
&.active {
color: @uni-color-primary;
}
text {
display: inline-block;
max-width: 110rpx;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
image {
margin-left: 16rpx;
}
}
}
::v-deep {
.uni-select {
font-size: 24rpx;
border: none;
}
}
.list {
position: relative;
width: 100%;
height: 100%;
.add-btn {
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 182rpx;
background-color: @uni-bg-color-grey;
}
}
.opinion {
background-color: #fff;
width: 710rpx;
margin: 0 auto;
margin-top: 20rpx;
min-height: 260rpx;
border-radius: 10rpx;
box-sizing: border-box;
padding: 26rpx 30rpx;
padding-bottom: 38rpx;
font-size: 24rpx;
.head {
height: 40rpx;
.code {
font-size: 28rpx;
color: #333;
font-weight: bold;
}
.right {
display: flex;
justify-content: flex-end;
}
.status {
font-size: 24rpx;
color: @uni-color-primary;
}
}
.level-line {
padding-top: 10rpx;
padding-bottom: 18rpx;
.level {
margin-right: 18rpx;
}
font-size: 24rpx;
}
.content {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
line-height: 34rpx;
}
.bottom {
padding-top: 16rpx;
height: 40rpx;
color: #A6A6A6;
}
}
// opinion head code right status
</style>
\ No newline at end of file
<template>
<view>
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
static/images/back.png

308 Bytes

static/images/down-active.png

233 Bytes

static/images/down.png

214 Bytes

static/images/file.png

415 Bytes

static/images/index-active.png

547 Bytes

static/images/index.png

530 Bytes

Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment