调整工程目录

This commit is contained in:
aixianling
2021-12-15 14:37:20 +08:00
parent 76b0abe1ea
commit dd1aef6fb3
107 changed files with 17044 additions and 16746 deletions

View File

@@ -19,7 +19,8 @@
<span>联系方式</span>
</div>
<div class="right">
<input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" type="number" v-model="form.phone" :maxlength="11"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -52,7 +53,7 @@
<span>家庭住址</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.address" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.address" placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -64,7 +65,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.move">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -78,7 +81,8 @@
<span>安置地区</span>
</div>
<div class="right">
<AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all @select="onChange">
<AiAreaPicker ref="area" class="aiArea" :areaId.sync="form.placeAreaId" mode="custom" all
@select="onChange">
<span class="label" v-if="form.placeArea">{{ form.placeArea }}</span>
<i v-else>请选择</i>
<u-icon name="arrow-right" color="#ddd"/>
@@ -93,7 +97,7 @@
<span>安置地区详细地址</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.place" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.place" placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -103,263 +107,264 @@
</template>
<script>
import AiUploader from '@/components/AiUploader'
import AiSelect from '@/components/AiSelect'
import AiArea from '@/components/AiArea'
import AiAreaPicker from '@/components/AiAreaPicker'
import AiUploader from '@/components/AiUploader'
import AiSelect from '@/components/AiSelect'
import AiArea from '@/components/AiArea'
import AiAreaPicker from '@/components/AiAreaPicker'
export default {
data () {
return {
form: {
addressAreaId: '',
address: '',
addressArea: '',
move: '02',
place: '',
placeAreaId: '',
placeArea: '',
type: ''
},
$areaId: '',
isEdit: false,
id: '',
areaName: ''
export default {
data() {
return {
form: {
addressAreaId: '',
address: '',
addressArea: '',
move: '02',
place: '',
placeAreaId: '',
placeArea: '',
type: ''
},
$areaId: '',
isEdit: false,
id: '',
areaName: ''
}
},
components: {
AiArea,
AiSelect,
AiUploader,
AiAreaPicker
},
created() {
this.$areaId = this.$store.state.user.areaId
this.areaName = this.$store.state.user.areaFullName
this.$dict.load(['fpType', 'fpYesOrNo'])
},
onLoad(query) {
if (query.id) {
this.isEdit = true
this.id = query.id
this.getInfo(this.id)
}
},
methods: {
submit() {
if (!this.form.type) {
return this.$u.toast('请选择监测类型')
}
},
components: {
AiArea,
AiSelect,
AiUploader,
AiAreaPicker
},
created () {
this.$areaId = this.$store.state.user.areaId
this.areaName = this.$store.state.user.areaFullName
this.$dict.load(['fpType', 'fpYesOrNo'])
},
onLoad (query) {
if (query.id) {
this.isEdit = true
this.id = query.id
this.getInfo(this.id)
if (!this.form.phone) {
return this.$u.toast('请输入联系方式')
}
if (!this.form.addressAreaId) {
return this.$u.toast('请选择住址')
}
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
id: this.isEdit ? this.id : ''
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
},
methods: {
submit () {
if (!this.form.type) {
return this.$u.toast('请选择监测类型')
}
onAreaChange(e) {
this.form.addressAreaId = e.id
const areaList = this.$refs.address.fullArea
let fullAreaName = ''
areaList.forEach(item => {
fullAreaName = fullAreaName + item.name
})
if (!this.form.phone) {
return this.$u.toast('请输入联系方式')
}
this.form.addressArea = fullAreaName.replace('全国', '')
},
if (!this.form.addressAreaId) {
return this.$u.toast('请选择住址')
}
onChange(e) {
this.form.placeAreaId = e.id
const areaList = this.$refs.area.fullArea
let fullAreaName = ''
areaList.forEach(item => {
fullAreaName = fullAreaName + item.name
})
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
id: this.isEdit ? this.id : ''
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
this.form.placeArea = fullAreaName.replace('全国', '')
},
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
uni.hideLoading()
})
},
onAreaChange (e) {
this.form.addressAreaId = e.id
const areaList = this.$refs.address.fullArea
let fullAreaName = ''
areaList.forEach(item => {
fullAreaName = fullAreaName + item.name
})
this.form.addressArea = fullAreaName.replace('全国', '')
},
onChange (e) {
this.form.placeAreaId = e.id
const areaList = this.$refs.area.fullArea
let fullAreaName = ''
areaList.forEach(item => {
fullAreaName = fullAreaName + item.name
})
this.form.placeArea = fullAreaName.replace('全国', '')
},
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
}
})
}
}
})
}
}
}
</script>
<style lang="scss">
.add {
padding-bottom: 120px;
.add {
padding-bottom: 120px;
.aiArea {
display: flex;
align-items: center;
.label {
color: #303133!important;
font-size: 30px;
}
.aiArea {
display: flex;
align-items: center;
i {
margin-left: 4px;
font-style: normal;
color: #999999;
font-size: 30px;
}
.label {
color: #303133 !important;
font-size: 30px;
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
i {
margin-left: 4px;
font-style: normal;
color: #999999;
font-size: 30px;
}
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
}
}
& > div {
margin-bottom: 16px;
background: #fff;
}
& > div {
margin-bottom: 16px;
background: #fff;
}
.form-group {
.form-item {
padding-left: 32px;
.form-group {
.form-item {
padding-left: 32px;
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-size: 32px;
}
i {
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-item__imgs {
padding: 32px;
.form-item__title {
.form-item__wrapper {
display: flex;
align-items: center;
margin-bottom: 34px;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
h2 {
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
textarea {
width: 100%;
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-type {
.form-item__imgs {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -21,7 +21,7 @@
<span>姓名</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.name" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.name" placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -32,7 +32,7 @@
<span>身份证号</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.idNumber" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.idNumber" placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -122,7 +122,7 @@
<span>务工区域</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.workArea" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.workArea" placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -133,7 +133,8 @@
<span>务工时长()</span>
</div>
<div class="right">
<input placeholder="请输入" type="number" v-model="form.workingMonths" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" type="number" v-model="form.workingMonths"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -147,7 +148,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.medicalInsurance">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -160,7 +163,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.sicknessInsurance">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -173,7 +178,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.endowmentInsurance">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -186,7 +193,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.subsistenceAllowance">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -199,7 +208,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.destitute">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -210,252 +221,253 @@
</template>
<script>
import AiSelect from '@/components/AiSelect'
import AiDate from '@/components/AiDate'
export default {
data () {
return {
form: {
destitute: '',
education: '',
endowmentInsurance: '',
health: '',
idNumber: '',
laborSkills: '',
medicalInsurance: '',
name: '',
nation: '',
politicalOutlook: '',
relationship: '',
relocation: '',
sex: '',
sicknessInsurance: '',
studentsInSchool: '',
subsistenceAllowance: '',
workArea: '',
workingMonths: ''
},
id: '',
info: {},
isEdit: false,
index: ''
}
},
import AiSelect from '@/components/AiSelect'
import AiDate from '@/components/AiDate'
components: {
AiSelect,
AiDate
},
export default {
data() {
return {
form: {
destitute: '',
education: '',
endowmentInsurance: '',
health: '',
idNumber: '',
laborSkills: '',
medicalInsurance: '',
name: '',
nation: '',
politicalOutlook: '',
relationship: '',
relocation: '',
sex: '',
sicknessInsurance: '',
studentsInSchool: '',
subsistenceAllowance: '',
workArea: '',
workingMonths: ''
},
id: '',
info: {},
isEdit: false,
index: ''
}
},
onLoad (query) {
uni.showLoading()
this.id = query.id
this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
this.getInfo(query.id)
})
components: {
AiSelect,
AiDate
},
if (query.index > -1) {
this.isEdit = true
this.index = Number(query.index)
}
},
onLoad(query) {
uni.showLoading()
this.id = query.id
this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
this.getInfo(query.id)
})
methods: {
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
if (this.isEdit) {
this.form = {
...res.data.familyList[this.index]
}
if (query.index > -1) {
this.isEdit = true
this.index = Number(query.index)
}
},
methods: {
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
if (this.isEdit) {
this.form = {
...res.data.familyList[this.index]
}
this.info = res.data
}
uni.hideLoading()
})
},
rules () {
return {
relationship: '请选择与户主关系',
name: '请输入姓名',
idNumber: '请输入身份证号',
sex: '请选择性别',
studentsInSchool: '请选择在校情况',
health: '请选择健康状况',
medicalInsurance: '请选择是否参加医保',
sicknessInsurance: '请选择是否参加大病保险',
endowmentInsurance: '请选择是否参加养老保险',
subsistenceAllowance: '请选择是否享受最低生活保障',
destitute: '请选择是否特困供养',
}
},
submit () {
const rules = this.rules()
for (let v of Object.keys(rules)) {
if (!this.form[v]) {
return this.$u.toast(rules[v])
}
this.info = res.data
}
uni.showLoading()
let familyList = this.info.familyList
if (this.isEdit) {
familyList[this.index] = this.form
} else {
familyList.push(this.form)
}
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.info,
familyList,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '编辑成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
uni.hideLoading()
})
},
rules() {
return {
relationship: '请选择与户主关系',
name: '请输入姓名',
idNumber: '请输入身份证号',
sex: '请选择性别',
studentsInSchool: '请选择在校情况',
health: '请选择健康状况',
medicalInsurance: '请选择是否参加医保',
sicknessInsurance: '请选择是否参加大病保险',
endowmentInsurance: '请选择是否参加养老保险',
subsistenceAllowance: '请选择是否享受最低生活保障',
destitute: '请选择是否特困供养',
}
},
submit() {
const rules = this.rules()
for (let v of Object.keys(rules)) {
if (!this.form[v]) {
return this.$u.toast(rules[v])
}
}
uni.showLoading()
let familyList = this.info.familyList
if (this.isEdit) {
familyList[this.index] = this.form
} else {
familyList.push(this.form)
}
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.info,
familyList,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '编辑成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.add {
padding-bottom: 120px;
.add {
padding-bottom: 120px;
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
}
}
& > div {
margin-bottom: 16px;
background: #fff;
}
& > div {
margin-bottom: 16px;
background: #fff;
}
.form-group {
.form-item {
padding-left: 32px;
.form-group {
.form-item {
padding-left: 32px;
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-size: 32px;
}
i {
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-item__imgs {
padding: 32px;
.form-item__title {
.form-item__wrapper {
display: flex;
align-items: center;
margin-bottom: 34px;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
h2 {
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
textarea {
width: 100%;
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-type {
.form-item__imgs {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -21,139 +21,139 @@
</template>
<script>
import AiUploader from '@/components/AiUploader'
import AiUploader from '@/components/AiUploader'
export default {
data () {
return {
detail: '',
pid: '',
id: '',
picture: []
}
},
export default {
data() {
return {
detail: '',
pid: '',
id: '',
picture: []
}
},
components: {
AiUploader
},
components: {
AiUploader
},
onLoad (query) {
if (query.id) {
this.getInfo(query.id)
this.id = query.id
}
this.pid = query.pid
},
onLoad(query) {
if (query.id) {
this.getInfo(query.id)
this.id = query.id
}
this.pid = query.pid
},
methods: {
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopovertylog/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.detail = res.data.detail
this.picture = JSON.parse(res.data.picture)
}
})
},
submit () {
if (!this.detail) {
return this.$u.toast('请输入帮扶内容')
methods: {
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopovertylog/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.detail = res.data.detail
this.picture = JSON.parse(res.data.picture)
}
})
},
uni.showLoading()
this.$http.post('/app/apppreventionreturntopovertylog/addOrUpdate', {
detail: this.detail,
picture: JSON.stringify(this.picture),
pid: this.pid,
id: this.id || ''
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
submit() {
if (!this.detail) {
return this.$u.toast('请输入帮扶内容')
}
uni.showLoading()
this.$http.post('/app/apppreventionreturntopovertylog/addOrUpdate', {
detail: this.detail,
picture: JSON.stringify(this.picture),
pid: this.pid,
id: this.id || ''
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.form {
padding-bottom: 120px;
.form {
padding-bottom: 120px;
div {
margin-bottom: 16px;
background: #fff;
}
div {
margin-bottom: 16px;
background: #fff;
}
.form-item {
padding: 32px;
.form-item {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
margin-bottom: 34px;
em {
margin-right: 4px;
font-style: normal;
color: #FF4466;
}
h2 {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
textarea {
width: 100%;
}
}
.form-type {
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
em {
margin-right: 4px;
font-style: normal;
color: #FF4466;
}
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -9,7 +9,7 @@
<div class="item-wrapper">
<div class="item-header item-avatar">
<div class="left">
<image src="/static/images/avatar.png" />
<image src="/static/images/avatar.png"/>
<div class="left-right">
<h2>{{ info.name }}</h2>
<p>{{ info.phone }}</p>
@@ -47,14 +47,17 @@
</div>
<div class="item-info">
<label>监测员电话</label>
<span style="color: #3D94FB;" @click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span>
<span style="color: #3D94FB;"
@click="call(info.monitoringContactPhone)">{{ info.monitoringContactPhone || '-' }}</span>
</div>
</div>
<div class="item-wrapper">
<div class="item-header">
<div class="left">
<h2>家庭成员</h2>
<i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{ info.familyList.length ? '已填写' : '未填写' }})</i>
<i :style="{color: info.familyList.length ? '#2EA222' : '#FF4466'}">({{
info.familyList.length ? '已填写' : '未填写'
}})</i>
</div>
<span @click="linkTo('/pages/Monitor/FamilyMember?id=' + info.id)">编辑</span>
</div>
@@ -71,7 +74,9 @@
<div class="item-header">
<div class="left">
<h2>家庭情况</h2>
<i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{ isFamilySituation ? '已填写' : '未填写' }})</i>
<i :style="{color: isFamilySituation ? '#2EA222' : '#FF4466'}">({{
isFamilySituation ? '已填写' : '未填写'
}})</i>
</div>
<span @click="linkTo('/pages/Monitor/FamilySituation?id=' + info.id)">编辑</span>
</div>
@@ -111,7 +116,7 @@
</div>
<div class="item-info">
<label>是否消除风险</label>
<span>{{ info.riskEliminationMethod ? '是' : '-' }}</span>
<span>{{ info.riskEliminationMethod ? '是' : '-' }}</span>
</div>
</div>
</div>
@@ -121,18 +126,19 @@
<div class="log-item__user">
<div class="left">
<div class="user">
<span>{{ item.createUserName.substr(item.createUserName.length - 2)}}</span>
<span>{{ item.createUserName.substr(item.createUserName.length - 2) }}</span>
</div>
<h2>{{ item.createUserName }}</h2>
</div>
<div class="right">
<span>{{ item.createTime }}</span>
<image src="/static/images/more.png" @click="edit(item.id)" />
<image src="/static/images/more.png" @click="edit(item.id)"/>
</div>
</div>
<p>{{ item.detail }}</p>
<div class="imgs">
<image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs" :key="index" />
<image :src="img.url" @click="prevImg(item.imgs, img.url)" v-for="(img, index) in item.imgs"
:key="index"/>
</div>
</div>
</div>
@@ -146,394 +152,395 @@
</template>
<script>
import AiFixedBtn from '@/components/AiFixedBtn'
import AiEmpty from '@/components/AiEmpty/AiEmpty'
export default {
name: 'detail',
import AiFixedBtn from '@/components/AiFixedBtn'
import AiEmpty from '@/components/AiEmpty/AiEmpty'
data () {
return {
info: {},
pageShow: false,
currIndex: 0,
list: [],
isFrom: false
export default {
name: 'detail',
data() {
return {
info: {},
pageShow: false,
currIndex: 0,
list: [],
isFrom: false
}
},
components: {
AiEmpty,
AiFixedBtn
},
computed: {
isIncome() {
if (!this.info.id) {
return false
}
return this.info.income6 > 0 && this.info.income7 > 0;
},
components: {
AiEmpty,
AiFixedBtn
isPoorStatus() {
if (!this.info.id) {
return false
}
return !!this.info.riskEliminationMethod;
},
computed: {
isIncome () {
if (!this.info.id) {
return false
}
return this.info.income6 > 0 && this.info.income7 > 0;
},
isPoorStatus () {
if (!this.info.id) {
return false
}
return !!this.info.riskEliminationMethod;
},
isFamilySituation () {
if (!this.info.id) {
return false
}
return !!(this.info.drinkingWaterSafety && this.info.dilapidatedHouse);
isFamilySituation() {
if (!this.info.id) {
return false
}
},
onLoad (query) {
if (query.isFrom) {
this.isFrom = true
uni.setNavigationBarTitle({
title: '风险预警详情'
})
}
uni.showLoading()
this.$dict.load(['fpType', 'riskEliminationMethod', 'fpRiskType', 'fpYesOrNo']).then(() => {
this.getInfo(query.id)
return !!(this.info.drinkingWaterSafety && this.info.dilapidatedHouse);
}
},
onLoad(query) {
if (query.isFrom) {
this.isFrom = true
uni.setNavigationBarTitle({
title: '风险预警详情'
})
}
uni.showLoading()
this.$dict.load(['fpType', 'riskEliminationMethod', 'fpRiskType', 'fpYesOrNo']).then(() => {
this.getInfo(query.id)
})
this.id = query.id
uni.$on('reload', () => {
this.getInfo(query.id)
this.id = query.id
uni.$on('reload', () => {
this.getInfo(query.id)
})
},
methods: {
linkTo(url) {
uni.navigateTo({
url
})
},
methods: {
linkTo (url) {
uni.navigateTo({
url
call(phone) {
if (phone) {
uni.makePhoneCall({
phoneNumber: phone
})
},
}
},
call (phone) {
if (phone) {
uni.makePhoneCall({
phoneNumber: phone
edit(id) {
uni.showActionSheet({
itemList: ['编辑', '删除'],
success: res => {
if (res.tapIndex === 0) {
uni.navigateTo({
url: `/pages/Monitor/AddLog?pid=${this.info.id}&id=${id}`
})
} else if (res.tapIndex === 1) {
this.$confirm('确定删除该数据?').then(() => {
uni.showLoading()
this.$http.post(`/app/apppreventionreturntopovertylog/delete?ids=${id}`).then(res => {
if (res.code === 0) {
this.$u.toast('删除成功')
this.getInfo(this.id)
}
uni.hideLoading()
})
}).catch(() => {
})
}
}
})
},
prevImg(urls, img) {
const imgs = urls.map(v => v.url)
uni.previewImage({
urls: imgs,
current: img
})
},
toAddLog() {
uni.navigateTo({
url: '/pages/Monitor/AddLog?pid=' + this.info.id
})
},
changeTab(index) {
this.currIndex = index
},
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
let ylbxCount = 0
let ylCount = 0
res.data.familyList.forEach(item => {
if (item.medicalInsurance === '02') {
ylbxCount = ylbxCount + 1
}
if (item.endowmentInsurance === '02') {
ylCount = ylCount + 1
}
})
this.info.ylbxCount = ylbxCount
this.info.ylCount = ylCount
this.pageShow = true
}
uni.hideLoading()
})
this.$http.post(`/app/apppreventionreturntopovertylog/list?pid=${id}&size=1000&current=1`).then(res => {
if (res.code === 0) {
this.list = res.data.records.map(item => {
return {
...item,
imgs: JSON.parse(item.picture)
}
})
}
},
edit (id) {
uni.showActionSheet({
itemList: ['编辑', '删除'],
success: res => {
if (res.tapIndex === 0) {
uni.navigateTo({
url: `/pages/Monitor/AddLog?pid=${this.info.id}&id=${id}`
})
} else if (res.tapIndex === 1) {
this.$confirm('确定删除该数据?').then(() => {
uni.showLoading()
this.$http.post(`/app/apppreventionreturntopovertylog/delete?ids=${id}`).then(res => {
if (res.code === 0) {
this.$u.toast('删除成功')
this.getInfo(this.id)
}
uni.hideLoading()
})
}).catch(() => {
})
}
}
})
},
prevImg (urls, img) {
const imgs = urls.map(v => v.url)
uni.previewImage({
urls: imgs,
current: img
})
},
toAddLog () {
uni.navigateTo({
url: '/pages/Monitor/AddLog?pid=' + this.info.id
})
},
changeTab (index) {
this.currIndex = index
},
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
let ylbxCount = 0
let ylCount = 0
res.data.familyList.forEach(item => {
if (item.medicalInsurance === '02') {
ylbxCount = ylbxCount + 1
}
if (item.endowmentInsurance === '02') {
ylCount = ylCount + 1
}
})
this.info.ylbxCount = ylbxCount
this.info.ylCount = ylCount
this.pageShow = true
}
uni.hideLoading()
})
this.$http.post(`/app/apppreventionreturntopovertylog/list?pid=${id}&size=1000&current=1`).then(res => {
if (res.code === 0) {
this.list = res.data.records.map(item => {
return {
...item,
imgs: JSON.parse(item.picture)
}
})
}
})
}
})
}
}
}
</script>
<style lang="scss">
.detail {
padding-top: 96px;
padding-bottom: 60px;
.detail {
padding-top: 96px;
padding-bottom: 60px;
&.active {
padding-top: 0;
}
&.active {
padding-top: 0;
}
.addBtn {
width: 96px;
height: 96px;
flex-shrink: 0;
background: $uni-color-primary;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 48px;
color: #fff;
border-radius: 50%;
justify-content: center;
align-items: center;
display: flex;
}
.addBtn {
width: 96px;
height: 96px;
flex-shrink: 0;
background: $uni-color-primary;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 48px;
color: #fff;
border-radius: 50%;
justify-content: center;
align-items: center;
display: flex;
}
.tab {
display: flex;
position: fixed;
align-items: center;
left: 0;
top: 0;
z-index: 1;
width: 100%;
height: 96px;
padding: 0 60px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
.tab {
display: flex;
position: fixed;
align-items: center;
left: 0;
top: 0;
z-index: 1;
width: 100%;
height: 96px;
padding: 0 60px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
box-sizing: border-box;
* {
box-sizing: border-box;
}
* {
box-sizing: border-box;
span {
position: relative;
flex: 1;
height: 96 rpx;
line-height: 96 rpx;
color: #000000;
text-align: center;
font-size: 32px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
}
}
}
}
.item-wrapper {
background: #fff;
margin-bottom: 16px;
padding: 0 32px 16px;
.item-header {
display: flex;
align-items: center;
justify-content: space-between;
height: 96px;
& > span {
color: #3975C6;
font-size: 32px;
}
.left {
display: flex;
align-items: center;
h2 {
color: #333333;
font-size: 32px;
font-weight: 500;
}
i {
font-style: normal;
color: #2EA222;
font-size: 32px;
}
}
}
.item-info {
display: flex;
justify-content: space-between;
padding: 14px 0;
label {
color: #999999;
font-size: 32px;
}
span {
position: relative;
flex: 1;
height: 96rpx;
line-height: 96rpx;
color: #000000;
text-align: center;
max-width: 496px;
text-align: right;
color: #333333;
font-size: 32px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
}
}
}
}
.item-wrapper {
background: #fff;
margin-bottom: 16px;
padding: 0 32px 16px;
.item-avatar {
height: 192px;
.item-header {
image {
width: 112px;
height: 112px;
margin-right: 24px;
}
.left-right {
p {
margin-top: 8px;
color: #999999;
font-size: 28px;
}
}
}
}
.log-item {
padding: 0 0 0 32px;
background: #fff;
&:first-child {
margin-top: 16px;
}
&:last-child {
.log-item__wrapper {
border: none !important;
}
}
.log-item__wrapper {
padding: 32px 32px 32px 0;
border-bottom: 1px solid #E4E5E6;
.log-item__user {
display: flex;
align-items: center;
justify-content: space-between;
height: 96px;
& > span {
color: #3975C6;
font-size: 32px;
& > div {
display: flex;
align-items: center;
}
.left {
display: flex;
align-items: center;
.user, image {
width: 80px;
height: 80px;
line-height: 80px;
margin-right: 16px;
text-align: center;
border-radius: 50%;
background: #2266FF;
span {
color: #fff;
font-size: 28px;
}
}
h2 {
color: #333333;
font-size: 32px;
font-weight: 500;
}
i {
font-style: normal;
color: #2EA222;
color: #333;
font-size: 32px;
}
}
}
.item-info {
display: flex;
justify-content: space-between;
padding: 14px 0;
.right {
image {
width: 32px;
height: 32px;
}
label {
color: #999999;
font-size: 32px;
}
span {
max-width: 496px;
text-align: right;
color: #333333;
font-size: 32px;
}
}
.item-avatar {
height: 192px;
image {
width: 112px;
height: 112px;
margin-right: 24px;
}
.left-right {
p {
margin-top: 8px;
span {
margin-right: 6px;
color: #999999;
font-size: 28px;
}
}
}
}
.log-item {
padding: 0 0 0 32px;
background: #fff;
&:first-child {
margin-top: 16px;
p {
margin: 4px 0 16px 96px;
color: #343D65;
font-size: 28px;
}
&:last-child {
.log-item__wrapper {
border: none!important;
}
}
.imgs {
margin-left: 96px;
.log-item__wrapper {
padding: 32px 32px 32px 0;
border-bottom: 1px solid #E4E5E6;
.log-item__user {
display: flex;
align-items: center;
justify-content: space-between;
& > div {
display: flex;
align-items: center;
}
.left {
.user, image {
width: 80px;
height: 80px;
line-height: 80px;
margin-right: 16px;
text-align: center;
border-radius: 50%;
background: #2266FF;
span {
color: #fff;
font-size: 28px;
}
}
h2 {
color: #333;
font-size: 32px;
}
}
.right {
image {
width: 32px;
height: 32px;
}
span {
margin-right: 6px;
color: #999999;
font-size: 28px;
}
}
}
p {
margin: 4px 0 16px 96px;
color: #343D65;
font-size: 28px;
}
.imgs {
margin-left: 96px;
image {
width: 136px;
height: 136px;
margin-right: 8px;
margin-bottom: 8px;
}
image {
width: 136px;
height: 136px;
margin-right: 8px;
margin-bottom: 8px;
}
}
}
}
}
</style>

View File

@@ -80,7 +80,7 @@
<div class="addBtn iconfont iconfont-iconfangda" @tap="toAdd"></div>
</ai-fixed-btn>
<div class="no-more" v-if="!list.length">
<image src="/static/images/empty.png" />
<image src="/static/images/empty.png"/>
<div>
<span>您还未添加过家庭成员点击</span>
<i>新增按钮</i>
@@ -91,246 +91,246 @@
</template>
<script>
import AiFixedBtn from '@/components/AiFixedBtn'
import AiBack from '@/components/AiBack'
import AiFixedBtn from '@/components/AiFixedBtn'
import AiBack from '@/components/AiBack'
export default {
data () {
return {
list: [],
id: '',
info: {},
pageShow: false
}
},
export default {
data() {
return {
list: [],
id: '',
info: {},
pageShow: false
}
},
components: {
AiBack,
AiFixedBtn
},
components: {
AiBack,
AiFixedBtn
},
onLoad (query) {
uni.showLoading()
this.id = query.id
this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
this.getInfo(query.id)
})
onLoad(query) {
uni.showLoading()
this.id = query.id
this.$dict.load(['fpRelationship', 'sex', 'fpNation', 'fpHealth', 'fpEducation', 'fpYesOrNo', 'fpLaborSkills', 'fpPoliticalOutlook',
'fpRelationship', 'fpStudentsInSchool', 'fpFnancialAssistance', 'fpHealthAssistance', 'fpHousingSecurity']).then(() => {
this.getInfo(query.id)
})
uni.$on('reload', () => {
this.getInfo(query.id)
uni.$on('reload', () => {
this.getInfo(query.id)
})
},
methods: {
toAdd() {
uni.navigateTo({
url: '/pages/Monitor/AddFamilyMember?id=' + this.id
})
},
methods: {
toAdd () {
toEdit(index) {
this.$confirm('确定编辑该数据?').then(() => {
uni.navigateTo({
url: '/pages/Monitor/AddFamilyMember?id=' + this.id
url: `/pages/Monitor/AddFamilyMember?id=${this.id}&index=${index}`
})
},
}).catch(() => {
})
},
toEdit (index) {
this.$confirm('确定编辑该数据?').then(() => {
uni.navigateTo({
url: `/pages/Monitor/AddFamilyMember?id=${this.id}&index=${index}`
})
}).catch(() => {
})
},
remove (index) {
this.$confirm('确定删除该数据?').then(() => {
let familyList = JSON.parse(JSON.stringify(this.list))
familyList.splice(index, 1)
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.info,
familyList,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast('删除成功')
this.getInfo(this.id)
}
uni.hideLoading()
})
}).catch(() => {
})
},
showMore (index) {
this.list[index].isShow = !this.list[index].isShow
},
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
remove(index) {
this.$confirm('确定删除该数据?').then(() => {
let familyList = JSON.parse(JSON.stringify(this.list))
familyList.splice(index, 1)
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.info,
familyList,
id: this.id
}).then(res => {
if (res.code === 0) {
this.info = res.data
this.list = res.data.familyList.map(item => {
return {
...item,
isShow: false,
age: this.$calcAge(item.idNumber)
}
})
this.pageShow = true
this.$u.toast('删除成功')
this.getInfo(this.id)
}
uni.hideLoading()
})
}
}).catch(() => {
})
},
showMore(index) {
this.list[index].isShow = !this.list[index].isShow
},
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.list = res.data.familyList.map(item => {
return {
...item,
isShow: false,
age: this.$calcAge(item.idNumber)
}
})
this.pageShow = true
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.familyMember {
padding: 32px 0;
.familyMember {
padding: 32px 0;
.no-more {
padding-top: 160px;
text-align: center;
.no-more {
padding-top: 160px;
text-align: center;
image {
width: 282px;
height: 304px;
}
div {
width: 280px;
margin: 0 auto;
span {
color: #999999;
font-size: 28px;
}
i {
font-style: normal;
color: #467DFE;
font-size: 28px;
}
}
image {
width: 282px;
height: 304px;
}
.addBtn {
width: 96px;
height: 96px;
flex-shrink: 0;
background: $uni-color-primary;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 48px;
color: #fff;
border-radius: 50%;
justify-content: center;
align-items: center;
div {
width: 280px;
margin: 0 auto;
span {
color: #999999;
font-size: 28px;
}
i {
font-style: normal;
color: #467DFE;
font-size: 28px;
}
}
}
.addBtn {
width: 96px;
height: 96px;
flex-shrink: 0;
background: $uni-color-primary;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 48px;
color: #fff;
border-radius: 50%;
justify-content: center;
align-items: center;
display: flex;
}
.item {
width: 686px;
margin: 0 auto 32px;
border-radius: 16px;
overflow: hidden;
background: #fff;
.item-bottom {
display: flex;
align-items: center;
height: 94px;
span {
flex: 1;
height: 100%;
line-height: 96px;
color: #3975C6;
font-size: 26px;
text-align: center;
}
}
.item {
width: 686px;
margin: 0 auto 32px;
border-radius: 16px;
overflow: hidden;
background: #fff;
.item-title {
padding: 32px;
background: #FFFFFF;
border-bottom: 1px solid #DDDDDD;
.item-bottom {
.top {
display: flex;
align-items: center;
height: 94px;
justify-content: space-between;
margin-bottom: 8px;
span {
flex: 1;
height: 100%;
line-height: 96px;
color: #3975C6;
font-size: 26px;
text-align: center;
}
}
.item-title {
padding: 32px;
background: #FFFFFF;
border-bottom: 1px solid #DDDDDD;
.top {
.left {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 8px;
.left {
display: flex;
align-items: center;
h2 {
margin-right: 32px;
color: #333333;
font-size: 40px;
font-weight: 500;
}
span {
color: #999999;
font-size: 28px;
}
h2 {
margin-right: 32px;
color: #333333;
font-size: 40px;
font-weight: 500;
}
& > span {
color: #3975C6;
span {
color: #999999;
font-size: 28px;
}
}
}
.item-info {
display: flex;
align-items: center;
flex-wrap: wrap;
background: #F9F9F9;
.item-info__item {
display: flex;
align-items: center;
justify-content: space-between;
width: 50%;
height: 72px;
padding: 0 20px;
border-bottom: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
box-sizing: border-box;
&:nth-of-type(2n) {
border-right: none;
}
}
label {
color: #999999;
font-size: 26px;
}
span {
& > span {
color: #3975C6;
font-size: 26px;
font-size: 28px;
}
}
}
.item-info {
display: flex;
align-items: center;
flex-wrap: wrap;
background: #F9F9F9;
.item-info__item {
display: flex;
align-items: center;
justify-content: space-between;
width: 50%;
height: 72px;
padding: 0 20px;
border-bottom: 1px solid #DDDDDD;
border-right: 1px solid #DDDDDD;
box-sizing: border-box;
&:nth-of-type(2n) {
border-right: none;
}
}
.bottom {
display: flex;
align-items: center;
label {
color: #999999;
font-size: 26px;
}
span {
color: #999999;
font-size: 28px;
span {
color: #3975C6;
font-size: 26px;
}
}
&:first-child {
margin-right: 20px;
}
.bottom {
display: flex;
align-items: center;
span {
color: #999999;
font-size: 28px;
&:first-child {
margin-right: 20px;
}
}
}
}
}
</style>

View File

@@ -9,7 +9,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.dilapidatedHouse">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -22,7 +24,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.drinkingWaterSafety">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -49,211 +53,211 @@
</template>
<script>
import AiBack from '@/components/AiBack'
import AiSelect from '@/components/AiSelect'
import AiBack from '@/components/AiBack'
import AiSelect from '@/components/AiSelect'
export default {
data () {
return {
form: {
dilapidatedHouse: '',
drinkingWaterSafety: '',
riskType: ''
},
id: ''
}
},
components: {
AiBack,
AiSelect
},
onLoad (query) {
this.$dict.load(['fpYesOrNo', 'fpRiskType'])
uni.showLoading()
this.id = query.id
this.getInfo(query.id)
},
methods: {
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
}
uni.hideLoading()
})
},
submit () {
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
export default {
data() {
return {
form: {
dilapidatedHouse: '',
drinkingWaterSafety: '',
riskType: ''
},
id: ''
}
},
components: {
AiBack,
AiSelect
},
onLoad(query) {
this.$dict.load(['fpYesOrNo', 'fpRiskType'])
uni.showLoading()
this.id = query.id
this.getInfo(query.id)
},
methods: {
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
}
uni.hideLoading()
})
},
submit() {
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
},
}
}
</script>
<style lang="scss">
.add {
padding-bottom: 120px;
.add {
padding-bottom: 120px;
.form-textarea {
padding: 32px;
.form-textarea {
padding: 32px;
h2 {
margin-bottom: 32px;
color: #333333;
font-size: 32px;
font-weight: 500;
}
textarea {
width: 100%;
height: 200px;
}
h2 {
margin-bottom: 32px;
color: #333333;
font-size: 32px;
font-weight: 500;
}
& > div {
margin-bottom: 16px;
background: #fff;
textarea {
width: 100%;
height: 200px;
}
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
& > div {
margin-bottom: 16px;
background: #fff;
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
}
}
.form-group {
.form-item {
padding-left: 32px;
.form-group {
.form-item {
padding-left: 32px;
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-size: 32px;
}
i {
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-item__imgs {
padding: 32px;
.form-item__title {
.form-item__wrapper {
display: flex;
align-items: center;
margin-bottom: 34px;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
h2 {
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
textarea {
width: 100%;
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-type {
.form-item__imgs {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -7,7 +7,8 @@
<span>工资收入</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income1" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income1" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -17,7 +18,8 @@
<span>生产经营收入</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income2" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income2" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -27,7 +29,8 @@
<span>财产性收入</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income3" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income3" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -37,7 +40,8 @@
<span>转移性收入</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income4" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income4" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -47,7 +51,8 @@
<span>理赔收入</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income8" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income8" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -59,7 +64,8 @@
<span>生产经营支出</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income5" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income5" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -69,7 +75,8 @@
<span>合规自然支出</span>
</div>
<div class="right">
<input placeholder="请输入" v-model="form.income9" type="number" placeholder-style="color: #999; font-size: 30rpx;" />
<input placeholder="请输入" v-model="form.income9" type="number"
placeholder-style="color: #999; font-size: 30rpx;"/>
</div>
</div>
</div>
@@ -80,188 +87,188 @@
</template>
<script>
export default {
data () {
return {
form: {
income1: '',
income2: '',
income3: '',
income4: '',
income5: '',
income8: '',
income9: ''
},
id: ''
}
},
onLoad (query) {
uni.showLoading()
this.id = query.id
this.getInfo(query.id)
},
methods: {
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
}
uni.hideLoading()
})
export default {
data() {
return {
form: {
income1: '',
income2: '',
income3: '',
income4: '',
income5: '',
income8: '',
income9: ''
},
id: ''
}
},
submit () {
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
onLoad(query) {
uni.showLoading()
this.id = query.id
this.getInfo(query.id)
},
methods: {
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
uni.hideLoading()
})
}
}
uni.hideLoading()
})
},
submit() {
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
id: this.id
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.add {
padding-bottom: 120px;
.add {
padding-bottom: 120px;
.tips {
margin: 32px 0 0 32px;
color: #999999;
font-size: 26px;
}
.tips {
margin: 32px 0 0 32px;
color: #999999;
font-size: 26px;
}
& > div {
margin-bottom: 16px;
background: #fff;
}
& > div {
margin-bottom: 16px;
background: #fff;
}
.form-group {
.form-item {
padding-left: 32px;
.form-group {
.form-item {
padding-left: 32px;
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-size: 32px;
}
i {
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-item__imgs {
padding: 32px;
.form-item__title {
.form-item__wrapper {
display: flex;
align-items: center;
margin-bottom: 34px;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
h2 {
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
textarea {
width: 100%;
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-type {
.form-item__imgs {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -12,76 +12,76 @@
</template>
<script>
import Statistics from './components/Statistics.vue'
import List from './components/List.vue'
import Statistics from './components/Statistics.vue'
import List from './components/List.vue'
export default {
data () {
return {
currIndex: 0
}
},
export default {
data() {
return {
currIndex: 0
}
},
components: {
List,
Statistics
},
components: {
List,
Statistics
},
computed: {
tabBar () {
const link = icon => `${this.$cdn}askform/${icon}.png`
return [
{text: "监测对象列表", iconPath: "bdlb1", selectedIconPath: "bdlb2" },
{text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2" }
].map(e => ({
...e,
iconPath: link(e.iconPath),
selectedIconPath: link(e.selectedIconPath)
}))
}
},
computed: {
tabBar() {
const link = icon => `${this.$cdn}askform/${icon}.png`
return [
{text: "监测对象列表", iconPath: "bdlb1", selectedIconPath: "bdlb2"},
{text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"}
].map(e => ({
...e,
iconPath: link(e.iconPath),
selectedIconPath: link(e.selectedIconPath)
}))
}
},
onLoad () {
uni.$on('reload', () => {
if (this.currIndex === 0) {
this.$refs.list.reload()
}
})
},
onReachBottom() {
onLoad() {
uni.$on('reload', () => {
if (this.currIndex === 0) {
this.$refs.list.getList()
this.$refs.list.reload()
}
})
},
onReachBottom() {
if (this.currIndex === 0) {
this.$refs.list.getList()
}
}
}
</script>
<style lang="scss" scoped>
.povertyMonitor {
.footer {
display: flex;
position: fixed;
bottom: 0;
left: 0;
z-index: 11;
width: 100%;
.povertyMonitor {
.footer {
display: flex;
position: fixed;
bottom: 0;
left: 0;
z-index: 11;
width: 100%;
height: 98px;
div {
flex: 1;
height: 98px;
line-height: 98px;
text-align: center;
color: #333333;
font-size: 32px;
background: #fff;
div {
flex: 1;
height: 98px;
line-height: 98px;
text-align: center;
color: #333333;
font-size: 32px;
background: #fff;
&.active {
color: #fff;
background: #3192F4;
}
&.active {
color: #fff;
background: #3192F4;
}
}
}
}
</style>

View File

@@ -86,7 +86,9 @@
</div>
<div class="right">
<u-radio-group v-model="form.isRisk" @change="onRiskChange">
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">{{ item.dictName }}</u-radio>
<u-radio :name="item.dictValue" v-for="(item, index) in $dict.getDict('fpYesOrNo')" :key="index">
{{ item.dictName }}
</u-radio>
</u-radio-group>
</div>
</div>
@@ -119,232 +121,232 @@
</template>
<script>
import AiSelect from '@/components/AiSelect'
import AiDate from '@/components/AiDate'
import AiSelect from '@/components/AiSelect'
import AiDate from '@/components/AiDate'
export default {
data () {
return {
result: '',
form: {
isRisk: '02',
riskEliminationMethod: '',
riskEliminationDate: '',
industrialAssistance: '',
healthAssistance: '',
employmentAssistance: '',
educationalAssistance: '',
financialAssistance: '',
socialAssistance: '',
publicWelfarePostAssistance: ''
},
id: ''
}
},
export default {
data() {
return {
result: '',
form: {
isRisk: '02',
riskEliminationMethod: '',
riskEliminationDate: '',
industrialAssistance: '',
healthAssistance: '',
employmentAssistance: '',
educationalAssistance: '',
financialAssistance: '',
socialAssistance: '',
publicWelfarePostAssistance: ''
},
id: ''
}
},
components: {
AiDate,
AiSelect
},
components: {
AiDate,
AiSelect
},
onLoad (query) {
uni.showLoading()
this.$dict.load(['fpYesOrNo', 'fpRiskEliminationMethod', 'fpIndustrialAssistance', 'fpHealthAssistance', 'fpEmploymentAssistance',
onLoad(query) {
uni.showLoading()
this.$dict.load(['fpYesOrNo', 'fpRiskEliminationMethod', 'fpIndustrialAssistance', 'fpHealthAssistance', 'fpEmploymentAssistance',
'fpEducationalAssistance', 'fpFinancialAssistance', 'fpSocialAssistance', 'fpPublicWelfarePostAssistance']).then(() => {
this.getInfo(query.id)
this.getInfo(query.id)
})
this.id = query.id
},
methods: {
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
if (this.form.riskEliminationMethod) {
this.form.isRisk = '01'
}
}
uni.hideLoading()
})
this.id = query.id
},
methods: {
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.form = {
...this.form,
...res.data
}
if (this.form.riskEliminationMethod) {
this.form.isRisk = '01'
}
}
uni.hideLoading()
})
},
onRiskChange (e) {
if (e === '02') {
this.form.riskEliminationMethod = ''
this.form.riskEliminationDate = ''
}
},
submit () {
if (!this.form.isRisk) {
return this.$u.toast('请选择是否消除风险')
}
if (this.form.isRisk === '01') {
if (!this.form.riskEliminationMethod) {
return this.$u.toast('请选择风险消除方式')
}
if (!this.form.riskEliminationDate) {
return this.$u.toast('请选择风险消除时间')
}
}
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
riskEliminationMethod: this.form.isRisk ? this.form.riskEliminationMethod : '',
id: this.id,
status: this.form.isRisk === '01' ? 1 : ''
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
onRiskChange(e) {
if (e === '02') {
this.form.riskEliminationMethod = ''
this.form.riskEliminationDate = ''
}
},
submit() {
if (!this.form.isRisk) {
return this.$u.toast('请选择是否消除风险')
}
if (this.form.isRisk === '01') {
if (!this.form.riskEliminationMethod) {
return this.$u.toast('请选择风险消除方式')
}
if (!this.form.riskEliminationDate) {
return this.$u.toast('请选择风险消除时间')
}
}
uni.showLoading()
this.$http.post('/app/apppreventionreturntopoverty/addOrUpdate', {
...this.form,
riskEliminationMethod: this.form.isRisk ? this.form.riskEliminationMethod : '',
id: this.id,
status: this.form.isRisk === '01' ? 1 : ''
}).then(res => {
if (res.code === 0) {
this.$u.toast(this.isEdit ? '保存成功' : '提交成功')
uni.$emit('reload')
uni.navigateBack({
delta: 1
})
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.add {
padding-bottom: 120px;
.add {
padding-bottom: 120px;
& > div {
margin-bottom: 16px;
background: #fff;
}
& > div {
margin-bottom: 16px;
background: #fff;
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
::v-deep .u-radio {
&:last-child {
.u-radio__label {
margin-right: 0;
}
}
}
.form-group {
.form-item {
padding-left: 32px;
.form-group {
.form-item {
padding-left: 32px;
.form-item__wrapper {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-size: 32px;
}
i {
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-item__imgs {
padding: 32px;
.form-item__title {
.form-item__wrapper {
display: flex;
align-items: center;
margin-bottom: 34px;
justify-content: space-between;
height: 112px;
border-bottom: 1px solid #E4E5E6;
}
h2 {
.right {
height: 112px;
line-height: 112px;
padding-right: 32px;
span {
font-size: 30px;
color: #999999;
}
}
input {
height: 100%;
text-align: right;
}
.left {
display: flex;
align-items: center;
span {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
margin-right: 4px;
font-style: normal;
color: #FF4466;
font-size: 32px;
}
}
textarea {
width: 100%;
&:last-child {
.form-item__wrapper {
border: none;
}
}
}
}
.form-type {
.form-item__imgs {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -7,7 +7,8 @@
<div class="label" v-if="addressArea">{{ addressArea }}</div>
<i v-else>请选择</i>
</AiArea> -->
<AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom" @select="onChange">
<AiAreaPicker ref="area" class="aiArea" :name.sync="addressArea" :areaId="areaId" mode="custom"
@select="onChange">
<span class="label" v-if="addressArea">{{ addressArea }}</span>
<i v-else>请选择</i>
</AiAreaPicker>
@@ -19,16 +20,16 @@
</div>
<div class="search">
<u-search
placeholder="请输入"
:show-action="false"
search-icon-color="#ccc"
v-model="name"
@search="reload">
placeholder="请输入"
:show-action="false"
search-icon-color="#ccc"
v-model="name"
@search="reload">
</u-search>
</div>
<div class="list-item__wrapper">
<div class="list-item" v-for="(item, index) in list" :key="index" @click="toDetail(item.id)">
<image src="/static/images/avatar.png" />
<image src="/static/images/avatar.png"/>
<div class="right">
<h2>{{ item.name || item.phone }}</h2>
<p>{{ item.addressArea }}</p>
@@ -44,252 +45,252 @@
</template>
<script>
import AiArea from '@/components/AiArea'
import AiFixedBtn from '@/components/AiFixedBtn'
import AiEmpty from '@/components/AiEmpty/AiEmpty'
import AiAreaPicker from '@/components/AiAreaPicker'
import AiArea from '@/components/AiArea'
import AiFixedBtn from '@/components/AiFixedBtn'
import AiEmpty from '@/components/AiEmpty/AiEmpty'
import AiAreaPicker from '@/components/AiAreaPicker'
export default {
name: 'list',
export default {
name: 'list',
data () {
return {
currIndex: 0,
name: '',
list: [],
areaId: '',
addressAreaId: '',
addressArea: '',
isMore: false,
current: 1
data() {
return {
currIndex: 0,
name: '',
list: [],
areaId: '',
addressAreaId: '',
addressArea: '',
isMore: false,
current: 1
}
},
components: {
AiArea,
AiEmpty,
AiAreaPicker,
AiFixedBtn
},
created() {
uni.showLoading()
this.areaId = this.$store.state.user.areaId
this.addressAreaId = this.$store.state.user.areaId
this.addressArea = this.$store.state.user.areaName
this.$nextTick(() => {
this.getList()
})
uni.$on('reload', () => {
if (this.currIndex === 0) {
} else {
}
})
},
methods: {
toDetail(id) {
uni.navigateTo({
url: '/pages/Monitor/Detail?id=' + id
})
},
components: {
AiArea,
AiEmpty,
AiAreaPicker,
AiFixedBtn
onChange(e) {
this.addressAreaId = e.id
this.$nextTick(() => {
this.reload()
})
},
created () {
toAdd() {
uni.navigateTo({
url: '/pages/Monitor/Add'
})
},
reload() {
this.isMore = false
this.current = 1
uni.showLoading()
this.areaId = this.$store.state.user.areaId
this.addressAreaId = this.$store.state.user.areaId
this.addressArea = this.$store.state.user.areaName
this.$nextTick(() => {
this.getList()
})
uni.$on('reload', () => {
if (this.currIndex === 0) {
} else {
}
})
},
methods: {
toDetail (id) {
uni.navigateTo({
url: '/pages/Monitor/Detail?id=' + id
})
},
changeTab(index) {
this.currIndex = index
this.reload()
},
onChange (e) {
this.addressAreaId = e.id
getList() {
if (this.isMore) return
this.$nextTick(() => {
this.reload()
})
},
toAdd () {
uni.navigateTo({
url: '/pages/Monitor/Add'
})
},
reload() {
this.isMore = false
this.current = 1
uni.showLoading()
this.$nextTick(() => {
this.getList()
})
},
changeTab (index) {
this.currIndex = index
this.reload()
},
getList() {
if (this.isMore) return
this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
params: {
current: this.current,
size: 15,
status: this.currIndex === 1 ? '1' : '',
addressAreaId: this.addressAreaId,
name: this.name
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
uni.hideLoading()
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
params: {
current: this.current,
size: 15,
status: this.currIndex === 1 ? '1' : '',
addressAreaId: this.addressAreaId,
name: this.name
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
uni.hideLoading()
this.list = res.data.records
}
}).catch(() => {
uni.hideLoading()
})
}
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.list {
padding: 112px 0 120px;
.list {
padding: 112px 0 120px;
.addBtn {
width: 96px;
height: 96px;
flex-shrink: 0;
background: $uni-color-primary;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 48px;
color: #fff;
border-radius: 50%;
justify-content: center;
align-items: center;
.addBtn {
width: 96px;
height: 96px;
flex-shrink: 0;
background: $uni-color-primary;
box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
font-size: 48px;
color: #fff;
border-radius: 50%;
justify-content: center;
align-items: center;
display: flex;
}
.list-wrapper {
margin-top: 16px;
background: #fff;
.list-item {
display: flex;
}
align-items: center;
padding: 20px 32px;
.list-wrapper {
margin-top: 16px;
background: #fff;
.list-item {
display: flex;
align-items: center;
padding: 20px 32px;
image {
width: 80px;
height: 80px;
margin-right: 32px;
}
.right {
flex: 1;
}
p {
color: #999999;
font-size: 26px;
}
h2 {
margin-bottom: 10px;
color: #333333;
font-size: 32px;
}
image {
width: 80px;
height: 80px;
margin-right: 32px;
}
.search {
margin: 20px 0;
padding: 0 32px;
.right {
flex: 1;
}
.tab {
display: flex;
align-items: center;
width: 100%;
height: 96px;
padding: 0 60px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
box-sizing: border-box;
p {
color: #999999;
font-size: 26px;
}
* {
box-sizing: border-box;
}
span {
position: relative;
flex: 1;
height: 96rpx;
line-height: 96rpx;
color: #000000;
text-align: center;
font-size: 32px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
}
}
}
h2 {
margin-bottom: 10px;
color: #333333;
font-size: 32px;
}
}
.area {
display: flex;
position: fixed;
align-items: center;
top: 0;
left: 0;
z-index: 11;
width: 100%;
.search {
margin: 20px 0;
padding: 0 32px;
height: 112px;
color: #333333;
font-size: 30px;
background: #fff;
}
.separat {
padding: 0 8px;
}
.tab {
display: flex;
align-items: center;
width: 100%;
height: 96px;
padding: 0 60px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
box-sizing: border-box;
i {
color: #3F8DF5;
font-size: 30px;
font-style: normal;
* {
box-sizing: border-box;
}
span {
color: #333333;
font-size: 30px;
position: relative;
flex: 1;
height: 96 rpx;
line-height: 96 rpx;
color: #000000;
text-align: center;
font-size: 32px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
}
}
}
}
}
.area {
display: flex;
position: fixed;
align-items: center;
top: 0;
left: 0;
z-index: 11;
width: 100%;
padding: 0 32px;
height: 112px;
color: #333333;
font-size: 30px;
background: #fff;
.separat {
padding: 0 8px;
}
i {
color: #3F8DF5;
font-size: 30px;
font-style: normal;
}
span {
color: #333333;
font-size: 30px;
}
}
}
</style>

View File

@@ -3,7 +3,8 @@
<div class="area">
<i>可选范围</i>
<span class="separat">/</span>
<AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom" @select="onChange">
<AiAreaPicker ref="area" class="aiArea" :areaId="areaId" :name.sync="addressArea" mode="custom"
@select="onChange">
<span class="label" v-if="addressArea">{{ addressArea }}</span>
<i v-else>请选择</i>
</AiAreaPicker>
@@ -54,386 +55,385 @@
</template>
<script>
import echarts from 'echarts'
import AiArea from '@/components/AiArea'
import AiAreaPicker from '@/components/AiAreaPicker'
import echarts from 'echarts'
import AiArea from '@/components/AiArea'
import AiAreaPicker from '@/components/AiAreaPicker'
export default {
name: 'statistics',
export default {
name: 'statistics',
data () {
return {
addressAreaId: '',
addressArea: '',
chart1: null,
chart2: null,
chart3: null,
chart4: null,
areaId: '',
info: {},
pageShow: false
}
},
data() {
return {
addressAreaId: '',
addressArea: '',
chart1: null,
chart2: null,
chart3: null,
chart4: null,
areaId: '',
info: {},
pageShow: false
}
},
components: {
AiArea,
AiAreaPicker
},
components: {
AiArea,
AiAreaPicker
},
created () {
this.areaId = this.$store.state.user.areaId
this.addressAreaId = this.$store.state.user.areaId
this.addressArea = this.$store.state.user.areaName
},
created() {
this.areaId = this.$store.state.user.areaId
this.addressAreaId = this.$store.state.user.areaId
this.addressArea = this.$store.state.user.areaName
},
mounted () {
window.scrollTo(0,0)
this.chart1 = echarts.init(document.getElementById('chart1'))
this.chart4 = echarts.init(document.getElementById('chart4'))
this.chart3 = echarts.init(document.getElementById('chart3'))
mounted() {
window.scrollTo(0, 0)
this.chart1 = echarts.init(document.getElementById('chart1'))
this.chart4 = echarts.init(document.getElementById('chart4'))
this.chart3 = echarts.init(document.getElementById('chart3'))
this.$dict.load(['fpRiskType', 'fpRiskEliminationMethod']).then(() => {
this.$dict.load(['fpRiskType', 'fpRiskEliminationMethod']).then(() => {
this.getInfo()
})
},
methods: {
reload() {
this.$nextTick(() => {
this.getInfo()
})
},
methods: {
reload () {
this.$nextTick(() => {
this.getInfo()
})
},
onChange(e) {
this.addressAreaId = e.id
onChange (e) {
this.addressAreaId = e.id
this.$nextTick(() => {
this.reload()
})
},
this.$nextTick(() => {
this.reload()
})
},
initChart1 (data) {
const x = data.map(v => v.m)
const v = data.map(v => v.c)
const option = {
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
xAxis: {
type: 'category',
data: x,
splitLine: {
show: true,
lineStyle:{
width: 1,
type: 'solid',
color: '#f5f5f5'
}
},
axisLabel: {
align: 'center',
padding: [2, 0, 0, 0],
interval: 0,
fontSize: 14,
color: '#999'
},
axisTick: {
length: 1,
show: true
},
boundaryGap: true,
axisLine: {
show: true,
lineStyle: {
color: '#aaa'
}
initChart1(data) {
const x = data.map(v => v.m)
const v = data.map(v => v.c)
const option = {
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
xAxis: {
type: 'category',
data: x,
splitLine: {
show: true,
lineStyle: {
width: 1,
type: 'solid',
color: '#f5f5f5'
}
},
grid: {
top: '4%',
left: '4%',
right: '6%',
bottom: '0%',
containLabel: true
axisLabel: {
align: 'center',
padding: [2, 0, 0, 0],
interval: 0,
fontSize: 14,
color: '#999'
},
yAxis: {
type: 'value',
boundaryGap: true,
axisTick: {
length: 1,
show: true
},
splitLine: {
show: true,
lineStyle:{
width: 1,
type: 'solid',
color: '#f5f5f5'
}
},
nameTextStyle: {
color: '#f5f5f5',
align: 'left'
},
axisLine: {
show: true,
lineStyle:{
width: 1,
type: 'solid',
color: '#aaa'
}
},
axisLabel: {
color: '#999'
axisTick: {
length: 1,
show: true
},
boundaryGap: true,
axisLine: {
show: true,
lineStyle: {
color: '#aaa'
}
},
series: [
{
data: v,
type: 'line'
}
]
}
this.chart1.setOption(option)
},
initChart3 (data) {
const y = data.map(v => this.$dict.getLabel('fpRiskType', v.risk_type) || '其他')
const v = data.map(v => v.c)
const option = {
tooltip: {
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
grid: {
top: '4%',
left: '4%',
right: '6%',
bottom: '0%',
containLabel: true
},
xAxis: {
type: 'value',
splitLine: {
show: true,
lineStyle:{
width: 1,
type: 'solid',
color: '#f5f5f5'
}
},
axisTick: {
length: 1,
show: true
},
axisLabel: {
align: 'center',
padding: [2, 0, 0, 0],
interval: 0,
fontSize: 14,
color: '#999'
},
boundaryGap: true,
axisLine: {
show: true,
lineStyle:{
width: 1,
type: 'solid',
color: '#aaa'
}
},
},
yAxis: {
type: 'category',
data: y,
boundaryGap: true,
axisTick: {
length: 0,
show: false
},
splitLine: {
show: true,
lineStyle:{
color: ['#e9e9e9'],
width: 1,
type: 'solid'
}
},
nameTextStyle: {
color: '#999',
align: 'left'
},
axisLine: {
show: true,
lineStyle:{
width: 1,
type: 'solid',
color: '#aaa'
}
},
axisLabel: {
color: '#999'
}
},
series: [
{
name: '2011',
type: 'bar',
data: v
}
]
}
this.chart3.setOption(option)
},
initChart4 (data) {
const values = data.map(v => {
return {
value: v.c,
name: this.$dict.getLabel('fpRiskEliminationMethod', v.risk_elimination_method) || '其他'
}
})
const option = {
tooltip: {
trigger: 'item'
},
grid: {
top: '4%',
left: '4%',
right: '6%',
bottom: '0%',
containLabel: true
},
yAxis: {
type: 'value',
boundaryGap: true,
axisTick: {
length: 1,
show: true
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '本月纳入监测人群属性分析',
type: 'pie',
radius: ['40%', '70%'],
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
data: values
splitLine: {
show: true,
lineStyle: {
width: 1,
type: 'solid',
color: '#f5f5f5'
}
]
}
this.chart4.setOption(option)
},
getInfo () {
this.$http.post(`/app/apppreventionreturntopoverty/statistics-prtp?areaId=${this.addressAreaId}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.initChart1(res.data['近半年趋势'])
this.initChart3(res.data['风险类型排行'])
this.initChart4(res.data['风险消除方式'])
},
nameTextStyle: {
color: '#f5f5f5',
align: 'left'
},
axisLine: {
show: true,
lineStyle: {
width: 1,
type: 'solid',
color: '#aaa'
}
},
axisLabel: {
color: '#999'
}
})
},
series: [
{
data: v,
type: 'line'
}
]
}
this.chart1.setOption(option)
},
initChart3(data) {
const y = data.map(v => this.$dict.getLabel('fpRiskType', v.risk_type) || '其他')
const v = data.map(v => v.c)
const option = {
tooltip: {},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
grid: {
top: '4%',
left: '4%',
right: '6%',
bottom: '0%',
containLabel: true
},
xAxis: {
type: 'value',
splitLine: {
show: true,
lineStyle: {
width: 1,
type: 'solid',
color: '#f5f5f5'
}
},
axisTick: {
length: 1,
show: true
},
axisLabel: {
align: 'center',
padding: [2, 0, 0, 0],
interval: 0,
fontSize: 14,
color: '#999'
},
boundaryGap: true,
axisLine: {
show: true,
lineStyle: {
width: 1,
type: 'solid',
color: '#aaa'
}
},
},
yAxis: {
type: 'category',
data: y,
boundaryGap: true,
axisTick: {
length: 0,
show: false
},
splitLine: {
show: true,
lineStyle: {
color: ['#e9e9e9'],
width: 1,
type: 'solid'
}
},
nameTextStyle: {
color: '#999',
align: 'left'
},
axisLine: {
show: true,
lineStyle: {
width: 1,
type: 'solid',
color: '#aaa'
}
},
axisLabel: {
color: '#999'
}
},
series: [
{
name: '2011',
type: 'bar',
data: v
}
]
}
this.chart3.setOption(option)
},
initChart4(data) {
const values = data.map(v => {
return {
value: v.c,
name: this.$dict.getLabel('fpRiskEliminationMethod', v.risk_elimination_method) || '其他'
}
})
const option = {
tooltip: {
trigger: 'item'
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '本月纳入监测人群属性分析',
type: 'pie',
radius: ['40%', '70%'],
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
data: values
}
]
}
this.chart4.setOption(option)
},
getInfo() {
this.$http.post(`/app/apppreventionreturntopoverty/statistics-prtp?areaId=${this.addressAreaId}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.initChart1(res.data['近半年趋势'])
this.initChart3(res.data['风险类型排行'])
this.initChart4(res.data['风险消除方式'])
}
})
}
}
}
</script>
<style lang="scss">
.statistics {
padding: 112px 0 120px;
.statistics {
padding: 112px 0 120px;
.area {
display: flex;
position: fixed;
align-items: center;
top: 0;
left: 0;
z-index: 11;
width: 100%;
padding: 0 32px;
height: 112px;
color: #333333;
font-size: 30px;
background: #fff;
.area {
display: flex;
position: fixed;
align-items: center;
top: 0;
left: 0;
z-index: 11;
width: 100%;
padding: 0 32px;
height: 112px;
color: #333333;
font-size: 30px;
background: #fff;
.separat {
padding: 0 8px;
}
i {
color: #3F8DF5;
font-size: 30px;
font-style: normal;
}
span {
color: #333333;
font-size: 30px;
}
.separat {
padding: 0 8px;
}
.charts-wrapper {
position: relative;
z-index: 1;
padding: 0 32px;
i {
color: #3F8DF5;
font-size: 30px;
font-style: normal;
}
.total {
display: flex;
align-items: center;
height: 200px;
margin-top: 32px;
background: #FFFFFF;
border-radius: 8px;
span {
color: #333333;
font-size: 30px;
}
}
.total-item {
flex: 1;
text-align: center;
.charts-wrapper {
position: relative;
z-index: 1;
padding: 0 32px;
h2 {
font-size: 64px;
color: #3192F4;
}
.total {
display: flex;
align-items: center;
height: 200px;
margin-top: 32px;
background: #FFFFFF;
border-radius: 8px;
p {
margin-top: 10px;
color: #999999;
font-size: 28px;
}
}
}
.middle-total {
height: 160px;
.total-item {
flex: 1;
text-align: center;
h2 {
font-size: 48px!important;
font-size: 64px;
color: #3192F4;
}
p {
margin-top: 8px!important;
}
}
.charts {
margin-top: 32px;
background: #FFFFFF;
border-radius: 8px;
& > h2 {
height: 96px;
line-height: 96px;
padding: 0 32px;
color: #333333;
font-size: 32px;
border-bottom: 1px solid #DDDDDD;
}
& > div {
width: 686px;
margin: 0 auto;
padding: 32px 0;
margin-top: 10px;
color: #999999;
font-size: 28px;
}
}
}
.middle-total {
height: 160px;
h2 {
font-size: 48px !important;
}
p {
margin-top: 8px !important;
}
}
.charts {
margin-top: 32px;
background: #FFFFFF;
border-radius: 8px;
& > h2 {
height: 96px;
line-height: 96px;
padding: 0 32px;
color: #333333;
font-size: 32px;
border-bottom: 1px solid #DDDDDD;
}
& > div {
width: 686px;
margin: 0 auto;
padding: 32px 0;
}
}
}
}
</style>

View File

@@ -2,15 +2,16 @@
<div class="news">
<div class="tab">
<span
@click="changeTab(index, item.dictValue)"
v-for="(item, index) in tabList"
:key="index"
:class="[currIndex === index ? 'active' : '']">
@click="changeTab(index, item.dictValue)"
v-for="(item, index) in tabList"
:key="index"
:class="[currIndex === index ? 'active' : '']">
{{ item.dictName }}
</span>
</div>
<div class="list">
<div class="item" v-for="(item, index) in list" :key="index" @click="linkTo('/pages/PovertyAlleviation/NewsDetail?id=' + item.id)">
<div class="item" v-for="(item, index) in list" :key="index"
@click="linkTo('/pages/PovertyAlleviation/NewsDetail?id=' + item.id)">
<div class="left">
<h2>{{ item.title }}</h2>
<div class="item-bottom">
@@ -18,7 +19,7 @@
<span>{{ item.createTime }}</span>
</div>
</div>
<image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''" />
<image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/>
</div>
<ai-empty v-if="!list.length && isMore" style="padding-bottom: 20px;"></ai-empty>
</div>
@@ -26,203 +27,204 @@
</template>
<script>
import AiEmpty from '@/components/AiEmpty/AiEmpty'
export default {
data () {
return {
currIndex: 0,
list: [],
current: 1,
size: 15,
type: '',
tabList: [],
isMore: false
}
},
import AiEmpty from '@/components/AiEmpty/AiEmpty'
components: {
AiEmpty
},
export default {
data() {
return {
currIndex: 0,
list: [],
current: 1,
size: 15,
type: '',
tabList: [],
isMore: false
}
},
components: {
AiEmpty
},
onLoad() {
uni.showLoading()
this.$dict.load(['newsCenterPolicyType']).then(() => {
this.tabList = this.$dict.getDict('newsCenterPolicyType')
this.type = this.$dict.getDict('newsCenterPolicyType')[0].dictValue
this.getList()
})
},
methods: {
changeTab(index, type) {
this.type = type
this.currIndex = index
this.current = 1
this.isMore = false
onLoad() {
uni.showLoading()
this.$dict.load(['newsCenterPolicyType']).then(() => {
this.tabList = this.$dict.getDict('newsCenterPolicyType')
this.type = this.$dict.getDict('newsCenterPolicyType')[0].dictValue
this.$nextTick(() => {
this.getList()
})
},
methods: {
changeTab (index, type) {
this.type = type
this.currIndex = index
this.current = 1
this.isMore = false
uni.showLoading()
this.$nextTick(() => {
this.getList()
})
},
linkTo (url) {
uni.navigateTo({
url
})
},
getList() {
if (this.isMore) return
this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
params: {
current: this.current,
size: this.size,
status: 1,
policyType: this.type
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
uni.hideLoading()
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
})
}
linkTo(url) {
uni.navigateTo({
url
})
},
onReachBottom() {
this.getList()
getList() {
if (this.isMore) return
this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
params: {
current: this.current,
size: this.size,
status: 1,
policyType: this.type
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
uni.hideLoading()
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
})
}
},
onReachBottom() {
this.getList()
}
}
</script>
<style lang="scss">
.news {
padding: 96px 0 40px;
.news {
padding: 96px 0 40px;
.list {
padding: 0 30px;
background: #fff;
.list {
padding: 0 30px;
background: #fff;
.item {
.item {
display: flex;
align-items: center;
padding: 32px 0;
border-bottom: 1px solid #DDDDDD;
&:active {
background: #ddd;
}
&:last-child {
border-bottom: none;
}
.left {
flex: 1;
margin-right: 20px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
& > image {
width: 200px;
height: 140px;
}
h2 {
margin-bottom: 32px;
color: #333333;
font-size: 30px;
font-weight: 600;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.item-bottom {
display: flex;
align-items: center;
padding: 32px 0;
border-bottom: 1px solid #DDDDDD;
&:active {
background: #ddd;
}
span {
color: #999999;
font-size: 24px;
&:last-child {
border-bottom: none;
}
.left {
flex: 1;
margin-right: 20px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
& > image {
width: 200px;
height: 140px;
}
h2 {
margin-bottom: 32px;
color: #333333;
font-size: 30px;
font-weight: 600;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.item-bottom {
display: flex;
align-items: center;
span {
color: #999999;
font-size: 24px;
&:first-child {
margin-right: 32px;
}
}
}
}
}
.tab {
display: flex;
position: fixed;
align-items: center;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 96px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
box-sizing: border-box;
* {
box-sizing: border-box;
}
span {
position: relative;
flex: 1;
height: 96rpx;
line-height: 96rpx;
color: #999999;
text-align: center;
font-size: 28px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 88px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
&:first-child {
margin-right: 32px;
}
}
}
}
}
</style>
.tab {
display: flex;
position: fixed;
align-items: center;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 96px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
box-sizing: border-box;
* {
box-sizing: border-box;
}
span {
position: relative;
flex: 1;
height: 96 rpx;
line-height: 96 rpx;
color: #999999;
text-align: center;
font-size: 28px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 88px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
}
}
}
}
}
</style>

View File

@@ -10,89 +10,89 @@
</template>
<script>
export default {
data () {
return {
pageShow: false,
info: {},
content: `
export default {
data() {
return {
pageShow: false,
info: {},
content: `
<p>露从今夜白,月是故乡明</p>
<img src="https://cdn.uviewui.com/uview/swiper/2.jpg" />
`
}
},
}
},
onLoad (query) {
uni.showLoading()
this.getInfo(query.id)
},
onLoad(query) {
uni.showLoading()
this.getInfo(query.id)
},
methods: {
getInfo (id) {
this.$http.post(`/app/appnewscenterinfo/queryDetailById?id=${id}`).then(res => {
if (res.code == 0) {
this.info = res.data
methods: {
getInfo(id) {
this.$http.post(`/app/appnewscenterinfo/queryDetailById?id=${id}`).then(res => {
if (res.code == 0) {
this.info = res.data
this.$nextTick(() => {
this.pageShow = true
})
}
uni.hideLoading()
})
}
this.$nextTick(() => {
this.pageShow = true
})
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.detail {
min-height: 100vh;
padding: 40px 32px 40px;
box-sizing: border-box;
background: #fff;
.detail {
min-height: 100vh;
padding: 40px 32px 40px;
box-sizing: border-box;
background: #fff;
& > h2 {
margin-bottom: 16px;
line-height: 1.3;
font-size: 40px;
color: #333;
font-weight: 600;
& > h2 {
margin-bottom: 16px;
line-height: 1.3;
font-size: 40px;
color: #333;
font-weight: 600;
}
& > span {
font-size: 28px;
color: #999;
}
.content {
width: 100%;
margin-top: 40px;
::v-deep * {
box-sizing: border-box;
}
& > span {
::v-deep p {
margin: 20px 0;
line-height: 1.4;
color: #666;
font-size: 28px;
color: #999;
text-align: justify;
}
.content {
::v-deep img {
width: 100%;
margin-top: 40px;
}
::v-deep * {
box-sizing: border-box;
}
::v-deep br {
display: block;
margin: 20px 0;
}
::v-deep p {
margin: 20px 0;
line-height: 1.4;
color: #666;
font-size: 28px;
text-align: justify;
}
::v-deep img {
width: 100%;
}
::v-deep br {
display: block;
margin: 20px 0;
}
.video {
width: 100%;
height: 600px;
}
.video {
width: 100%;
height: 600px;
}
}
}
</style>

View File

@@ -2,22 +2,23 @@
<div class="info">
<div class="info-top">
<div class="info-top__item" @click="linkTo('/pages/Monitor/Monitor')">
<image src="/static/images/wdbf.png" />
<image src="/static/images/wdbf.png"/>
<h2>监测对象</h2>
</div>
<div class="info-top__item" @click="linkTo('/pages/povertyMonitor/povertyMonitor')">
<image src="/static/images/yjjk.png" />
<image src="/static/images/yjjk.png"/>
<h2>预警监控</h2>
</div>
<div class="info-top__item" @click="linkTo('/pages/PovertyAlleviation/News')">
<image src="/static/images/news.png" />
<image src="/static/images/news.png"/>
<h2>政策动态</h2>
</div>
</div>
<div class="news">
<h2>最新动态</h2>
<div class="news-list">
<div class="news-item" v-for="(item, index) in list" :key="index" @click="linkTo(`/pages/PovertyAlleviation/NewsDetail?id=${item.id}`)">
<div class="news-item" v-for="(item, index) in list" :key="index"
@click="linkTo(`/pages/PovertyAlleviation/NewsDetail?id=${item.id}`)">
<div class="left">
<h2>{{ item.title }}</h2>
<div class="item-bottom">
@@ -25,7 +26,7 @@
<span>{{ item.createTime }}</span>
</div>
</div>
<image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''" />
<image v-if="item.coverFile" :src="item.coverFile ? item.coverFile.url : ''"/>
</div>
</div>
</div>
@@ -33,137 +34,137 @@
</template>
<script>
export default {
data () {
return {
list: []
}
},
export default {
data() {
return {
list: []
}
},
onLoad () {
this.$dict.load(['newsCenterPolicyType']).then(() => {
this.getList()
onLoad() {
this.$dict.load(['newsCenterPolicyType']).then(() => {
this.getList()
})
},
methods: {
linkTo(url) {
uni.navigateTo({
url
})
},
methods: {
linkTo (url) {
uni.navigateTo({
url
})
},
getList () {
this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
params: {
current: 1,
size: 10,
status: 1
}
}).then(res => {
if (res.code == 0) {
this.list = res.data.records
}
})
}
getList() {
this.$http.post(`/app/appnewscenterinfo/listForWx`, null, {
params: {
current: 1,
size: 10,
status: 1
}
}).then(res => {
if (res.code == 0) {
this.list = res.data.records
}
})
}
}
}
</script>
<style lang="scss">
.info {
padding: 32px 30px;
.info-top {
display: flex;
align-items: center;
margin-bottom: 32px;
background: #FFFFFF;
border-radius: 16px;
.info {
padding: 32px 30px;
div {
flex: 1;
padding: 32px 0;
text-align: center;
.info-top {
display: flex;
align-items: center;
margin-bottom: 32px;
background: #FFFFFF;
border-radius: 16px;
image {
width: 80px;
height: 80px;
}
div {
flex: 1;
padding: 32px 0;
text-align: center;
h2 {
margin-top: 4px;
color: #3D434A;
font-size: 28px;
font-weight: normal;
}
image {
width: 80px;
height: 80px;
}
h2 {
margin-top: 4px;
color: #3D434A;
font-size: 28px;
font-weight: normal;
}
}
}
.news {
& > h2 {
margin-bottom: 32px;
color: #333333;
font-weight: 600;
font-size: 32px;
.news {
& > h2 {
margin-bottom: 32px;
color: #333333;
font-weight: 600;
font-size: 32px;
}
.news-item {
display: flex;
align-items: center;
margin-bottom: 20px;
padding: 32px 24px;
background: #fff;
border-radius: 14px;
&:active {
background: #eee;
}
.news-item {
&:last-child {
border-bottom: none;
}
.left {
flex: 1;
margin-right: 20px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
& > image {
width: 200px;
height: 140px;
}
h2 {
width: 100%;
margin-bottom: 32px;
color: #333333;
font-size: 30px;
font-weight: 600;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.item-bottom {
display: flex;
align-items: center;
margin-bottom: 20px;
padding: 32px 24px;
background: #fff;
border-radius: 14px;
&:active {
background: #eee;
}
span {
color: #999999;
font-size: 24px;
&:last-child {
border-bottom: none;
}
.left {
flex: 1;
margin-right: 20px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
& > image {
width: 200px;
height: 140px;
}
h2 {
width: 100%;
margin-bottom: 32px;
color: #333333;
font-size: 30px;
font-weight: 600;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.item-bottom {
display: flex;
align-items: center;
span {
color: #999999;
font-size: 24px;
&:first-child {
margin-right: 32px;
}
&:first-child {
margin-right: 32px;
}
}
}
}
}
}
</style>

View File

@@ -4,48 +4,54 @@
<div class="item">
<div class="label">播发内容</div>
<div class="value" @click="linkTo('/pages/resourcesManage/resourcesManage?isChoose=1')">
<span :class="formData.mediaName == '请选择' ? 'color-999' : ''">{{formData.mediaName}}</span>
<span :class="formData.mediaName == '请选择' ? 'color-999' : ''">{{ formData.mediaName }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
<div class="item">
<div class="label">播放设备</div>
<div class="value" @click="selectClick('showEquipment', equipmentList)">
<span :class="formData.serialName == '请选择' ? 'color-999' : ''">{{formData.serialName}}</span>
<span :class="formData.serialName == '请选择' ? 'color-999' : ''">{{ formData.serialName }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
<div class="item">
<div class="label">播发级别</div>
<div class="value" @click="selectClick('showMessageLevel', messageLevelList)">
<span :class="formData.messageLevelName == '请选择' ? 'color-999' : ''">{{formData.messageLevelName}}</span>
<span :class="formData.messageLevelName == '请选择' ? 'color-999' : ''">{{ formData.messageLevelName }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
</div>
<div class="radio-content">
<div class="title">播放方式</div>
<div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''" @click="formData.taskType = 0">立即播放<img src="./img/bigHorn-xz.png" alt=""></div>
<div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img src="./img/bigHorn-xz.png" alt="">定时播放</div>
<div class="item mar-r50" :class="formData.taskType == 0 ? 'active' : ''" @click="formData.taskType = 0">立即播放<img
src="./img/bigHorn-xz.png" alt=""></div>
<div class="item" :class="formData.taskType == 1 ? 'active' : ''" @click="formData.taskType = 1"><img
src="./img/bigHorn-xz.png" alt="">定时播放
</div>
</div>
<div class="content" v-if="formData.taskType != 0">
<div class="item">
<div class="label">定时策略</div>
<div class="value" @click="selectClick('showCyclingType', cyclingTypeList)">
<span :class="formData.cyclingTypeName == '请选择' ? 'color-999' : ''">{{formData.cyclingTypeName}}</span>
<span :class="formData.cyclingTypeName == '请选择' ? 'color-999' : ''">{{ formData.cyclingTypeName }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
</div>
<div class="radio-content" v-if="formData.taskType != 0 && formData.cyclingType == 2">
<div class="title">播放天数</div>
<div class="mini-item" :class="item.isCheck ? 'mini-active' : ''" v-for="(item, index) in dayList" :key="index" @click="checkClick(index)">{{item.label}}</div>
<div class="mini-item" :class="item.isCheck ? 'mini-active' : ''" v-for="(item, index) in dayList" :key="index"
@click="checkClick(index)">{{ item.label }}
</div>
</div>
<div class="content" v-if="formData.taskType != 0 && formData.cyclingType == 3">
<div class="item">
<div class="label">播放天数</div>
<div class="value">
<u-input type="text" placeholder="请输入" height="18" input-align="right" v-model="formData.broadcastDay" maxlength="4" />
<u-input type="text" placeholder="请输入" height="18" input-align="right" v-model="formData.broadcastDay"
maxlength="4"/>
</div>
</div>
</div>
@@ -53,33 +59,35 @@
<div class="item">
<div class="label">开始日期</div>
<div class="value" @click="timeClick(true, 'showDate')">
<span :class="formData.startDate ? 'color-999' : ''">{{formData.startDate || '请选择'}}</span>
<span :class="formData.startDate ? 'color-999' : ''">{{ formData.startDate || '请选择' }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
<div class="item">
<div class="label">开始时间</div>
<div class="value" @click="timeClick(false, 'showSatrt')">
<span :class="formData.startTime ? 'color-999' : ''">{{formData.startTime || '请选择'}}</span>
<span :class="formData.startTime ? 'color-999' : ''">{{ formData.startTime || '请选择' }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
<div class="item">
<div class="label">结束时间</div>
<div class="value" @click="timeClick(false, 'showEnd')">
<span :class="formData.endTime ? 'color-999' : ''">{{formData.endTime || '请选择'}}</span>
<span :class="formData.endTime ? 'color-999' : ''">{{ formData.endTime || '请选择' }}</span>
<img src="./img/right-icon.png" alt="">
</div>
</div>
</div>
<div class="btn" @click="addConfirm">确认</div>
<u-select v-model="showSelect" :list="selectList" @confirm="confirm" label-name="dictName" value-name="dictValue"></u-select>
<u-select v-model="showSelect" :list="selectList" @confirm="confirm" label-name="dictName"
value-name="dictValue"></u-select>
<u-picker v-model="showDateTime" mode="time" :params="params" @confirm="confirm"></u-picker>
<AiBack></AiBack>
</div>
</template>
<script>
import AiBack from "@/components/AiBack";
<script>
import AiBack from "@/components/AiBack";
export default {
name: "addPlay",
data() {
@@ -166,7 +174,7 @@ export default {
AiBack
},
onLoad () {
onLoad() {
uni.$on('choose', e => {
console.log(e)
this.formData.mediaId = e.mediaId
@@ -178,41 +186,41 @@ export default {
addConfirm() {
var cyclingDateList = []
this.dayList.map((item) => {
if(item.isCheck) {
if (item.isCheck) {
cyclingDateList.push(item.value)
}
})
if(!this.formData.mediaId) {
if (!this.formData.mediaId) {
return this.$u.toast('请选择播发内容')
}
if(!this.formData.serialNo) {
if (!this.formData.serialNo) {
return this.$u.toast('请选择播放设备')
}
if(!this.formData.messageLevel) {
if (!this.formData.messageLevel) {
return this.$u.toast('播发级别')
}
//播放方式(定时播放)
if(this.formData.taskType != 0 && this.formData.startDate == '请选择') {
if (this.formData.taskType != 0 && this.formData.startDate == '请选择') {
return this.$u.toast('请选择开始日期')
}
if(this.formData.taskType != 0 && this.formData.startTime == '请选择') {
if (this.formData.taskType != 0 && this.formData.startTime == '请选择') {
return this.$u.toast('请选择开始时间')
}
if(this.formData.taskType != 0 && this.formData.endTime == '请选择') {
if (this.formData.taskType != 0 && this.formData.endTime == '请选择') {
return this.$u.toast('请选择结束时间')
}
//播放方式(定时播放)定时策略(时长)
if(this.formData.taskType != 0 && this.formData.cyclingType == 3 && !this.formData.broadcastDay) {
if (this.formData.taskType != 0 && this.formData.cyclingType == 3 && !this.formData.broadcastDay) {
return this.$u.toast('请输入播放天数')
}
//播放方式(定时播放)定时策略(自定义)
if(this.formData.taskType != 0 && this.formData.cyclingType == 2 && !cyclingDateList.length) {
if (this.formData.taskType != 0 && this.formData.cyclingType == 2 && !cyclingDateList.length) {
return this.$u.toast('请选择播放天数')
}
if(this.formData.taskType != 0 && this.formData.cyclingType == 2) {
if (this.formData.taskType != 0 && this.formData.cyclingType == 2) {
this.formData.cyclingDate = cyclingDateList.join(',')
}
this.formData.coverageType = '4'
@@ -223,46 +231,46 @@ export default {
uni.navigateBack()
}, 1000)
}
})
})
},
linkTo (path) {
linkTo(path) {
uni.navigateTo({
url: path
})
},
confirm(e) {
if(this.showMedia) {
if (this.showMedia) {
this.formData.mediaId = e[0].value
this.formData.mediaName = e[0].label
}
if(this.showEquipment) {
if (this.showEquipment) {
this.formData.serialNo = e[0].value
this.formData.serialName = e[0].label
}
if(this.showMessageLevel) {
if (this.showMessageLevel) {
this.formData.messageLevel = e[0].value
this.formData.messageLevelName = e[0].label
}
if(this.showCyclingType) {
if (this.showCyclingType) {
this.formData.cyclingType = e[0].value
this.formData.cyclingTypeName = e[0].label
}
if(this.showDate) {
if (this.showDate) {
this.formData.startDate = e.year + '-' + e.month + '-' + e.day
}
if(this.showSatrt) {
if (this.showSatrt) {
var startTime = e.hour + ':' + e.minute + ':' + e.second
var myDate = new Date();
var time = myDate.getHours() + ':' + myDate.getMinutes() + ':' + myDate.getSeconds()
var time = myDate.getHours() + ':' + myDate.getMinutes() + ':' + myDate.getSeconds()
if (this.timeToSec(startTime) - this.timeToSec(time) > 0) {
this.formData.startTime = startTime
}else {
} else {
this.$u.toast('开始时间要大于当前时间')
}
}
if(this.showEnd) {
if (this.showEnd) {
var endTime = e.hour + ':' + e.minute + ':' + e.second
console.log(this.timeToSec(endTime), this.timeToSec(this.formData.startTime))
if (this.timeToSec(endTime) - this.timeToSec(this.formData.startTime) > 0) {
@@ -291,7 +299,7 @@ export default {
this.$http.post(`/app/appdlbresource/list?current=1&size=10000`).then((res) => {
if (res.code == 0) {
this.mediaList = []
if(res.data && res.data.records.length) {
if (res.data && res.data.records.length) {
res.data.records.map((item) => {
let info = {
dictName: item.name,
@@ -307,7 +315,7 @@ export default {
this.$http.post(`/app/appdlbquipment/getDlbDeviceList?current=1&size=10000&devStatus=5&keyword=`).then((res) => {
if (res.code == 0) {
this.equipmentList = []
if(res.data && res.data.records.length) {
if (res.data && res.data.records.length) {
res.data.records.map((item) => {
let info = {
dictName: item.deviceName,
@@ -325,7 +333,7 @@ export default {
timeClick(showYear, showType) {
this[showType] = true
this.showDateTime = true
if(showYear) {
if (showYear) {
this.params = {
year: true,
month: true,
@@ -334,7 +342,7 @@ export default {
minute: false,
second: false
}
}else {
} else {
this.params = {
year: false,
month: false,
@@ -349,10 +357,10 @@ export default {
var s = "";
var hour = time.split(":")[0];
var min = time.split(":")[1];
var second = time.split(":")[2];
var second = time.split(":")[2];
s = Number(hour * 3600) + Number(min * 60) + Number(second)
return s;
},
},
},
created() {
this.$dict.load('dlbMessageUrgency', 'dlbBroadTaskType', 'dlbDyclingType').then(() => {
@@ -367,10 +375,12 @@ export default {
<style lang="scss" scoped>
.addPlay {
padding-bottom: 128px;
.content{
.content {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
padding: 34px 0;
font-size: 32px;
@@ -381,11 +391,13 @@ export default {
display: flex;
color: #333;
justify-content: space-between;
.label{
.label {
width: 198px;
font-size: 32px;
}
.value{
.value {
display: flex;
align-items: center;
justify-content: flex-end;
@@ -401,35 +413,41 @@ export default {
text-overflow: ellipsis;
white-space: nowrap;
}
img{
img {
width: 32px;
height: 32px;
vertical-align: middle;
margin-left: 6px;
}
}
.color-999{
.color-999 {
color: #999;
}
}
}
.radio-content{
.radio-content {
padding: 34px 32px 38px;
border-bottom: 1px solid #ddd;
background-color: #fff;
.title{
.title {
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333;
line-height: 44px;
margin-bottom: 54px;
span{
span {
font-size: 24px;
font-weight: 400;
}
}
.item{
.item {
display: inline-block;
width: 320px;
height: 112px;
@@ -441,15 +459,18 @@ export default {
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
img{
img {
display: none;
}
}
.active{
.active {
background: #E7F1FE;
color: #1174FE;
position: relative;
img{
img {
display: inline-block;
position: absolute;
bottom: 0;
@@ -458,10 +479,12 @@ export default {
height: 46px;
}
}
.mar-r50 {
margin-right: 50px;
}
.mini-item{
.mini-item {
display: inline-block;
width: 128px;
height: 72px;
@@ -474,16 +497,19 @@ export default {
margin-right: 58px;
margin-bottom: 32px;
}
.mini-item:nth-of-type(5) {
margin-right: 0;
}
.mini-active{
.mini-active {
background: #F2F8FE;
border: 1px solid #89B2EE;
box-sizing: border-box;
}
}
.btn{
.btn {
position: fixed;
bottom: 0;
left: 0;
@@ -498,4 +524,4 @@ export default {
color: #FFFFFF;
}
}
</style>
</style>

View File

@@ -19,15 +19,16 @@
</div>
</div>
<div class="banner">
<div class="item" :class="item.bgClass" v-for="(item, index) in bannerList" :key="index" @click="linkTo(item.path)">
<h2>{{item.title}}</h2>
<div>{{item.text}}</div>
<div class="item" :class="item.bgClass" v-for="(item, index) in bannerList" :key="index"
@click="linkTo(item.path)">
<h2>{{ item.title }}</h2>
<div>{{ item.text }}</div>
<img :src="item.imgUrl" alt="">
</div>
</div>
</div>
</template>
<script>
<script>
export default {
name: "bigHorn",
data() {
@@ -75,13 +76,15 @@ export default {
</script>
<style lang="scss" scoped>
.bigHorn {
.header{
.header {
position: relative;
img{
img {
width: 100%;
height: 306px;
}
.content{
.content {
width: 686px;
padding: 40px 0;
background: #FFFFFF;
@@ -92,15 +95,18 @@ export default {
left: 50%;
transform: translateX(-50%);
display: flex;
.item{
.item {
text-align: center;
flex: 1;
img{
img {
width: 64px;
height: 64px;
margin-bottom: 18px;
}
div{
div {
font-size: 30px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -108,7 +114,8 @@ export default {
line-height: 42px;
margin-bottom: 10px;
}
h2{
h2 {
font-size: 40px;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
@@ -118,9 +125,11 @@ export default {
}
}
}
.banner{
.banner {
margin-top: 150px;
.item{
.item {
width: 686px;
height: 190px;
border-radius: 12px;
@@ -129,37 +138,44 @@ export default {
box-sizing: border-box;
color: #FFF;
position: relative;
h2{
h2 {
font-size: 42px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
line-height: 60px;
margin-bottom: 16px;
}
div{
div {
font-size: 26px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFF;
line-height: 32px;
}
img{
img {
width: 160px;
position: absolute;
top: 10px;
right: 30px;
}
}
.bg-67A3F4{
.bg-67A3F4 {
background: #67A3F4;
}
.bg-4ED5BB{
.bg-4ED5BB {
background: #4ED5BB;
}
.bg-E5B565{
.bg-E5B565 {
background: #E5B565;
}
.bg-F19661{
.bg-F19661 {
background: #F19661;
}
}

View File

@@ -1,11 +1,11 @@
<template>
<div class="onlineList">
<div class="record">
<div class="item" v-for="(item, index) in list" :key="index">
<div class="item" v-for="(item, index) in list" :key="index">
<img src="./img/bigHorn-lb@2x.png" alt="">
<div class="info">
<p>{{item.deviceName}}</p>
<span>{{item.areaName}}</span>
<p>{{ item.deviceName }}</p>
<span>{{ item.areaName }}</span>
</div>
</div>
</div>
@@ -13,9 +13,10 @@
<AiBack></AiBack>
</div>
</template>
<script>
<script>
import AiEmpty from '@/components/AiEmpty/AiEmpty'
import AiBack from "@/components/AiBack";
export default {
name: "onlineList",
data() {
@@ -56,22 +57,26 @@ export default {
</script>
<style lang="scss" scoped>
.onlineList {
.record{
.record {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
border-bottom: 1px solid #ddd;
display: flex;
padding: 12px 40px 16px 0;
img{
img {
width: 48px;
height: 48px;
margin: 12px 16px 0 0;
}
.info{
.info {
width: calc(100% - 100px);
p{
p {
font-size: 34px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -79,7 +84,8 @@ export default {
line-height: 48px;
margin-bottom: 12px;
}
span{
span {
font-size: 22px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;

View File

@@ -4,9 +4,9 @@
<div class="item" v-for="(item, index) in list" :key="index">
<img src="./img/bigHorn-lb@2x.png" alt="">
<div class="info">
<p>{{item.deviceName}}</p>
<span>{{item.createTime}}</span><br />
<span>{{item.name}}</span>
<p>{{ item.deviceName }}</p>
<span>{{ item.createTime }}</span><br/>
<span>{{ item.name }}</span>
</div>
</div>
</div>
@@ -14,9 +14,10 @@
<AiBack></AiBack>
</div>
</template>
<script>
<script>
import AiEmpty from '@/components/AiEmpty/AiEmpty'
import AiBack from "@/components/AiBack";
export default {
name: "onlinePlayList",
data() {
@@ -58,22 +59,26 @@ export default {
</script>
<style lang="scss" scoped>
.onlinePlayList {
.record{
.record {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
border-bottom: 1px solid #ddd;
display: flex;
padding: 12px 40px 16px 0;
img{
img {
width: 48px;
height: 48px;
margin: 12px 16px 0 0;
}
.info{
.info {
width: calc(100% - 100px);
p{
p {
font-size: 34px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -81,7 +86,8 @@ export default {
line-height: 48px;
margin-bottom: 12px;
}
span{
span {
font-size: 22px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;

View File

@@ -5,21 +5,25 @@
<span>操作</span>
</div>
<div class="record">
<div class="item" v-for="(item, index) in list" :key="index">
<div class="item" v-for="(item, index) in list" :key="index">
<div class="info">
<p>{{item.messageName}}</p>
<span>{{item.createTime}}</span><br />
<span>{{item.deviceName}}</span>
<p>{{ item.messageName }}</p>
<span>{{ item.createTime }}</span><br/>
<span>{{ item.deviceName }}</span>
</div>
<div class="btn bg-3975C6"
v-if="item.broadcastStatus == 0 || item.broadcastStatus == 1 || item.broadcastStatus == 2"
@click="cancel(item.broadcastId)">撤销
</div>
<div class="btn bg-3975C6" v-if="item.broadcastStatus == 0 || item.broadcastStatus == 1 || item.broadcastStatus == 2" @click="cancel(item.broadcastId)">撤销</div>
<div class="btn bg-AFD0FC" v-if="item.broadcastStatus == 6">已取消</div>
</div>
</div>
<AiBack></AiBack>
</div>
</template>
<script>
import AiBack from "@/components/AiBack";
<script>
import AiBack from "@/components/AiBack";
export default {
name: "playList",
data() {
@@ -71,7 +75,7 @@ export default {
</script>
<style lang="scss" scoped>
.playList {
.title{
.title {
width: 100%;
height: 88px;
line-height: 88px;
@@ -84,21 +88,25 @@ export default {
box-sizing: border-box;
border-bottom: 1px solid #ddd;
}
.record{
.record {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
border-bottom: 1px solid #ddd;
display: flex;
justify-content: space-between;
padding: 12px 40px 16px 0;
box-sizing: border-box;
.info{
.info {
width: 480px;
margin-right: 40px;
word-break: break-all;
p{
p {
font-size: 34px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -106,7 +114,8 @@ export default {
line-height: 48px;
margin-bottom: 12px;
}
span{
span {
font-size: 22px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -114,7 +123,8 @@ export default {
line-height: 32px;
}
}
.btn{
.btn {
width: 154px;
height: 60px;
border-radius: 8px;
@@ -126,10 +136,12 @@ export default {
color: #FFF;
margin-top: 18px;
}
.bg-3975C6{
.bg-3975C6 {
background: #3975C6;
}
.bg-AFD0FC{
.bg-AFD0FC {
background: #AFD0FC;
}
}

View File

@@ -3,7 +3,7 @@
<div class="search">
<div class="search-bg">
<img src="./img/search-icon.png" alt="">
<u-input v-model="value" type="text" placeholder="搜索设备名称" class="search-input" height="18" />
<u-input v-model="value" type="text" placeholder="搜索设备名称" class="search-input" height="18"/>
</div>
</div>
<div class="record">
@@ -35,7 +35,7 @@
</div>
</div>
</template>
<script>
<script>
export default {
name: "selectEquipment",
data() {
@@ -43,9 +43,7 @@ export default {
value: ''
}
},
methods: {
},
methods: {},
mounted() {
}
@@ -54,14 +52,16 @@ export default {
<style lang="scss" scoped>
.selectEquipment {
padding-bottom: 128px;
.search{
.search {
width: 100%;
height: 104px;
background: #FFF;
margin-bottom: 4px;
padding: 20px 32px;
box-sizing: border-box;
.search-bg{
.search-bg {
width: 686px;
height: 64px;
padding: 14px 0;
@@ -69,14 +69,16 @@ export default {
background: #F5F5F5;
border-radius: 32px;
position: relative;
img{
img {
width: 32px;
height: 32px;
position: absolute;
top: 16px;
left: 32px;
}
.search-input{
.search-input {
width: 590px;
height: 36px;
line-height: 36px;
@@ -85,38 +87,45 @@ export default {
}
}
}
.record{
.record {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
display: flex;
border-bottom: 1px solid #ddd;
.check-img{
.check-img {
width: 32px;
height: 32px;
margin: 32px 32px 0 0;
}
.voice-img{
.voice-img {
width: 48px;
height: 48px;
margin: 28px 16px 0 0;
}
.info{
.info {
width: calc(100% - 148px);
padding: 18px 0;
line-height: 44px;
font-size: 34px;
display: flex;
justify-content: space-between;
.text{
p{
.text {
p {
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
color: #333;
margin-bottom: 8px;
}
span{
span {
font-size: 26px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -124,7 +133,8 @@ export default {
line-height: 36px;
}
}
.status{
.status {
font-size: 34px;
font-family: PingFang-SC-Medium, PingFang-SC;
font-weight: 500;
@@ -134,7 +144,8 @@ export default {
}
}
}
.btn{
.btn {
position: fixed;
bottom: 0;
left: 0;
@@ -144,7 +155,8 @@ export default {
border-top: 1px solid #ddd;
padding: 24px 32px 24px 0;
box-sizing: border-box;
div{
div {
width: 192px;
height: 80px;
line-height: 80px;
@@ -154,7 +166,7 @@ export default {
color: #fff;
font-size: 32px;
float: right;
}
}
}
}
</style>

View File

@@ -13,17 +13,13 @@
</div>
</div>
</template>
<script>
<script>
export default {
name: "selectMp3",
data() {
return {
}
},
methods: {
return {}
},
methods: {},
mounted() {
}
@@ -32,18 +28,22 @@ export default {
<style lang="scss" scoped>
.selectMp3 {
padding-bottom: 128px;
.record{
.record {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
display: flex;
img{
img {
width: 32px;
height: 32px;
margin: 40px 16px 0 0;
}
.info{
.info {
width: calc(100% - 60px);
padding-bottom: 16px;
padding: 34px 0;
@@ -57,7 +57,8 @@ export default {
}
}
}
.btn{
.btn {
position: fixed;
bottom: 0;
left: 0;
@@ -67,7 +68,8 @@ export default {
border-top: 1px solid #ddd;
padding: 24px 32px 24px 0;
box-sizing: border-box;
div{
div {
width: 192px;
height: 80px;
line-height: 80px;
@@ -77,7 +79,7 @@ export default {
color: #fff;
font-size: 32px;
float: right;
}
}
}
}
</style>

View File

@@ -1,12 +1,13 @@
<template>
<div class="closemsg">
<img :src="imgSrc" alt="" />
<img :src="imgSrc" alt=""/>
<text>{{ text }}</text>
<u-button
type="primary"
:custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }"
@click="goBack"
>{{ btnText }}</u-button
type="primary"
:custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }"
@click="goBack"
>{{ btnText }}
</u-button
>
<back></back>
</div>
@@ -17,7 +18,7 @@ import back from '../../components/AiBack'
export default {
name: 'CloseMsg',
components: { back },
components: {back},
data() {
return {
flag: true
@@ -44,7 +45,7 @@ export default {
return this.flag ? '确定' : '查看详情'
},
imgSrc() {
return this.$cdn+'other/'+(this.flag?'kztcg.png':'kztsb.png')
return this.$cdn + 'other/' + (this.flag ? 'kztcg.png' : 'kztsb.png')
}
}
}

View File

@@ -5,7 +5,7 @@
<textarea placeholder="请输入批示意见" v-model.trim="description" maxlength="200"></textarea>
<u-row justify="between">
<span @click="description=''">清空内容</span>
<span>{{description.length || 0}}/200</span>
<span>{{ description.length || 0 }}/200</span>
</u-row>
</div>
<ai-back/>
@@ -14,78 +14,78 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiBack from "../../../components/AiBack";
export default {
name: "approval",
components: {AiBack},
data() {
return {
id: null,
description: ""
}
},
onLoad(opt) {
this.id = opt.id
},
methods: {
submit() {
this.$http.post("/app/appofficialdocumentinfo/instructionById", null, {
params: {
id: this.id,
description: this.description
}
}).then(res => {
if (res.code == 0) {
this.$u.toast("批示成功")
uni.navigateBack()
}
})
}
export default {
name: "approval",
components: {AiBack},
data() {
return {
id: null,
description: ""
}
},
onLoad(opt) {
this.id = opt.id
},
methods: {
submit() {
this.$http.post("/app/appofficialdocumentinfo/instructionById", null, {
params: {
id: this.id,
description: this.description
}
}).then(res => {
if (res.code == 0) {
this.$u.toast("批示成功")
uni.navigateBack()
}
})
}
}
}
</script>
<style lang="scss" scoped>
.approval {
background: #F5F5F5;
.approval {
background: #F5F5F5;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
header {
font-size: 32px;
color: #333333;
margin-bottom: 16px;
font-weight: bold;
}
textarea {
width: 100%;
}
span:first-child {
font-size: 28px;
color: #1365DD;
}
span:last-child {
font-size: 24px;
color: #999999;
}
header {
font-size: 32px;
color: #333333;
margin-bottom: 16px;
font-weight: bold;
}
.u-btn {
textarea {
width: 100%;
height: 112px !important;
font-size: 32px;
color: #FFFFFF;
position: fixed;
left: 0;
bottom: 0;
background: #197DF0 !important;
}
span:first-child {
font-size: 28px;
color: #1365DD;
}
span:last-child {
font-size: 24px;
color: #999999;
}
}
.u-btn {
width: 100%;
height: 112px !important;
font-size: 32px;
color: #FFFFFF;
position: fixed;
left: 0;
bottom: 0;
background: #197DF0 !important;
}
}
</style>

View File

@@ -2,43 +2,44 @@
<div class="detail">
<template v-if="!userSelect">
<div class="card">
<header>{{detail.documentName}}</header>
<header>{{ detail.documentName }}</header>
<u-gap height="16"></u-gap>
<u-row>
<span>公文编号</span>
<span>{{detail.documentCode}}</span>
<span>{{ detail.documentCode }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>公文类型</span>
<span>{{$dict.getLabel("officialDocumentName",detail.documentType)}}</span>
<span>{{ $dict.getLabel("officialDocumentName", detail.documentType) }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>紧急程度</span>
<span :style="{color:$dict.getColor('documentEmergencyLevel',detail.emergencyLevel)}">{{$dict.getLabel("documentEmergencyLevel",detail.emergencyLevel)}}</span>
<span
:style="{color:$dict.getColor('documentEmergencyLevel',detail.emergencyLevel)}">{{ $dict.getLabel("documentEmergencyLevel", detail.emergencyLevel) }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>发文机关</span>
<span>{{detail.issuingUnit}}</span>
<span>{{ detail.issuingUnit }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>发文字号</span>
<span>{{detail.issuingFont}}</span>
<span>{{ detail.issuingFont }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>签发人</span>
<span>{{detail.signer}}</span>
<span>{{ detail.signer }}</span>
</u-row>
<u-gap height="16"></u-gap>
<img v-if="detail.confidentialityLevel" :src="$cdn + tag(detail.confidentialityLevel)" alt="">
</div>
<div class="card" style="margin-bottom: 0;padding-top: 0">
<div class="label">备注</div>
<span>{{detail.remark}}</span>
<span>{{ detail.remark }}</span>
</div>
<div class="card" style="padding-top: 0" v-if="detail.files && detail.files.length">
<div class="label">相关附件</div>
@@ -46,30 +47,32 @@
<u-row justify="between">
<label class="left">
<img :src="$cdn + 'common/appendix.png'" alt="">
<span>{{item.fileName}}.{{item.postfix}}</span>
<span>{{ item.fileName }}.{{ item.postfix }}</span>
</label>
<span>{{(item.size/1024).toFixed(2)}}KB</span>
<span>{{ (item.size / 1024).toFixed(2) }}KB</span>
</u-row>
</div>
</div>
<div class="card">
<div class="label" style="96px;">{{detail.readType ==0 ? "流转信息" : "传阅情况"}}
<em>({{$dict.getLabel("documentStatus",detail.status)}})</em></div>
<div class="label" style="96px;">{{ detail.readType == 0 ? "流转信息" : "传阅情况" }}
<em>({{ $dict.getLabel("documentStatus", detail.status) }})</em></div>
<div class="progress">
<div class="item" v-for="(item,index) in detail.flowUsers" :key="index">
<div class="avatar">{{item.flowUserName && item.flowUserName.substr(-2)}}</div>
<div class="avatar">{{ item.flowUserName && item.flowUserName.substr(-2) }}</div>
<div class="right">
<u-row justify="between">
<text class="status" :style="{color:item.readStatus==1?'#FF8822':'#1365DD'}">{{$dict.getLabel(detail.readType ==1 ? "readingStatus" :
"documentFlowStatus",detail.readType ==0 ? item.flowStatus : item.readStatus)}}
<text class="status" :style="{color:item.readStatus==1?'#FF8822':'#1365DD'}">{{
$dict.getLabel(detail.readType == 1 ? "readingStatus" :
"documentFlowStatus", detail.readType == 0 ? item.flowStatus : item.readStatus)
}}
</text>
<text class="date">{{item.flowTime}}</text>
<text class="date">{{ item.flowTime }}</text>
</u-row>
<u-row justify="between">
<text class="name">{{item.flowUserName}}</text>
<text class="name">{{ item.flowUserName }}</text>
</u-row>
<u-row justify="between">
<text class="note">{{item.description}}</text>
<text class="note">{{ item.description }}</text>
</u-row>
</div>
</div>
@@ -81,7 +84,9 @@
<div @click="handleClick(1)">流转</div>
</div>
<div class="footer" v-if="detail.readType==1 && detail.flowRight==1" @click="read" style="background-color: #1365DD;color: #FFFFFF">我已阅完</div>
<div class="footer" v-if="detail.readType==1 && detail.flowRight==1" @click="read"
style="background-color: #1365DD;color: #FFFFFF">我已阅完
</div>
</template>
@@ -93,340 +98,340 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import {mapActions} from "vuex";
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import {mapActions} from "vuex";
export default {
name: "detail",
components: {AiBack, AiSelectEnterprise},
data() {
return {
id: null,
detail: {},
userSelect: false,
}
},
onLoad(opt) {
this.$dict.load("officialDocumentName", "documentEmergencyLevel", "documentStatus", "readingStatus", "documentFlowStatus")
this.id = opt.id
},
methods: {
...mapActions(['previewFile', 'injectJWeixin']),
read() {
this.$http.post("/app/appofficialdocumentinfo/readById", null, {
params: {
id: this.id
}
}).then(res => {
if (res.code == 0) {
this.$u.toast("已阅读")
this.getDetail()
}
})
},
preFile(e) {
if([".jpg",".png",".gif"].includes(e.postfix.toLowerCase())){
uni.previewImage({
current: e.url,
urls: [e.url]
})
}else {
this.previewFile({...e})
}
},
change(e) {
this.$http.post("/app/appofficialdocumentinfo/flowById", null, {
params: {
flowUserId: e[0].id,
flowUserName: e[0].name,
id: this.id,
avatar: e[0].avatar,
flag: 0
}
}).then(res => {
if (res.code == 0) {
this.$u.toast("流转成功")
this.getDetail()
}
})
},
tag(status) {
return {
"0": "common/mm.png",
"1": "common/jm.png",
"2": "common/tm.png"
}[status]
},
getDetail() {
this.$http.post("/app/appofficialdocumentinfo/queryDetailById", null, {
params: {
id: this.id,
flag: 1
}
}).then(res => {
if (res && res.data) {
this.detail = res.data
}
})
},
handleClick(status) {
if (status == 0) {
uni.navigateTo({
url: "/pages/documentFlow/components/approval?id=" + this.id
})
} else {
this.userSelect = true
}
}
},
onShow() {
this.getDetail()
export default {
name: "detail",
components: {AiBack, AiSelectEnterprise},
data() {
return {
id: null,
detail: {},
userSelect: false,
}
},
onLoad(opt) {
this.$dict.load("officialDocumentName", "documentEmergencyLevel", "documentStatus", "readingStatus", "documentFlowStatus")
this.id = opt.id
},
methods: {
...mapActions(['previewFile', 'injectJWeixin']),
read() {
this.$http.post("/app/appofficialdocumentinfo/readById", null, {
params: {
id: this.id
}
}).then(res => {
if (res.code == 0) {
this.$u.toast("已阅读")
this.getDetail()
}
})
},
preFile(e) {
if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) {
uni.previewImage({
current: e.url,
urls: [e.url]
})
} else {
this.previewFile({...e})
}
},
change(e) {
this.$http.post("/app/appofficialdocumentinfo/flowById", null, {
params: {
flowUserId: e[0].id,
flowUserName: e[0].name,
id: this.id,
avatar: e[0].avatar,
flag: 0
}
}).then(res => {
if (res.code == 0) {
this.$u.toast("流转成功")
this.getDetail()
}
})
},
tag(status) {
return {
"0": "common/mm.png",
"1": "common/jm.png",
"2": "common/tm.png"
}[status]
},
getDetail() {
this.$http.post("/app/appofficialdocumentinfo/queryDetailById", null, {
params: {
id: this.id,
flag: 1
}
}).then(res => {
if (res && res.data) {
this.detail = res.data
}
})
},
handleClick(status) {
if (status == 0) {
uni.navigateTo({
url: "/pages/documentFlow/components/approval?id=" + this.id
})
} else {
this.userSelect = true
}
}
},
onShow() {
this.getDetail()
}
}
</script>
<style lang="scss" scoped>
.detail {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 140px;
.detail {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 140px;
position: relative;
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
position: relative;
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
position: relative;
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
}
.u-row {
& > div {
background-color: #2266FF;
border-radius: 50%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
}
& > img {
width: 190px;
height: 190px;
position: absolute;
right: 0;
top: 74px;
}
& > span {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
}
.file {
height: 128px;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
padding: 0 16px;
margin-bottom: 32px;
& > .u-row {
height: 100%;
.left {
width: 500px;
display: flex;
align-items: center;
& > img {
flex-shrink: 0;
width: 96px;
height: 96px;
}
& > span {
font-size: 32px;
color: #333333;
display: inline-block;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
display:-webkit-box;
-webkit-box-orient:vertical;
-webkit-line-clamp:2;
}
}
& > span {
font-size: 28px;
color: #999999;
}
}
}
.active {
background-color: #F3F6F9;
}
.progress {
margin-top: 8px;
.item {
display: flex;
align-items: center;
position: relative;
min-height: 136px;
margin-bottom: 80px;
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
background-color: #2266FF;
font-size: 28px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.right {
width: 100%;
display: flex;
flex-direction: column;
& > .u-row {
margin-left: 40px;
.status {
font-size: 32px;
color: #333333;
}
.date {
font-size: 28px;
color: #999999;
}
.name {
font-size: 28px;
color: #666666;
margin: 8px 0;
}
.note {
font-size: 28px;
color: #343D65;
}
}
}
&:after {
content: "";
width: 4px;
height: 100%;
background-color: #EEEEEE;
position: absolute;
left: 40px;
top: 112px;
}
&:last-child:after {
display: none;
}
}
}
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background-color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
.u-row {
& > div {
color: #333333;
}
& > div:first-child {
width: 50%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:last-child {
width: 50%;
height: 100%;
background-color: #2266FF;
border-radius: 50%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
}
& > label {
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
}
& > img {
width: 190px;
height: 190px;
position: absolute;
right: 0;
top: 74px;
}
& > span {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
}
.file {
height: 128px;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
padding: 0 16px;
margin-bottom: 32px;
& > .u-row {
height: 100%;
.left {
width: 500px;
display: flex;
align-items: center;
& > img {
flex-shrink: 0;
width: 96px;
height: 96px;
}
& > span {
font-size: 32px;
color: #333333;
display: inline-block;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
& > span {
font-size: 28px;
color: #999999;
}
}
}
.active {
background-color: #F3F6F9;
}
.progress {
margin-top: 8px;
.item {
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
position: relative;
min-height: 136px;
margin-bottom: 80px;
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
background-color: #2266FF;
font-size: 28px;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
}
.right {
width: 100%;
display: flex;
flex-direction: column;
& > .u-row {
margin-left: 40px;
.status {
font-size: 32px;
color: #333333;
}
.date {
font-size: 28px;
color: #999999;
}
.name {
font-size: 28px;
color: #666666;
margin: 8px 0;
}
.note {
font-size: 28px;
color: #343D65;
}
}
}
&:after {
content: "";
width: 4px;
height: 100%;
background-color: #EEEEEE;
position: absolute;
left: 40px;
top: 112px;
}
&:last-child:after {
display: none;
}
}
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background-color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
& > div {
color: #333333;
}
& > div:first-child {
width: 50%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:last-child {
width: 50%;
height: 100%;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
}
& > label {
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
}
}
}
</style>

View File

@@ -2,29 +2,30 @@
<div class="document-flow">
<ai-top-fixed>
<header class="pad">
<u-search placeholder="请输入公文名称" v-model="documentName" @clear="documentName='',getList()" @search="getList" clearabled :show-action="false" height="64"></u-search>
<u-search placeholder="请输入公文名称" v-model="documentName" @clear="documentName='',getList()" @search="getList"
clearabled :show-action="false" height="64"></u-search>
</header>
</ai-top-fixed>
<div class="list pad" v-if="list.length">
<div class="card" v-for="(item,index) in list" :key="index" @click="handleClick(item)">
<u-row>
<em v-if="item.redStatus==0"></em>
<span>{{item.documentName}}</span>
<span>{{ item.documentName }}</span>
</u-row>
<u-gap height="16"></u-gap>
<u-row>
<label>公文类型</label>
<text style="color: #1365DD;">{{$dict.getLabel("officialDocumentName",item.documentType)}}</text>
<text style="color: #1365DD;">{{ $dict.getLabel("officialDocumentName", item.documentType) }}</text>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<label>登记人</label>
<text>{{item.createUserName}}</text>
<text>{{ item.createUserName }}</text>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<label>登记日期</label>
<text>{{item.createTime}}</text>
<text>{{ item.createTime }}</text>
</u-row>
<img :src=" $cdn + tag(item.readType)" alt="">
</div>
@@ -35,132 +36,132 @@
</template>
<script>
import AiTopFixed from "../../components/AiTopFixed";
import AiEmpty from "../../components/AiEmpty";
import AiTopFixed from "../../components/AiTopFixed";
import AiEmpty from "../../components/AiEmpty";
export default {
name: "documentFlow",
components: {AiTopFixed,AiEmpty},
data() {
export default {
name: "documentFlow",
components: {AiTopFixed, AiEmpty},
data() {
return {
documentName: "",
current: 1,
list: [],
status: "加载更多"
}
},
onLoad() {
this.$dict.load("officialDocumentName")
},
methods: {
tag(status) {
return {
documentName: "",
current: 1,
list: [],
status: "加载更多"
}
"0": 'common/1ps.png',
"1": 'common/2cy.png'
}[status]
},
onLoad(){
this.$dict.load("officialDocumentName")
},
methods: {
tag(status){
return {
"0": 'common/1ps.png',
"1": 'common/2cy.png'
}[status]
},
getList() {
this.$http.post("/app/appofficialdocumentinfo/appList", null, {
params:{
documentName: this.documentName,
size: 10,
current: this.current
getList() {
this.$http.post("/app/appofficialdocumentinfo/appList", null, {
params: {
documentName: this.documentName,
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
handleClick({id}) {
uni.navigateTo({
url: "/pages/documentFlow/components/detail?id=" + id
})
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
onShow(){
this.getList()
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
}
handleClick({id}) {
uni.navigateTo({
url: "/pages/documentFlow/components/detail?id=" + id
})
}
},
onShow() {
this.getList()
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
}
</script>
<style lang="scss" scoped>
.document-flow {
min-height: 100%;
background: #F5F5F5;
.document-flow {
min-height: 100%;
background: #F5F5F5;
::v-deep .content {
padding: 0;
}
::v-deep .content {
padding: 0;
}
header {
height: 112px;
background-color: #FFFFFF;
display: flex;
align-items: center;
}
header {
height: 112px;
background-color: #FFFFFF;
display: flex;
align-items: center;
}
.list {
margin: 32px 0;
.list {
margin: 32px 0;
.card {
background: #FFFFFF;
border-radius: 8px;
box-sizing: border-box;
padding: 32px;
position: relative;
margin-bottom: 32px;
.card {
background: #FFFFFF;
border-radius: 8px;
box-sizing: border-box;
padding: 32px;
position: relative;
margin-bottom: 32px;
.u-row{
flex-wrap: nowrap !important;
}
.u-row {
flex-wrap: nowrap !important;
}
em {
width: 16px;
height: 16px;
border-radius: 50%;
background-color: #FF4466;
font-style: normal;
margin-right: 8px;
flex-shrink: 0;
}
em {
width: 16px;
height: 16px;
border-radius: 50%;
background-color: #FF4466;
font-style: normal;
margin-right: 8px;
flex-shrink: 0;
}
span {
font-size: 32px;
font-weight: 600;
color: #333333;
}
span {
font-size: 32px;
font-weight: 600;
color: #333333;
}
label {
font-size: 30px;
color: #999999;
}
label {
font-size: 30px;
color: #999999;
}
text {
font-size: 30px;
color: #343D65;
}
text {
font-size: 30px;
color: #343D65;
}
img {
width: 160px;
height: 160px;
position: absolute;
right: 0;
bottom: 0;
}
img {
width: 160px;
height: 160px;
position: absolute;
right: 0;
bottom: 0;
}
}
.pad {
box-sizing: border-box;
padding: 32px 32px 0 32px;
}
}
.pad {
box-sizing: border-box;
padding: 32px 32px 0 32px;
}
}
</style>

View File

@@ -4,7 +4,7 @@
<template #btn>
<div class="areaSelector">
<span v-for="area in fullArea" :key="area.id" v-text="area.name"
:class="{current:area.id==areaId}" @tap="index=area.id,getChildAreas(area.id)"/>
:class="{current:area.id==areaId}" @tap="index=area.id,getChildAreas(area.id)"/>
</div>
</template>
<div class="areaSelector">

View File

@@ -55,9 +55,11 @@ export default {
::v-deep .u-drawer {
text-align: center;
.uni-scroll-view-content{
.uni-scroll-view-content {
max-height: 672px;
}
.option {
font-size: 32px;
cursor: pointer;

View File

@@ -13,12 +13,13 @@
<script>
import AiBack from "../../components/AiBack";
export default {
name: "historyList",
components: {AiBack},
computed: {
itemLabel() {
return '历史'+this.$dict.getLabel('intelligentGuardianshipItem', this.$route.query.type)+`(${this.$dict.getLabel('intelligentGuardianshipItemUnit',this.$route.query.type)})`
return '历史' + this.$dict.getLabel('intelligentGuardianshipItem', this.$route.query.type) + `(${this.$dict.getLabel('intelligentGuardianshipItemUnit', this.$route.query.type)})`
}
},
data() {
@@ -39,7 +40,7 @@ export default {
}
},
created() {
this.$dict.load("intelligentGuardianshipItem",'intelligentGuardianshipItemUnit')
this.$dict.load("intelligentGuardianshipItem", 'intelligentGuardianshipItemUnit')
this.getHistory()
}
}

View File

@@ -75,7 +75,7 @@ export default {
}
},
created() {
this.$dict.load("intelligentGuardianshipItem",'intelligentGuardianshipItem2', 'sex')
this.$dict.load("intelligentGuardianshipItem", 'intelligentGuardianshipItem2', 'sex')
},
mounted() {
this.getDetail(this.$route.query.id).then(() => this.initMap())

View File

@@ -9,13 +9,13 @@
<header><em>*</em>起止时间</header>
<u-row justify="between">
<div class="time" @click="pick(0)">
<span>{{form.startTime.time}}</span>
<span>{{form.startTime.year}}{{form.startTime.month}}{{form.startTime.day}} {{form.startTime.weekday}}</span>
<span>{{ form.startTime.time }}</span>
<span>{{ form.startTime.year }}{{ form.startTime.month }}{{ form.startTime.day }} {{ form.startTime.weekday }}</span>
</div>
<div class="arrow"></div>
<div class="time" @click="pick(1)">
<span>{{form.endTime.time}}</span>
<span>{{form.endTime.year}}{{form.endTime.month}}{{form.endTime.day}} {{form.endTime.weekday}}</span>
<span>{{ form.endTime.time }}</span>
<span>{{ form.endTime.year }}{{ form.endTime.month }}{{ form.endTime.day }} {{ form.endTime.weekday }}</span>
</div>
</u-row>
</div>
@@ -29,7 +29,8 @@
</div>
<div class="card">
<AiUploader :multiple="true" type="file" :limit="9" placeholder="上传附件" @list="fileList" :def="form.files"></AiUploader>
<AiUploader :multiple="true" type="file" :limit="9" placeholder="上传附件" @list="fileList"
:def="form.files"></AiUploader>
</div>
<div class="card item-wrap" @click="select">
@@ -40,7 +41,7 @@
<span>请选择</span>
</template>
<template v-else>
已选择<em>{{form.attendees.map(e=>e.name).slice(0,2).join("、")}}</em><em>{{form.attendees.length}}</em>
已选择<em>{{ form.attendees.map(e => e.name).slice(0, 2).join("、") }}</em><em>{{ form.attendees.length }}</em>
</template>
<div class="right-arrow"></div>
</div>
@@ -51,7 +52,7 @@
<header>参会提醒</header>
<picker class="right" @change="beforeNoticeChange" :value="form.noticeBefore" range-key="dictName"
:range="$dict.getDict('meetingNoticeBefore')">
<span>{{ form.noticeBefore !=null ? $dict.getDict('meetingNoticeBefore')[form.noticeBefore]["dictName"] : "请选择"}}</span>
<span>{{ form.noticeBefore != null ? $dict.getDict('meetingNoticeBefore')[form.noticeBefore]["dictName"] : "请选择" }}</span>
<div class="right-arrow"></div>
</picker>
</u-row>
@@ -61,7 +62,7 @@
<header>确认提醒</header>
<picker class="right" @change="afterNoticeChange" :value="form.noticeAfter" range-key="dictName"
:range="$dict.getDict('meetingNoticeAfter')">
<span>{{form.noticeAfter !=null ? $dict.getDict('meetingNoticeAfter')[form.noticeAfter]["dictName"] : "请选择"}}</span>
<span>{{ form.noticeAfter != null ? $dict.getDict('meetingNoticeAfter')[form.noticeAfter]["dictName"] : "请选择" }}</span>
<div class="right-arrow"></div>
</picker>
</u-row>
@@ -73,326 +74,327 @@
</div>
<u-picker mode="time" v-model="show" :params="params" @confirm="confirm"></u-picker>
<AiBack ref="aiBack" v-if="!userSelect"/>
<AiSelectEnterprise :visible.sync="userSelect" :value="form.attendees" v-if="userSelect" @change="change"></AiSelectEnterprise>
<AiSelectEnterprise :visible.sync="userSelect" :value="form.attendees" v-if="userSelect"
@change="change"></AiSelectEnterprise>
</div>
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import AiUploader from "../../../components/AiUploader";
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import AiUploader from "../../../components/AiUploader";
export default {
name: "addMeeting",
components: {AiBack,AiSelectEnterprise,AiUploader},
data() {
const initTime = {
time: "",
year: "",
month: "",
day: "",
weekday: "",
timestamp: "",
}
export default {
name: "addMeeting",
components: {AiBack, AiSelectEnterprise, AiUploader},
data() {
const initTime = {
time: "",
year: "",
month: "",
day: "",
weekday: "",
timestamp: "",
}
return {
show: false,
index: 0,
list: [],
form: {
id: null,
title: "",
startTime: {...initTime},
endTime: {...initTime},
address: "",
content: "",
attendees: [],
noticeBefore: 4,
noticeAfter: 0,
files: [],
},
userSelect: false,
}
},
onLoad(opt) {
if (opt.id) {
this.form.id = opt.id
this.getDetail()
}
this.$dict.load("meetingNoticeBefore", "meetingNoticeAfter");
this.$nextTick(() => {
let date = new Date();
this.form.startTime.time = date.getHours()?.toString()?.padStart(2, "0") + ":" + date.getMinutes()?.toString()?.padStart(2, "0")
this.form.startTime.year = date.getFullYear()
this.form.startTime.month = (date.getMonth() + 1)?.toString()?.padStart(2, "0")
this.form.startTime.day = date.getDate()
this.form.startTime.weekday = '日一二三四五六'.charAt(date.getDay())
this.form.endTime = {...this.form.startTime}
})
},
computed: {
params() {
return {
show: false,
index: 0,
list: [],
form: {
id: null,
title: "",
startTime: {...initTime},
endTime: {...initTime},
address: "",
content: "",
attendees: [],
noticeBefore: 4,
noticeAfter: 0,
files: [],
},
userSelect: false,
year: true,
month: true,
day: true,
hour: true,
minute: true,
timestamp: true,
}
}
},
methods: {
fileList(e) {
this.form.files = e
},
onLoad(opt) {
if(opt.id) {
this.form.id = opt.id
this.getDetail()
}
this.$dict.load("meetingNoticeBefore", "meetingNoticeAfter");
this.$nextTick(()=>{
let date = new Date();
this.form.startTime.time = date.getHours()?.toString()?.padStart(2, "0") + ":" + date.getMinutes()?.toString()?.padStart(2, "0")
this.form.startTime.year = date.getFullYear()
this.form.startTime.month = (date.getMonth()+1)?.toString()?.padStart(2, "0")
this.form.startTime.day = date.getDate()
this.form.startTime.weekday = '日一二三四五六'.charAt(date.getDay())
this.form.endTime = {...this.form.startTime}
change(e) {
this.form.attendees = e
},
beforeNoticeChange(e) {
this.form.noticeBefore = e.detail.value
},
afterNoticeChange(e) {
this.form.noticeAfter = e.detail.value
},
getDetail() {
this.$http.post("/app/appmeetinginfo/info-id", null, {
params: {
id: this.form.id
}
}).then(res => {
if (res && res.data) {
this.form.title = res.data.title
this.form.address = res.data.address
this.form.content = res.data.content
this.form.attendees = res.data.attendees
this.form.noticeBefore = res.data.noticeBefore
this.form.noticeAfter = res.data.noticeAfter
this.form.files = res.data.files
this.form.startTime.time = res.data.startTime.split(" ")[1].substr(0, 5)
this.form.startTime.year = res.data.startTime.split(" ")[0].split("-")[0]
this.form.startTime.month = res.data.startTime.split(" ")[0].split("-")[1]
this.form.startTime.day = res.data.startTime.split(" ")[0].split("-")[2]
this.form.startTime.weekday = '日一二三四五六'.charAt(new Date(res.data.startTime.split(" ")[0]).getDay())
this.form.startTime.timestamp = new Date(res.data.startTime).getTime()
this.form.endTime.time = res.data.endTime.split(" ")[1].substr(0, 5)
this.form.endTime.year = res.data.endTime.split(" ")[0].split("-")[0]
this.form.endTime.month = res.data.endTime.split(" ")[0].split("-")[1]
this.form.endTime.day = res.data.endTime.split(" ")[0].split("-")[2]
this.form.endTime.weekday = '日一二三四五六'.charAt(new Date(res.data.endTime.split(" ")[0]).getDay())
this.form.endTime.timestamp = new Date(res.data.endTime).getTime()
}
})
},
computed: {
params() {
return {
year: true,
month: true,
day: true,
hour: true,
minute: true,
timestamp: true,
confirm(e) {
if (new Date().getTime() / 1000 > e.timestamp) return this.$u.toast("选择时间不能小于当前时间")
if (this.index == 0) {
this.form.startTime = {...e}
this.form.startTime.time = e.hour + ":" + (e.minute.length > 1 ? e.minute : ("0" + e.minute))
this.form.startTime.weekday = '日一二三四五六'.charAt(new Date(e.timestamp * 1000).getDay())
} else {
if (this.form.startTime.timestamp >= e.timestamp) {
return this.$u.toast("结束时间不能小于开始时间");
}
this.form.endTime = {...e}
this.form.endTime.time = e.hour + ":" + (e.minute.length > 1 ? e.minute : ("0" + e.minute))
this.form.endTime.weekday = '日一二三四五六'.charAt(new Date(e.timestamp * 1000).getDay())
}
},
methods: {
fileList(e){
this.form.files = e
},
change(e){
this.form.attendees = e
},
beforeNoticeChange(e) {
this.form.noticeBefore = e.detail.value
},
afterNoticeChange(e) {
this.form.noticeAfter = e.detail.value
},
getDetail(){
this.$http.post("/app/appmeetinginfo/info-id",null,{
params:{
id:this.form.id
}
}).then(res=>{
if (res && res.data) {
this.form.title = res.data.title
this.form.address = res.data.address
this.form.content = res.data.content
this.form.attendees = res.data.attendees
this.form.noticeBefore = res.data.noticeBefore
this.form.noticeAfter = res.data.noticeAfter
this.form.files = res.data.files
this.form.startTime.time = res.data.startTime.split(" ")[1].substr(0, 5)
this.form.startTime.year = res.data.startTime.split(" ")[0].split("-")[0]
this.form.startTime.month = res.data.startTime.split(" ")[0].split("-")[1]
this.form.startTime.day = res.data.startTime.split(" ")[0].split("-")[2]
this.form.startTime.weekday = '日一二三四五六'.charAt(new Date(res.data.startTime.split(" ")[0]).getDay())
this.form.startTime.timestamp = new Date(res.data.startTime).getTime()
add(status) {
if (status == 1) {
if (!this.form.title) return this.$u.toast("请输入会议标题")
this.form.endTime.time = res.data.endTime.split(" ")[1].substr(0, 5)
this.form.endTime.year = res.data.endTime.split(" ")[0].split("-")[0]
this.form.endTime.month = res.data.endTime.split(" ")[0].split("-")[1]
this.form.endTime.day = res.data.endTime.split(" ")[0].split("-")[2]
this.form.endTime.weekday = '日一二三四五六'.charAt(new Date(res.data.endTime.split(" ")[0]).getDay())
this.form.endTime.timestamp = new Date(res.data.endTime).getTime()
}
})
},
confirm(e) {
if (new Date().getTime() / 1000 > e.timestamp) return this.$u.toast("选择时间不能小于当前时间")
if (this.index == 0) {
this.form.startTime = {...e}
this.form.startTime.time = e.hour + ":" + (e.minute.length > 1 ? e.minute : ("0" + e.minute))
this.form.startTime.weekday = '日一二三四五六'.charAt(new Date(e.timestamp * 1000).getDay())
} else {
if (this.form.startTime.timestamp >= e.timestamp) {
return this.$u.toast("结束时间不能小于开始时间");
}
this.form.endTime = {...e}
this.form.endTime.time = e.hour + ":" + (e.minute.length > 1 ? e.minute : ("0" + e.minute))
this.form.endTime.weekday = '日一二三四五六'.charAt(new Date(e.timestamp * 1000).getDay())
}
},
if (this.form.startTime.timestamp >= this.form.endTime.timestamp) return this.$u.toast("结束时间不能小于开始时间")
add(status) {
if(status==1){
if (!this.form.title) return this.$u.toast("请输入会议标题")
if (!this.form.address) return this.$u.toast("请输入会议地点")
if (this.form.startTime.timestamp >= this.form.endTime.timestamp) return this.$u.toast("结束时间不能小于开始时间")
if (!this.form.content) return this.$u.toast("请输入会议内容")
if (!this.form.address) return this.$u.toast("请输入会议地点")
if (!this.form.content) return this.$u.toast("请输入会议内容")
if(!this.form.attendees.length) return this.$u.toast("请选择参会人")
}
this.$http.post("/app/appmeetinginfo/add-update", {
...this.form,
files:this.form.files.map(e=>e.id),
status,
startTime: this.form.startTime.year + "-" + this.form.startTime.month + "-" + this.form.startTime.day + " " + this.form.startTime.time + ":00",
endTime: this.form.endTime.year + "-" + this.form.endTime.month + "-" + this.form.endTime.day + " " + this.form.endTime.time + ":00",
}).then(res => {
if (res.code == 0) {
this.$u.toast(status == 1 ? "发布成功" : "保存成功")
this.$refs["aiBack"].back()
}
})
},
pick(index) {
this.index = index
this.show = true
},
select() {
uni.navigateTo({
url: "/pages/meetingNotice/components/notice"
})
if (!this.form.attendees.length) return this.$u.toast("请选择参会人")
}
this.$http.post("/app/appmeetinginfo/add-update", {
...this.form,
files: this.form.files.map(e => e.id),
status,
startTime: this.form.startTime.year + "-" + this.form.startTime.month + "-" + this.form.startTime.day + " " + this.form.startTime.time + ":00",
endTime: this.form.endTime.year + "-" + this.form.endTime.month + "-" + this.form.endTime.day + " " + this.form.endTime.time + ":00",
}).then(res => {
if (res.code == 0) {
this.$u.toast(status == 1 ? "发布成功" : "保存成功")
this.$refs["aiBack"].back()
}
})
},
}
pick(index) {
this.index = index
this.show = true
},
select() {
uni.navigateTo({
url: "/pages/meetingNotice/components/notice"
})
}
},
}
</script>
<style lang="scss" scoped>
.add-meeting {
min-height: 100%;
background: #F5F5F5;
padding-bottom: 140px;
.add-meeting {
min-height: 100%;
background: #F5F5F5;
padding-bottom: 140px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
margin-top: 16px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
margin-top: 16px;
header {
header {
font-size: 32px;
font-weight: 400;
color: #333333;
em {
font-style: normal;
font-size: 32px;
font-weight: 400;
color: #333333;
color: #FF4466;
margin-right: 8px;
vertical-align: middle;
}
}
input {
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
textarea {
width: 100%;
height: 160px;
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
.u-row {
margin-top: 34px;
.time {
display: flex;
flex-direction: column;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
}
.item {
height: 112px;
box-shadow: 0px -1px 0px 0px #D8DDE6;
margin-top: 0;
.right {
font-size: 28px;
color: #999999;
display: flex;
align-items: center;
em {
font-style: normal;
font-size: 32px;
color: #FF4466;
margin-right: 8px;
vertical-align: middle;
color: #1365DD;
}
}
input {
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
textarea {
width: 100%;
height: 160px;
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
.u-row {
margin-top: 34px;
.time {
display: flex;
flex-direction: column;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
}
.item {
height: 112px;
box-shadow: 0px -1px 0px 0px #D8DDE6;
margin-top: 0;
.right {
font-size: 28px;
color: #999999;
display: flex;
align-items: center;
em {
font-style: normal;
color: #1365DD;
}
}
.right-arrow {
width: 16px;
height: 16px;
display: inline-block;
border-top: 5px solid #CCCCCC;
border-right: 5px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
.item-wrap {
padding: 0 32px;
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background-color: #FFFFFF;
display: flex;
align-items: center;
& > div {
font-size: 36px;
color: #333333;
}
& > div:first-child {
width: 270px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:last-child {
width: calc(100% - 270px);
height: 100%;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
.right-arrow {
width: 16px;
height: 16px;
display: inline-block;
border-top: 5px solid #CCCCCC;
border-right: 5px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
.item-wrap {
padding: 0 32px;
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background-color: #FFFFFF;
display: flex;
align-items: center;
& > div {
font-size: 36px;
color: #333333;
}
& > div:first-child {
width: 270px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:last-child {
width: calc(100% - 270px);
height: 100%;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
}
}
}
</style>

View File

@@ -6,26 +6,26 @@
<div class="body">
<template v-if="list.length">
<div class="card" v-for="(item,index) in list" :key="index" @click="handleClick(item)">
<header>{{item.title}}</header>
<header>{{ item.title }}</header>
<u-row justify="between">
<div class="time">
<span>{{item.startTime|formatTime}}</span>
<span>{{item.startTime|formatDate(0)}}{{item.startTime|formatDate(1)}}{{item.startTime|formatDate(2)}} {{item.startTime|formatWeek}}</span>
<span>{{ item.startTime|formatTime }}</span>
<span>{{ item.startTime|formatDate(0) }}{{ item.startTime|formatDate(1) }}{{ item.startTime|formatDate(2) }} {{ item.startTime|formatWeek }}</span>
</div>
<div class="arrow"></div>
<div class="time">
<span>{{item.endTime|formatTime}}</span>
<span>{{item.endTime|formatDate(0)}}{{item.endTime|formatDate(1)}}{{item.endTime|formatDate(2)}} {{item.endTime|formatWeek}}</span>
<span>{{ item.endTime|formatTime }}</span>
<span>{{ item.endTime|formatDate(0) }}{{ item.endTime|formatDate(1) }}{{ item.endTime|formatDate(2) }} {{ item.endTime|formatWeek }}</span>
</div>
</u-row>
<u-row class="info">
<span>发起单位</span>
<span>{{item.unitName}}</span>
<span>{{ item.unitName }}</span>
</u-row>
<u-gap height="20"></u-gap>
<u-row class="info">
<span>会议地点</span>
<span>{{item.address}}</span>
<span>{{ item.address }}</span>
</u-row>
<div class="tag" :style="{background:'url(' + tag(item.status) + ')'}"></div>
</div>
@@ -39,193 +39,193 @@
</template>
<script>
import AiTopFixed from "../../../components/AiTopFixed";
import AiBack from "../../../components/AiBack";
import AiEmpty from "../../../components/AiEmpty";
import AiTopFixed from "../../../components/AiTopFixed";
import AiBack from "../../../components/AiBack";
import AiEmpty from "../../../components/AiEmpty";
export default {
name: "belongToMe",
components: {AiTopFixed, AiBack, AiEmpty},
data() {
return {
index: 0,
current: 1,
list: [],
status: "加载更多",
}
},
onLoad() {
this.getList()
},
computed: {
tabs() {
return [
{name: "全部"},
{name: "未开始"},
{name: "进行中"},
{name: "已取消"},
{name: "已结束"},
]
}
},
methods: {
tag(status) {
return {
"1": this.$cdn + 'common/1wks.png',
"2": this.$cdn + 'common/1jxz.png',
"3": this.$cdn + 'common/1yqx.png',
"4": this.$cdn + 'common/1yjs.png'
}[status]
},
getList() {
this.$http.post("/app/appmeetinginfo/list", null, {
params: {
listType: 0,
meetingStatus: this.index == 0 ? "-1" : this.index,
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
handleClick({id}) {
uni.navigateTo({
url: "/pages/meetingNotice/components/detail?id=" + id
})
},
change(e) {
this.index = e
this.current = 1
this.getList()
},
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
filters: {
formatTime(date) {
return date.split(" ")[1]?.substr(0, 5)
},
formatDate(date, i) {
return date.split(" ")[0]?.split("-")[i]
},
formatWeek(date) {
return "日一二三四五六".charAt(new Date(date.split(" ")[0]).getDay())
},
export default {
name: "belongToMe",
components: {AiTopFixed, AiBack, AiEmpty},
data() {
return {
index: 0,
current: 1,
list: [],
status: "加载更多",
}
},
onLoad() {
this.getList()
},
computed: {
tabs() {
return [
{name: "全部"},
{name: "未开始"},
{name: "进行中"},
{name: "已取消"},
{name: "已结束"},
]
}
},
methods: {
tag(status) {
return {
"1": this.$cdn + 'common/1wks.png',
"2": this.$cdn + 'common/1jxz.png',
"3": this.$cdn + 'common/1yqx.png',
"4": this.$cdn + 'common/1yjs.png'
}[status]
},
getList() {
this.$http.post("/app/appmeetinginfo/list", null, {
params: {
listType: 0,
meetingStatus: this.index == 0 ? "-1" : this.index,
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
handleClick({id}) {
uni.navigateTo({
url: "/pages/meetingNotice/components/detail?id=" + id
})
},
change(e) {
this.index = e
this.current = 1
this.getList()
},
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
filters: {
formatTime(date) {
return date.split(" ")[1]?.substr(0, 5)
},
formatDate(date, i) {
return date.split(" ")[0]?.split("-")[i]
},
formatWeek(date) {
return "日一二三四五六".charAt(new Date(date.split(" ")[0]).getDay())
},
}
}
</script>
<style lang="scss" scoped>
.belong-to-me {
min-height: 100%;
background-color: #F5F5F5;
.belong-to-me {
min-height: 100%;
background-color: #F5F5F5;
::v-deep .content {
padding: 0 !important;
}
::v-deep .content {
padding: 0 !important;
}
.body {
.body {
box-sizing: border-box;
padding: 40px 32px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 40px 32px;
padding: 32px;
border-radius: 8px;
margin-bottom: 32px;
position: relative;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
border-radius: 8px;
margin-bottom: 32px;
position: relative;
&:last-child {
margin-bottom: 0;
}
&:last-child {
margin-bottom: 0;
}
& > header {
font-size: 32px;
font-weight: 600;
color: #333333;
}
& > header {
font-size: 32px;
.time {
display: flex;
flex-direction: column;
margin: 46px 0;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
.time {
display: flex;
flex-direction: column;
margin: 46px 0;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.info {
flex-wrap: nowrap;
& > span:first-child {
font-size: 30px;
color: #999999;
flex-shrink: 0;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
}
}
.tag {
width: 112px;
height: 112px;
background-repeat: no-repeat;
background-size: 100% 100% !important;
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
top: 0;
right: 0;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.info {
flex-wrap: nowrap;
& > span:first-child {
font-size: 30px;
color: #999999;
flex-shrink: 0;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
}
}
.tag {
width: 112px;
height: 112px;
background-repeat: no-repeat;
background-size: 100% 100% !important;
position: absolute;
top: 0;
right: 0;
}
}
}
}
</style>

View File

@@ -17,7 +17,9 @@
<u-gap height="8"></u-gap>
<u-row>
<img :src="$cdn + 'common/date.png'" alt="">
<span>{{ detail.startTime && detail.startTime.substr(0, 16) }} {{ detail.endTime && detail.endTime.substr(0, 16) }}</span>
<span>{{
detail.startTime && detail.startTime.substr(0, 16)
}} {{ detail.endTime && detail.endTime.substr(0, 16) }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>

View File

@@ -2,32 +2,32 @@
<div class="meeting-list">
<div class="card" v-for="(item,index) in list" :key="index" @click="detail(item)">
<header>
<span>{{item.title}}</span>
<span>{{ item.title }}</span>
<span>
<span v-if="index==2">保存于</span>
{{item.createTime}}</span>
{{ item.createTime }}</span>
</header>
<u-row justify="between">
<div class="time">
<span>{{item.startTime|format}}</span>
<span>{{item.startTime|formatDate(0)}}{{item.startTime|formatDate(1)}}{{item.startTime|formatDate(2)}} {{item.startTime|formatWeek}}</span>
<span>{{ item.startTime|format }}</span>
<span>{{ item.startTime|formatDate(0) }}{{ item.startTime|formatDate(1) }}{{ item.startTime|formatDate(2) }} {{ item.startTime|formatWeek }}</span>
</div>
<div class="arrow"></div>
<div class="time">
<span>{{item.endTime|format}}</span>
<span>{{item.endTime|formatDate(0)}}{{item.endTime|formatDate(1)}}{{item.endTime|formatDate(2)}} {{item.endTime|formatWeek}}</span>
<span>{{ item.endTime|format }}</span>
<span>{{ item.endTime|formatDate(0) }}{{ item.endTime|formatDate(1) }}{{ item.endTime|formatDate(2) }} {{ item.endTime|formatWeek }}</span>
</div>
</u-row>
<u-row class="info">
<span>发起人员</span>
<span>{{item.userName}}</span>
<span>{{ item.userName }}</span>
</u-row>
<u-gap height="20"></u-gap>
<u-row class="info">
<span>会议地点</span>
<span>{{item.address}}</span>
<span>{{ item.address }}</span>
</u-row>
<div class="tag" v-if="item.status!=0" :style="{background:'url(' + $cdn + tag(item.status) +')'}"></div>
<div class="tag" v-if="item.status!=0" :style="{background:'url(' + $cdn + tag(item.status) +')'}"></div>
</div>
<u-loadmore :status="status" v-if="list.length"/>
<AiEmpty v-if="!list.length"></AiEmpty>
@@ -36,190 +36,191 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiEmpty from "../../../components/AiEmpty";
import AiBack from "../../../components/AiBack";
import AiEmpty from "../../../components/AiEmpty";
export default {
name: "meetingList",
components: {AiBack, AiEmpty},
data() {
export default {
name: "meetingList",
components: {AiBack, AiEmpty},
data() {
return {
index: null,
list: [],
current: 1,
status: "加载更多",
}
},
onLoad(opt) {
this.index = opt.index
uni.setNavigationBarTitle({
title: opt.index == 0 ? "历史会议" : "草稿箱"
});
},
methods: {
detail({id}) {
let url
if (this.index == 2) {
url = "/pages/meetingNotice/components/addMeeting?id=" + id
} else {
url = "/pages/meetingNotice/components/detail?id=" + id
}
uni.navigateTo({url})
},
tag(status) {
return {
index: null,
list: [],
current: 1,
status: "加载更多",
}
"1": 'common/1wks.png',
"2": 'common/1jxz.png',
"3": 'common/1yqx.png',
"4": 'common/1yjs.png'
}[status]
},
onLoad(opt) {
this.index = opt.index
uni.setNavigationBarTitle({
title: opt.index == 0 ? "历史会议" : "草稿箱"
});
},
methods: {
detail({id}) {
let url
if (this.index == 2) {
url = "/pages/meetingNotice/components/addMeeting?id=" + id
} else {
url = "/pages/meetingNotice/components/detail?id=" + id
getData() {
this.$http.post("/app/appmeetinginfo/list", null, {
params: {
listType: this.index == 0 ? "2" : '0',
meetingStatus: this.index == 0 ? "4" : "0",
size: 10,
current: this.current,
}
uni.navigateTo({url})
},
tag(status) {
return {
"1": 'common/1wks.png',
"2": 'common/1jxz.png',
"3": 'common/1yqx.png',
"4": 'common/1yjs.png'
}[status]
},
getData() {
this.$http.post("/app/appmeetinginfo/list", null, {
params: {
listType: this.index == 0 ? "2" : '0',
meetingStatus: this.index == 0 ? "4" : "0",
size: 10,
current: this.current,
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
},
},
filters: {
format(date) {
return date.split(" ")[1].substr(0, 5)
},
formatDate(date, index) {
return date.split(" ")[0].split("-")[index]
},
formatWeek(date) {
return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay()))
}
filters: {
format(date) {
return date.split(" ")[1].substr(0, 5)
},
formatDate(date, index) {
return date.split(" ")[0].split("-")[index]
},
formatWeek(date) {
return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay()))
}
},
onShow(){
this.getData()
},
onShow() {
this.getData()
},
onReachBottom() {
this.current = this.current + 1;
this.getData()
},
}
onReachBottom() {
this.current = this.current + 1;
this.getData()
},
}
</script>
<style lang="scss" scoped>
.meeting-list {
min-height: 100%;
background-color: #F5F5F5;
.meeting-list {
min-height: 100%;
background-color: #F5F5F5;
box-sizing: border-box;
padding: 32px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
border-radius: 8px;
margin-bottom: 32px;
position: relative;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
border-radius: 8px;
margin-bottom: 32px;
position: relative;
&:last-child {
margin-bottom: 0;
}
&:last-child {
margin-bottom: 0;
}
& > header {
font-size: 32px;
font-weight: 600;
color: #333333;
display: flex;
flex-direction: column;
& > header {
font-size: 32px;
font-weight: 600;
color: #333333;
display: flex;
flex-direction: column;
& > span:last-child {
font-size: 28px;
font-weight: 400;
color: #999999;
margin-top: 10px;
}
}
.time {
display: flex;
flex-direction: column;
margin: 46px 0;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.info {
flex-wrap: nowrap;
& > span:first-child {
flex-shrink: 0;
font-size: 30px;
color: #999999;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
}
}
.tag {
width: 112px;
height: 112px;
background-repeat: no-repeat !important;
background-size: 100% 100% !important;
position: absolute;
top: 0;
right: 0;
& > span:last-child {
font-size: 28px;
font-weight: 400;
color: #999999;
margin-top: 10px;
}
}
.time {
display: flex;
flex-direction: column;
margin: 46px 0;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.info {
flex-wrap: nowrap;
& > span:first-child {
flex-shrink: 0;
font-size: 30px;
color: #999999;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
}
}
.tag {
width: 112px;
height: 112px;
background-repeat: no-repeat !important;
background-size: 100% 100% !important;
position: absolute;
top: 0;
right: 0;
}
}
}
</style>

View File

@@ -2,9 +2,10 @@
<div class="meeting">
<ai-top-fixed>
<u-grid :col="3" :border="false">
<u-grid-item v-for="(item,index) in grid" :key="index" :custom-style="{padding:'14px 0'}" @click="handleClick(index)">
<u-grid-item v-for="(item,index) in grid" :key="index" :custom-style="{padding:'14px 0'}"
@click="handleClick(index)">
<u-icon :name="item.icon" :size="64"></u-icon>
<view class="label">{{item.label}}</view>
<view class="label">{{ item.label }}</view>
</u-grid-item>
</u-grid>
</ai-top-fixed>
@@ -12,26 +13,26 @@
<header>待参加的会议</header>
<template v-if="meetingList.length">
<div class="card" v-for="(item,index) in meetingList" :key="index" @click="detail(item)">
<header>{{item.title}}</header>
<header>{{ item.title }}</header>
<u-row justify="between">
<div class="time">
<span>{{item.startTime|format}}</span>
<span>{{item.startTime|formatDate(0)}}{{item.startTime|formatDate(1)}}{{item.startTime|formatDate(2)}} {{item.startTime|formatWeek}}</span>
<span>{{ item.startTime|format }}</span>
<span>{{ item.startTime|formatDate(0) }}{{ item.startTime|formatDate(1) }}{{ item.startTime|formatDate(2) }} {{ item.startTime|formatWeek }}</span>
</div>
<div class="arrow"></div>
<div class="time">
<span>{{item.endTime|format}}</span>
<span>{{item.endTime|formatDate(0)}}{{item.endTime|formatDate(1)}}{{item.endTime|formatDate(2)}} {{item.endTime|formatWeek}}</span>
<span>{{ item.endTime|format }}</span>
<span>{{ item.endTime|formatDate(0) }}{{ item.endTime|formatDate(1) }}{{ item.endTime|formatDate(2) }} {{ item.endTime|formatWeek }}</span>
</div>
</u-row>
<u-row class="info">
<span>发起人员</span>
<span>{{item.userName}}</span>
<span>{{ item.userName }}</span>
</u-row>
<u-gap height="20"></u-gap>
<u-row class="info">
<span>会议地点</span>
<span>{{item.address}}</span>
<span>{{ item.address }}</span>
</u-row>
<div class="tag" :style="{background:'url(' + $cdn + tag(item.joinStatus) + ')'}"></div>
</div>
@@ -46,209 +47,210 @@
</template>
<script>
import AiEmpty from "../../components/AiEmpty";
import AiTopFixed from "../../components/AiTopFixed";
import AiAdd from "../../components/AiAdd";
import AiEmpty from "../../components/AiEmpty";
import AiTopFixed from "../../components/AiTopFixed";
import AiAdd from "../../components/AiAdd";
export default {
name: "meetingNotice",
components: {AiEmpty, AiTopFixed, AiAdd},
data() {
return {
meetingList:[]
}
},
computed: {
grid() {
return [
{
icon: this.$cdn + "/common/iconlshy.png",
label: "历史会议"
},
{
icon: this.$cdn + "/common/iconwfqd.png",
label: "我发起的"
},
{
icon: this.$cdn + "/common/iconcgx.png",
label: "草稿箱"
}
]
}
},
methods: {
tag(status){
return {
"0":"common/1wqr.png",
"1":"common/1yqr.png",
"2":"common/1yqj.png",
}[status]
},
detail({id}){
uni.navigateTo({
url:"/pages/meetingNotice/components/detail?id=" + id
})
},
getData() {
this.$http.post("/app/appmeetinginfo/list", null, {
params: {
listType: "1",
meetingStatus: "1|2",
size: 999
}
}).then(res=>{
if(res && res.data){
this.meetingList = res.data.records
}
})
},
handleClick(index){
let url
if(index==0 || index==2){
url="/pages/meetingNotice/components/meetingList?index=" + index
}else if(index==1){
url="/pages/meetingNotice/components/belongToMe"
}
uni.navigateTo({url})
},
add() {
uni.navigateTo({
url:"/pages/meetingNotice/components/addMeeting"
})
}
},
filters:{
format(date){
return date.split(" ")[1].substr(0,5)
},
formatDate(date,index){
return date.split(" ")[0].split("-")[index]
},
formatWeek(date){
return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay()))
}
},
onShow(){
this.getData()
export default {
name: "meetingNotice",
components: {AiEmpty, AiTopFixed, AiAdd},
data() {
return {
meetingList: []
}
},
computed: {
grid() {
return [
{
icon: this.$cdn + "/common/iconlshy.png",
label: "历史会议"
},
{
icon: this.$cdn + "/common/iconwfqd.png",
label: "我发起的"
},
{
icon: this.$cdn + "/common/iconcgx.png",
label: "草稿箱"
}
]
}
},
methods: {
tag(status) {
return {
"0": "common/1wqr.png",
"1": "common/1yqr.png",
"2": "common/1yqj.png",
}[status]
},
detail({id}) {
uni.navigateTo({
url: "/pages/meetingNotice/components/detail?id=" + id
})
},
getData() {
this.$http.post("/app/appmeetinginfo/list", null, {
params: {
listType: "1",
meetingStatus: "1|2",
size: 999
}
}).then(res => {
if (res && res.data) {
this.meetingList = res.data.records
}
})
},
handleClick(index) {
let url
if (index == 0 || index == 2) {
url = "/pages/meetingNotice/components/meetingList?index=" + index
} else if (index == 1) {
url = "/pages/meetingNotice/components/belongToMe"
}
uni.navigateTo({url})
},
add() {
uni.navigateTo({
url: "/pages/meetingNotice/components/addMeeting"
})
}
},
filters: {
format(date) {
return date.split(" ")[1].substr(0, 5)
},
formatDate(date, index) {
return date.split(" ")[0].split("-")[index]
},
formatWeek(date) {
return "日一二三四五六".charAt((new Date(date.split(" ")[0]).getDay()))
}
},
onShow() {
this.getData()
}
}
</script>
<style lang="scss" scoped>
.meeting {
min-height: 100%;
background: #F5F5F5;
padding-bottom: 48px;
.meeting {
min-height: 100%;
background: #F5F5F5;
padding-bottom: 48px;
.label {
font-size: 28px;
font-weight: 400;
.label {
font-size: 28px;
font-weight: 400;
color: #333333;
line-height: 48px;
margin-top: 8px;
}
.body {
box-sizing: border-box;
padding: 40px 32px;
& > header {
font-size: 36px;
font-weight: 600;
color: #333333;
line-height: 48px;
margin-top: 8px;
margin-bottom: 38px;
}
.body {
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 40px 32px;
padding: 32px;
border-radius: 8px;
margin-bottom: 32px;
position: relative;
&:last-child {
margin-bottom: 0;
}
& > header {
font-size: 36px;
font-size: 32px;
font-weight: 600;
color: #333333;
margin-bottom: 38px;
}
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
border-radius: 8px;
margin-bottom: 32px;
position: relative;
.time {
display: flex;
flex-direction: column;
margin: 46px 0;
&:last-child {
margin-bottom: 0;
}
& > header {
font-size: 32px;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
.time {
display: flex;
flex-direction: column;
margin: 46px 0;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.info {
& > span:first-child {
font-size: 30px;
color: #999999;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
}
}
.tag{
width: 112px;
height: 112px;
background-repeat: no-repeat !important;
background-size: 100% 100% !important;
position: absolute;
top: 0;
right: 0;
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
}
::v-deep .content{
padding: 0 !important;
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.info {
& > span:first-child {
font-size: 30px;
color: #999999;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
}
}
.tag {
width: 112px;
height: 112px;
background-repeat: no-repeat !important;
background-size: 100% 100% !important;
position: absolute;
top: 0;
right: 0;
}
}
}
::v-deep .content {
padding: 0 !important;
}
}
</style>

View File

@@ -12,7 +12,8 @@
</div>
<div class="card">
<AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" @list="fileList" :def="form.files"></AiUploader>
<AiUploader :multiple="true" type="image" :limit="9" placeholder="上传图片" @list="fileList"
:def="form.files"></AiUploader>
</div>
<div class="card item-wrap" @click="select">
@@ -23,7 +24,7 @@
<span>请选择</span>
</template>
<template v-else>
已选择<em>{{form.persons.map(e=>e.name).slice(0,2).join("、")}}</em><em>{{form.persons.length}}</em>
已选择<em>{{ form.persons.map(e => e.name).slice(0, 2).join("、") }}</em><em>{{ form.persons.length }}</em>
</template>
<div class="right-arrow"></div>
</div>
@@ -36,7 +37,7 @@
<div class="type" :class="[index==0 && 'active']" @click="index=0,form.releaseTime=null">立即发送
<img :src="$cdn + 'notice/jiaobiao.png'" alt="" v-show="index==0">
</div>
<div class="type" :class="[index==1 && 'active']" @click="index=1">定时发送
<div class="type" :class="[index==1 && 'active']" @click="index=1">定时发送
<img :src="$cdn + 'notice/jiaobiao.png'" alt="" v-show="index==1">
</div>
</u-row>
@@ -48,7 +49,7 @@
<span>请选择</span>
</template>
<template v-else>
<span>{{form.releaseTime}}</span>
<span>{{ form.releaseTime }}</span>
</template>
<div class="right-arrow"></div>
</div>
@@ -62,297 +63,299 @@
</div>
<AiBack ref="aiBack" v-if="!userSelect"/>
<u-picker v-model="show" mode="time" :params="params" @confirm="confirm"></u-picker>
<AiSelectEnterprise :visible.sync="userSelect" :value="form.persons" v-if="userSelect" @change="change"></AiSelectEnterprise>
<AiSelectEnterprise :visible.sync="userSelect" :value="form.persons" v-if="userSelect"
@change="change"></AiSelectEnterprise>
</div>
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import AiUploader from "../../../components/AiUploader";
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import AiUploader from "../../../components/AiUploader";
export default {
name: "add",
components: {AiBack,AiSelectEnterprise,AiUploader},
data() {
return {
show: false,
index: 0,
list: [],
form: {
id: null,
title: "",
content: "",
persons: [],
releaseTime:null,
files: [],
},
userSelect: false,
params: {
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: true,
timestamp: true,
},
flag: null,
}
},
onLoad(opt) {
if(opt.id) {
this.form.id = opt.id;
this.flag = opt.flag;
this.getDetail();
}
},
methods: {
confirm(e){
if(e.timestamp< (Date.now()/1000)|0){
return this.$u.toast("发送时间不能小于当前时间");
}
this.form.releaseTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`;
export default {
name: "add",
components: {AiBack, AiSelectEnterprise, AiUploader},
data() {
return {
show: false,
index: 0,
list: [],
form: {
id: null,
title: "",
content: "",
persons: [],
releaseTime: null,
files: [],
},
fileList(e){
this.form.files = e
},
change(e){
this.form.persons = e
},
getDetail(){
this.$http.post("/app/appannouncement/detail",null,{
params:{
id:this.form.id,
detail: this.flag
}
}).then(res=>{
if (res && res.data) {
this.form.releaseTime = res.data.releaseTime;
Object.keys(this.form).map(e=>{
this.form[e] = res.data[e];
})
this.index = res.data.releaseTime ? 1 : 0;
}
})
},
add(status) {
if(status==1){
if (!this.form.title) return this.$u.toast("请输入会议标题")
if (!this.form.content) return this.$u.toast("请输入会议内容")
if(!this.form.persons.length) return this.$u.toast("请选择发送对象")
if(this.index==1 && !this.form.releaseTime) return this.$u.toast("请选择定时发送时间")
if(this.form.releaseTime && new Date(this.form.releaseTime).getTime() < Date.now()) return this.$u.toast("发送时间不能小于当前时间");
}
this.$http.post("/app/appannouncement/addOrUpdate", {
...this.form,
status,
}).then(res => {
if (res.code == 0) {
this.$u.toast(status == 1 ? "发布成功" : "保存成功")
this.$refs["aiBack"].back()
}
})
},
select() {
uni.navigateTo({
url: "/pages/meetingNotice/components/notice"
})
}
},
computed:{
background(){
return `url(${this.$cdn}/notice/jiaobiao.png) no-repeat; background-size: 46px 48px;position: absolute;bottom: 0;right: 0;`
userSelect: false,
params: {
year: true,
month: true,
day: true,
hour: true,
minute: true,
second: true,
timestamp: true,
},
flag: null,
}
},
onLoad(opt) {
if (opt.id) {
this.form.id = opt.id;
this.flag = opt.flag;
this.getDetail();
}
},
methods: {
confirm(e) {
if (e.timestamp < (Date.now() / 1000) | 0) {
return this.$u.toast("发送时间不能小于当前时间");
}
this.form.releaseTime = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:${e.second}`;
},
fileList(e) {
this.form.files = e
},
change(e) {
this.form.persons = e
},
getDetail() {
this.$http.post("/app/appannouncement/detail", null, {
params: {
id: this.form.id,
detail: this.flag
}
}).then(res => {
if (res && res.data) {
this.form.releaseTime = res.data.releaseTime;
Object.keys(this.form).map(e => {
this.form[e] = res.data[e];
})
this.index = res.data.releaseTime ? 1 : 0;
}
})
},
add(status) {
if (status == 1) {
if (!this.form.title) return this.$u.toast("请输入会议标题")
if (!this.form.content) return this.$u.toast("请输入会议内容")
if (!this.form.persons.length) return this.$u.toast("请选择发送对象")
if (this.index == 1 && !this.form.releaseTime) return this.$u.toast("请选择定时发送时间")
if (this.form.releaseTime && new Date(this.form.releaseTime).getTime() < Date.now()) return this.$u.toast("发送时间不能小于当前时间");
}
this.$http.post("/app/appannouncement/addOrUpdate", {
...this.form,
status,
}).then(res => {
if (res.code == 0) {
this.$u.toast(status == 1 ? "发布成功" : "保存成功")
this.$refs["aiBack"].back()
}
})
},
select() {
uni.navigateTo({
url: "/pages/meetingNotice/components/notice"
})
}
},
computed: {
background() {
return `url(${this.$cdn}/notice/jiaobiao.png) no-repeat; background-size: 46px 48px;position: absolute;bottom: 0;right: 0;`
},
}
}
</script>
<style lang="scss" scoped>
.add-meeting {
min-height: 100%;
background: #F5F5F5;
padding-bottom: 140px;
.add-meeting {
min-height: 100%;
background: #F5F5F5;
padding-bottom: 140px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
margin-top: 16px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px;
margin-top: 16px;
header {
header {
font-size: 32px;
font-weight: 400;
color: #333333;
em {
font-style: normal;
font-size: 32px;
font-weight: 400;
color: #FF4466;
margin-right: 8px;
vertical-align: middle;
}
}
input {
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
textarea {
width: 100%;
height: 160px;
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
.u-row {
margin-top: 34px;
.time {
display: flex;
flex-direction: column;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.type {
width: 320px;
height: 112px;
background: #F5F5F5;
color: #333333;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
font-size: 30px;
font-weight: 500;
letter-spacing: 1px;
position: relative;
& > img {
width: 46px;
height: 48px;
position: absolute;
right: 0;
bottom: 0;
}
}
.active {
background-color: #E7F1FE;
color: #1174FE;
}
}
.item {
height: 112px;
box-shadow: 0px -1px 0px 0px #D8DDE6;
margin-top: 0;
.right {
font-size: 28px;
color: #999999;
display: flex;
align-items: center;
em {
font-style: normal;
font-size: 32px;
color: #FF4466;
margin-right: 8px;
vertical-align: middle;
color: #1365DD;
}
}
input {
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
textarea {
width: 100%;
height: 160px;
margin: 32px 0 16px;
box-sizing: border-box;
padding: 0 16px;
}
.u-row {
margin-top: 34px;
.time {
display: flex;
flex-direction: column;
& > span:first-child {
font-size: 60px;
font-weight: 600;
color: #333333;
line-height: 84px;
}
& > span:last-child {
font-size: 22px;
color: #333333;
}
}
.arrow {
width: 28px;
height: 68px;
overflow: hidden;
position: relative;
transform: rotate(180deg);
&:before, &:after {
content: "";
width: 50px;
height: 50px;
position: absolute;
transform: scaleY(1.3) translate(30%, -40px) rotate(45deg);
}
&:before {
top: 59px;
background-color: #CCCCCC;
}
&:after {
left: 7px;
top: 59px;
background-color: #FFFFFF;
}
}
.type{
width: 320px;
height: 112px;
background: #F5F5F5;
color: #333333;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
font-size: 30px;
font-weight: 500;
letter-spacing: 1px;
position: relative;
& > img{
width: 46px;
height: 48px;
position: absolute;
right: 0;
bottom: 0;
}
}
.active{
background-color: #E7F1FE;
color: #1174FE;
}
}
.item {
height: 112px;
box-shadow: 0px -1px 0px 0px #D8DDE6;
margin-top: 0;
.right {
font-size: 28px;
color: #999999;
display: flex;
align-items: center;
em {
font-style: normal;
color: #1365DD;
}
}
.right-arrow {
width: 16px;
height: 16px;
display: inline-block;
border-top: 5px solid #CCCCCC;
border-right: 5px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
.item-wrap {
padding: 0 32px;
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background-color: #FFFFFF;
display: flex;
align-items: center;
& > div {
font-size: 36px;
color: #333333;
}
& > div:first-child {
width: 270px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:last-child {
width: calc(100% - 270px);
height: 100%;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
.right-arrow {
width: 16px;
height: 16px;
display: inline-block;
border-top: 5px solid #CCCCCC;
border-right: 5px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
.item-wrap {
padding: 0 32px;
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background-color: #FFFFFF;
display: flex;
align-items: center;
& > div {
font-size: 36px;
color: #333333;
}
& > div:first-child {
width: 270px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:last-child {
width: calc(100% - 270px);
height: 100%;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background-color: #1365DD;
}
}
}
</style>

View File

@@ -2,21 +2,21 @@
<div class="detail">
<template v-if="detailObj">
<div class="card">
<header>{{detailObj.title}}</header>
<header>{{ detailObj.title }}</header>
<u-gap height="16"></u-gap>
<u-row>
<span>发布人</span>
<span>{{detailObj.releaseUserName}}</span>
<span>{{ detailObj.releaseUserName }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>发布部门</span>
<span>{{detailObj.unitName}}</span>
<span>{{ detailObj.unitName }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>发布日期</span>
<span>{{detailObj.releaseTime}}</span>
<span>{{ detailObj.releaseTime }}</span>
</u-row>
<u-gap height="8"></u-gap>
</div>
@@ -32,9 +32,9 @@
<u-row justify="between">
<label class="left">
<img :src="$cdn + 'common/appendix.png'" alt="">
<span>{{item.name}}.{{item.postfix}}</span>
<span>{{ item.name }}.{{ item.postfix }}</span>
</label>
<span>{{(item.size/1024).toFixed(2)}}KB</span>
<span>{{ (item.size / 1024).toFixed(2) }}KB</span>
</u-row>
</div>
</div>
@@ -43,303 +43,303 @@
<u-row justify="between" class="item">
<span>接收对象</span>
<div class="right">
<em>{{detailObj.readNum}}</em>已读
<em>{{detailObj.unReadNum}}</em>未读
<em>{{ detailObj.readNum }}</em>已读
<em>{{ detailObj.unReadNum }}</em>未读
<div class="arrow"></div>
</div>
</u-row>
</div>
</template>
<AiEmpty description="该通知已撤回" v-else/>
<AiBack />
<AiBack/>
</div>
</template>
<script>
import AiBack from "../../../components/AiBack";
import {mapActions} from "vuex";
import AiEmpty from "../../../components/AiEmpty";
import AiBack from "../../../components/AiBack";
import {mapActions} from "vuex";
import AiEmpty from "../../../components/AiEmpty";
export default {
name: "detail",
components:{AiBack,AiEmpty},
data() {
return {
detailObj: null,
id: null,
flag: null,
export default {
name: "detail",
components: {AiBack, AiEmpty},
data() {
return {
detailObj: null,
id: null,
flag: null,
}
},
onLoad(opt) {
this.id = opt.id;
this.flag = opt.flag;
this.getDetail();
},
methods: {
...mapActions(['previewFile', 'injectJWeixin']),
preFile(e) {
if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) {
uni.previewImage({
current: e.url,
urls: [e.url]
})
} else {
this.previewFile({...e})
}
},
onLoad(opt){
this.id = opt.id;
this.flag = opt.flag;
this.getDetail();
},
methods: {
...mapActions(['previewFile', 'injectJWeixin']),
preFile(e) {
if([".jpg",".png",".gif"].includes(e.postfix.toLowerCase())){
uni.previewImage({
current: e.url,
urls: [e.url]
})
}else {
this.previewFile({...e})
getDetail() {
this.$http.post("/app/appannouncement/detail", null, {
params: {
id: this.id,
detail: this.flag
}
},
getDetail() {
this.$http.post("/app/appannouncement/detail", null, {
params: {
id: this.id,
detail: this.flag
}
}).then(res=>{
if(res && res.data){
this.detailObj = res.data;
}
})
},
handleClick() {
uni.navigateTo({
url:"/pages/notification/components/read?id=" + this.id,
})
}
}).then(res => {
if (res && res.data) {
this.detailObj = res.data;
}
})
},
}
handleClick() {
uni.navigateTo({
url: "/pages/notification/components/read?id=" + this.id,
})
}
},
}
</script>
<style lang="scss" scoped>
.detail {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 140px;
.detail {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 140px;
::v-deep .content {
padding: 0;
::v-deep .content {
padding: 0;
}
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
}
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
.u-row {
& > div {
border-radius: 50%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
.u-row {
& > div {
border-radius: 50%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #FFFFFF;
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
.title {
width: 490px;
height: 112px;
display: flex;
align-items: center;
font-size: 32px;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.right {
font-size: 28px;
display: flex;
align-items: center;
color: #666666;
.arrow {
width: 16px;
height: 16px;
border-top: 3px solid #CCCCCC;
border-right: 3px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
.item {
position: relative;
height: 80px;
&:after {
width: 100%;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
content: "";
position: absolute;
left: 0;
bottom: 0;
}
}
& > span {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
}
.file {
height: 128px;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
padding: 0 16px;
margin-bottom: 32px;
& > .u-row {
height: 100%;
.left {
width: 476px;
display: flex;
align-items: center;
justify-content: center;
}
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > img {
flex-shrink: 0;
width: 96px;
height: 96px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
.title {
width: 490px;
height: 112px;
display: flex;
align-items: center;
font-size: 32px;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.right {
font-size: 28px;
display: flex;
align-items: center;
color: #666666;
.arrow {
width: 16px;
height: 16px;
border-top: 3px solid #CCCCCC;
border-right: 3px solid #CCCCCC;
transform: rotate(45deg);
& > span {
font-size: 32px;
color: #333333;
display: inline-block;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
}
.item {
position: relative;
height: 80px;
&:after {
width: 100%;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
content: "";
position: absolute;
left: 0;
bottom: 0;
& > span {
font-size: 28px;
color: #999999;
}
}
}
& > span {
.active {
background-color: #F3F6F9;
}
& > text {
width: 100%;
display: inline-block;
font-size: 30px;
color: #649EFD;
text-align: center;
}
.progress {
height: 12px;
background: #F2F4FC;
border-radius: 12px;
position: relative;
margin: 16px 0 64px 0;
.pro-active {
height: 12px;
background: #639EFD;
border-radius: 12px;
position: absolute;
left: 0;
top: 0;
}
}
em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
::v-deep .u-collapse {
position: relative;
&:after {
content: "";
width: 718px;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
position: absolute;
left: 0;
bottom: 0;
}
.u-collapse-head {
padding: 40px 0;
}
.u-collapse-content {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
}
.file {
height: 128px;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
padding: 0 16px;
margin-bottom: 32px;
& > .u-row {
height: 100%;
.left {
width: 476px;
display: flex;
align-items: center;
& > img {
flex-shrink: 0;
width: 96px;
height: 96px;
}
& > span {
font-size: 32px;
color: #333333;
display: inline-block;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
& > span {
font-size: 28px;
color: #999999;
}
}
}
.active {
background-color: #F3F6F9;
}
& > text {
width: 100%;
display: inline-block;
font-size: 30px;
color: #649EFD;
text-align: center;
}
.progress {
height: 12px;
background: #F2F4FC;
border-radius: 12px;
position: relative;
margin: 16px 0 64px 0;
.pro-active {
height: 12px;
background: #639EFD;
border-radius: 12px;
position: absolute;
left: 0;
top: 0;
}
}
em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
::v-deep .u-collapse {
position: relative;
&:after {
content: "";
width: 718px;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
position: absolute;
left: 0;
bottom: 0;
}
.u-collapse-head {
padding: 40px 0;
}
.u-collapse-content {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
}
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #1365DD;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #1365DD;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
}
}
</style>

View File

@@ -6,7 +6,7 @@
<div class="body">
<div class="item" v-for="(item,index) in (current==0 ? list.read : list.unRead)" :key="index">
<u-avatar :src="item.avatar" mode="square" size="76"></u-avatar>
<span class="name">{{item.name}}</span>
<span class="name">{{ item.name }}</span>
</div>
</div>
<AiBack/>
@@ -14,80 +14,80 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiTopFixed from "../../../components/AiTopFixed";
import AiBack from "../../../components/AiBack";
import AiTopFixed from "../../../components/AiTopFixed";
export default {
name: "read",
components: {AiBack, AiTopFixed},
data() {
return {
current: 0,
id: null,
list: [],
}
export default {
name: "read",
components: {AiBack, AiTopFixed},
data() {
return {
current: 0,
id: null,
list: [],
}
},
onLoad(opt) {
this.id = opt.id;
this.getList();
},
methods: {
getList() {
this.$http.post("/app/appannouncementreader/list-unread", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.list = res.data;
}
})
},
onLoad(opt) {
this.id = opt.id;
change(val) {
this.current = val;
this.getList();
},
methods: {
getList() {
this.$http.post("/app/appannouncementreader/list-unread",null,{
params:{
id:this.id
}
}).then(res => {
if (res && res.data) {
this.list = res.data;
}
})
},
change(val) {
this.current = val;
this.getList();
}
},
computed: {
tabs() {
return [
{name: this.list?.read?.length + "人已读"},
{name: this.list?.unRead?.length + "人未读"},
];
}
},
}
}
},
computed: {
tabs() {
return [
{name: this.list?.read?.length + "人已读"},
{name: this.list?.unRead?.length + "人未读"},
];
}
},
}
</script>
<style lang="scss" scoped>
.read {
min-height: 100%;
background-color: #F5F5F5;
.read {
min-height: 100%;
background-color: #F5F5F5;
::v-deep .content{
padding: 0 !important;
}
::v-deep .content {
padding: 0 !important;
}
.body {
padding: 16px 0;
.body {
padding: 16px 0;
.item {
height: 120px;
display: flex;
align-items: center;
box-sizing: border-box;
padding: 0 50px;
background-color: #ffffff;
border-bottom: 1px solid #eeeeee;
.item {
height: 120px;
display: flex;
align-items: center;
box-sizing: border-box;
padding: 0 50px;
background-color: #ffffff;
border-bottom: 1px solid #eeeeee;
& > .name{
font-size: 36px;
font-weight: 600;
color: #333333;
line-height: 50px;
margin-left: 32px;
}
& > .name {
font-size: 36px;
font-weight: 600;
color: #333333;
line-height: 50px;
margin-left: 32px;
}
}
}
}
</style>

View File

@@ -8,13 +8,15 @@
<template v-if="!item.imgUrl">
<label>
<b v-if="index==0 && item.readStatus==0"></b>
<div class="tag" v-if="index==1" :style="color(item.status)">{{$dict.getLabel("announcementStatus",item.status)}}</div>
{{item.title}}
<div class="tag" v-if="index==1" :style="color(item.status)">
{{ $dict.getLabel("announcementStatus", item.status) }}
</div>
{{ item.title }}
</label>
<u-gap height="16"></u-gap>
<span class="info">
<text>{{item.releaseUserName}}</text>
<text>{{item.releaseTime}}</text>
<text>{{ item.releaseUserName }}</text>
<text>{{ item.releaseTime }}</text>
</span>
</template>
<template v-else>
@@ -22,13 +24,15 @@
<div class="left">
<label>
<b v-if="index==0 && item.readStatus==0"></b>
<div class="tag" v-if="index==1" :style="color(item.status)">{{$dict.getLabel("announcementStatus",item.status)}}</div>
{{item.title}}
<div class="tag" v-if="index==1" :style="color(item.status)">
{{ $dict.getLabel("announcementStatus", item.status) }}
</div>
{{ item.title }}
</label>
<u-gap height="16"></u-gap>
<span class="info">
<text>{{item.releaseUserName}}</text>
<text>{{item.releaseTime}}</text>
<text>{{ item.releaseUserName }}</text>
<text>{{ item.releaseTime }}</text>
</span>
</div>
<img :src="item.imgUrl" alt="">
@@ -46,7 +50,7 @@
<div class="colum" v-for="(item,index) in optList" :key="index" @click="handleOpt(item)">
<u-icon :name="item.icon" size="100" :custom-style="{backgroundColor:'#fff',borderRadius:'16px'}"></u-icon>
<u-gap height="16"></u-gap>
{{item.name}}
{{ item.name }}
</div>
</u-row>
<div class="btn" @click="show=false">关闭</div>
@@ -59,296 +63,297 @@
</template>
<script>
import AiAdd from "../../components/AiAdd";
import AiEmpty from "../../components/AiEmpty";
import AiTopFixed from "../../components/AiTopFixed";
import AiAdd from "../../components/AiAdd";
import AiEmpty from "../../components/AiEmpty";
import AiTopFixed from "../../components/AiTopFixed";
export default {
name: "notification",
components: {AiAdd, AiEmpty,AiTopFixed},
data() {
return {
index: 0,
show: false,
modal: false,
content: "",
current: 1,
dataList: [],
detail: {},
status: "加载更多",
}
export default {
name: "notification",
components: {AiAdd, AiEmpty, AiTopFixed},
data() {
return {
index: 0,
show: false,
modal: false,
content: "",
current: 1,
dataList: [],
detail: {},
status: "加载更多",
}
},
onLoad() {
this.$dict.load("announcementStatus");
},
computed: {
tabs() {
return [{name: "最新公告"}, {name: "公告管理"}];
},
optList() {
return [
{
name: "详情",
icon: this.$cdn + "notice/yl.png",
val: 0,
show: true,
},
{
name: "撤回",
icon: this.$cdn + "notice/ch.png",
val: 1,
show: this.detail?.status == 1,
},
{
name: "发布",
icon: this.$cdn + "notice/fb.png",
val: 2,
show: this.detail?.status == 0,
},
{
name: "编辑",
icon: this.$cdn + "notice/bj.png",
val: 3,
show: this.detail?.status == 0 || this.detail?.status == 3,
}, {
name: "删除",
icon: this.$cdn + "notice/sc.png",
val: 4,
show: true,
}
].filter(e => e.show)
}
},
onLoad(){
this.$dict.load("announcementStatus");
methods: {
changeState() {
this.$http.post(this.content == '删除' ? '/app/appannouncement/delete' : "/app/appannouncement/update-status", null, {
params: {
[this.content == '删除' ? 'ids' : 'id']: this.detail.id
}
}).then(res => {
if (res.code == 0) {
this.$u.toast(this.content + "成功");
this.getList();
}
})
},
computed: {
tabs() {
return [{name: "最新公告"},{name: "公告管理"}];
},
optList(){
return [
{
name: "详情",
icon: this.$cdn + "notice/yl.png",
val: 0,
show: true,
},
{
name: "撤回",
icon: this.$cdn + "notice/ch.png",
val: 1,
show: this.detail?.status == 1,
},
{
name: "发布",
icon: this.$cdn + "notice/fb.png",
val: 2,
show: this.detail?.status == 0,
},
{
name: "编辑",
icon: this.$cdn + "notice/bj.png",
val: 3,
show: this.detail?.status == 0 || this.detail?.status == 3,
}, {
name: "删除",
icon: this.$cdn + "notice/sc.png",
val: 4,
show: true,
}
].filter(e=>e.show)
}
confirm() {
this.show = false;
this.changeState();
},
handleOpt(item) {
this.content = {
1: "撤回",
2: "发布",
4: "删除",
}[item.val];
methods: {
changeState(){
this.$http.post(this.content =='删除' ? '/app/appannouncement/delete' : "/app/appannouncement/update-status",null,{
params: {
[this.content =='删除' ? 'ids' : 'id']:this.detail.id
}
}).then(res=>{
if(res.code==0){
this.$u.toast(this.content + "成功");
this.getList();
}
})
},
confirm(){
if (item.val == 0) {
this.show = false;
this.changeState();
},
handleOpt(item){
this.content = {
1: "撤回",
2: "发布",
4: "删除",
}[item.val];
return uni.navigateTo({
url: "/pages/notification/components/detail?id=" + this.detail.id
});
}
if (item.val == 0) {
this.show = false;
return uni.navigateTo({
url: "/pages/notification/components/detail?id=" + this.detail.id
});
}
if ([1, 2, 4].includes(item.val)) {
return this.modal = true;
}
if ([1,2,4].includes(item.val)) {
return this.modal = true;
}
if(item.val==3){
this.show = false;
return uni.navigateTo({
url:"/pages/notification/components/add?id=" + this.detail.id + "&flag=" + false
});
}
},
color(status){
return [
{backgroundColor:"rgba(255,136,34,0.1)",color:"#FF8822"},
{backgroundColor:"rgba(34,102,255,0.1)",color:"#2266FF"},
{backgroundColor:"rgba(102,102,102,0.1)",color:"#666666"},
{backgroundColor:"rgba(255,136,34,0.1)",color:"#FF8822"}
][status];
},
handeClick(item) {
this.detail = item;
if (this.index == 1) {
this.show = true;
}else {
uni.navigateTo({
url: "/pages/notification/components/detail?id=" + this.detail.id + "&flag=" + true
})
}
},
add(){
if (item.val == 3) {
this.show = false;
return uni.navigateTo({
url: "/pages/notification/components/add?id=" + this.detail.id + "&flag=" + false
});
}
},
color(status) {
return [
{backgroundColor: "rgba(255,136,34,0.1)", color: "#FF8822"},
{backgroundColor: "rgba(34,102,255,0.1)", color: "#2266FF"},
{backgroundColor: "rgba(102,102,102,0.1)", color: "#666666"},
{backgroundColor: "rgba(255,136,34,0.1)", color: "#FF8822"}
][status];
},
handeClick(item) {
this.detail = item;
if (this.index == 1) {
this.show = true;
} else {
uni.navigateTo({
url: "/pages/notification/components/add"
})
},
change(val) {
this.index = val;
this.current = 1;
this.getList()
},
getList() {
this.$http.post(this.index ==0 ? "/app/appannouncement/list-latest" : "/app/appannouncement/list-mgr", null, {
params: {
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.dataList = this.current > 1 ? [...this.dataList, ...res.data.records] : res.data.records
}
url: "/pages/notification/components/detail?id=" + this.detail.id + "&flag=" + true
})
}
},
onShow() {
this.current = 1;
this.getList();
add() {
uni.navigateTo({
url: "/pages/notification/components/add"
})
},
onReachBottom() {
this.current = this.current + 1;
change(val) {
this.index = val;
this.current = 1;
this.getList()
},
}
getList() {
this.$http.post(this.index == 0 ? "/app/appannouncement/list-latest" : "/app/appannouncement/list-mgr", null, {
params: {
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.dataList = this.current > 1 ? [...this.dataList, ...res.data.records] : res.data.records
}
})
}
},
onShow() {
this.current = 1;
this.getList();
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
}
</script>
<style lang="scss" scoped>
.notification {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 32px;
.notification {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 32px;
::v-deep .content{
padding: 0 !important;
}
::v-deep .content {
padding: 0 !important;
}
.body {
.body {
box-sizing: border-box;
padding: 32px;
.card {
height: 208px;
display: flex;
flex-direction: column;
justify-content: space-between;
box-sizing: border-box;
padding: 32px;
border-radius: 8px;
background-color: #ffffff;
margin-bottom: 32px;
.card {
height: 208px;
display: flex;
flex-direction: column;
justify-content: space-between;
box-sizing: border-box;
padding: 32px;
border-radius: 8px;
background-color: #ffffff;
margin-bottom: 32px;
&:last-child{
margin-bottom: 0;
}
& > label {
font-size: 32px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
color: #333333;
line-height: 44px;
}
b {
display: inline-block;
font-style: normal;
width: 16px;
height: 16px;
border-radius: 50%;
background: #FF4466;
margin-right: 8px;
}
.tag{
width: 96px;
height: 44px;
display: inline-block;
border-radius: 8px;
margin-right: 16px;
font-size: 26px;
font-weight: 400;
line-height: 46px;
text-align: center;
}
.info {
font-size: 28px;
color: #999999;
line-height: 40px;
& > text:first-child {
margin-right: 32px;
}
}
& > .has-pic {
display: flex;
justify-content: space-between;
& > .left {
display: flex;
flex-direction: column;
justify-content: space-between;
& > label {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
& > img{
width: 192px;
height: 144px;
flex-shrink: 0;
margin-left: 32px;
}
}
&:last-child {
margin-bottom: 0;
}
}
.popup-wrap {
height: 368px;
background-color: #F7F7F7;
.btn{
height: 96px;
display: flex;
align-items: center;
justify-content: center;
font-size: 30px;
font-weight: 500;
& > label {
font-size: 32px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
color: #333333;
background-color: #ffffff;
line-height: 44px;
}
& > .u-row {
height: 272px;
box-sizing: border-box;
padding: 0 46px;
b {
display: inline-block;
font-style: normal;
width: 16px;
height: 16px;
border-radius: 50%;
background: #FF4466;
margin-right: 8px;
}
& > .colum {
.tag {
width: 96px;
height: 44px;
display: inline-block;
border-radius: 8px;
margin-right: 16px;
font-size: 26px;
font-weight: 400;
line-height: 46px;
text-align: center;
}
.info {
font-size: 28px;
color: #999999;
line-height: 40px;
& > text:first-child {
margin-right: 32px;
}
}
& > .has-pic {
display: flex;
justify-content: space-between;
& > .left {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 26px;
color: #666666;
justify-content: space-between;
& > label {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
& > img {
width: 192px;
height: 144px;
flex-shrink: 0;
margin-left: 32px;
}
}
}
}
.popup-wrap {
height: 368px;
background-color: #F7F7F7;
.btn {
height: 96px;
display: flex;
align-items: center;
justify-content: center;
font-size: 30px;
font-weight: 500;
color: #333333;
background-color: #ffffff;
}
& > .u-row {
height: 272px;
box-sizing: border-box;
padding: 0 46px;
& > .colum {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: 26px;
color: #666666;
}
}
}
}
</style>

View File

@@ -3,11 +3,11 @@
<div class="info">
<div class="info-top">
<div class="left">
<image src="/static/images/avatar.png" />
<image src="/static/images/avatar.png"/>
<h2>{{ info.name || info.phone }}</h2>
</div>
<div class="right">
<image src="/static/images/phone.png" />
<image src="/static/images/phone.png"/>
<p>拨打电话</p>
</div>
</div>
@@ -55,7 +55,7 @@
<div class="info-item">
<label>图片</label>
<div class="imgs">
<image v-for="(item, index) in 6" :key="index" src="/static/images/avatar.png" />
<image v-for="(item, index) in 6" :key="index" src="/static/images/avatar.png"/>
</div>
</div>
</div>
@@ -68,183 +68,184 @@
</template>
<script>
export default {
name: 'detail',
export default {
name: 'detail',
data () {
return {
info: {},
id: '',
pageShow: false
}
data() {
return {
info: {},
id: '',
pageShow: false
}
},
onLoad(query) {
uni.showLoading()
this.id = query.id
this.getInfo(query.id)
},
methods: {
linkTo() {
uni.navigateTo({
url: '/pages/povertyMonitor/Form'
})
},
onLoad (query) {
uni.showLoading()
this.id = query.id
getInfo(id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.getInfo(query.id)
},
this.pageShow = true
}
methods: {
linkTo () {
uni.navigateTo({
url: '/pages/povertyMonitor/Form'
})
},
getInfo (id) {
this.$http.post(`/app/apppreventionreturntopoverty/queryDetailById?id=${id}`).then(res => {
if (res.code === 0) {
this.info = res.data
this.pageShow = true
}
uni.hideLoading()
})
}
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.detail {
padding-bottom: 122rpx;
.detail {
padding-bottom: 122 rpx;
* {
box-sizing: border-box;
}
* {
box-sizing: border-box;
}
.footer {
display: flex;
position: fixed;
left: 0;
bottom: 0;
z-index: 1;
width: 100%;
.footer {
display: flex;
position: fixed;
left: 0;
bottom: 0;
z-index: 1;
width: 100%;
height: 112px;
span {
flex: 1;
height: 112px;
line-height: 112px;
text-align: center;
color: #FF4466;
font-size: 32px;
background: #fff;
&:last-child {
color: #fff;
background: #3192F4;
}
}
}
.info {
background: #fff;
.info-top {
display: flex;
align-items: center;
justify-content: space-between;
height: 136px;
padding: 0 32px;
background: #FFFFFF;
border-bottom: 1px solid #D8DDE6;
.left {
display: flex;
align-items: center;
image {
width: 80px;
height: 80px;
margin-right: 16px;
}
h2 {
color: #333333;
font-size: 36px;
font-weight: 600;
}
}
.right {
text-align: center;
image {
width: 64px;
height: 64px;
}
p {
color: #3D94FB;
font-size: 24px;
}
}
}
}
.result {
margin-top: 20px;
background: #fff;
.result-top {
display: flex;
align-items: center;
justify-content: space-between;
height: 96px;
padding: 0 32px;
border-bottom: 1px solid #DDDDDD;
h2 {
font-size: 32px;
color: #333;
font-weight: 600;
}
span {
color: #2EA222;
font-size: 30px;
}
}
}
.info-item__wrapper {
padding: 32px;
.info-item {
display: flex;
margin-bottom: 12px;
label {
flex-shrink: 0;
width: 150px;
line-height: 1.3;
text-align: right;
color: #999999;
font-size: 30 rpx;
}
span {
flex: 1;
height: 112px;
line-height: 112px;
text-align: center;
color: #FF4466;
font-size: 32px;
background: #fff;
line-height: 1.3;
text-align: justify;
color: #343D65;
}
&:last-child {
color: #fff;
background: #3192F4;
.imgs {
flex: 1;
image {
width: 160px;
height: 160px;
margin-right: 16px;
margin-bottom: 16px;
border-radius: 4px;
}
}
}
.info {
background: #fff;
.info-top {
display: flex;
align-items: center;
justify-content: space-between;
height: 136px;
padding: 0 32px;
background: #FFFFFF;
border-bottom: 1px solid #D8DDE6;
.left {
display: flex;
align-items: center;
image {
width: 80px;
height: 80px;
margin-right: 16px;
}
h2 {
color: #333333;
font-size: 36px;
font-weight: 600;
}
}
.right {
text-align: center;
image {
width: 64px;
height: 64px;
}
p {
color: #3D94FB;
font-size: 24px;
}
}
}
}
.result {
margin-top: 20px;
background: #fff;
.result-top {
display: flex;
align-items: center;
justify-content: space-between;
height: 96px;
padding: 0 32px;
border-bottom: 1px solid #DDDDDD;
h2 {
font-size: 32px;
color: #333;
font-weight: 600;
}
span {
color: #2EA222;
font-size: 30px;
}
}
}
.info-item__wrapper {
padding: 32px;
.info-item {
display: flex;
margin-bottom: 12px;
label {
flex-shrink: 0;
width: 150px;
line-height: 1.3;
text-align: right;
color: #999999;
font-size: 30rpx;
}
span {
flex: 1;
line-height: 1.3;
text-align: justify;
color: #343D65;
}
.imgs {
flex: 1;
image {
width: 160px;
height: 160px;
margin-right: 16px;
margin-bottom: 16px;
border-radius: 4px;
}
}
}
}
}
}
</style>

View File

@@ -24,89 +24,89 @@
</template>
<script>
import AiUploader from '@/components/AiUploader'
import AiUploader from '@/components/AiUploader'
export default {
data () {
return {
result: '',
export default {
data() {
return {
result: '',
}
},
components: {
AiUploader
}
},
components: {
AiUploader
}
}
</script>
<style lang="scss">
.form {
padding-bottom: 120px;
.form {
padding-bottom: 120px;
div {
margin-bottom: 16px;
background: #fff;
}
div {
margin-bottom: 16px;
background: #fff;
}
.form-item {
padding: 32px;
.form-item {
padding: 32px;
.form-item__title {
display: flex;
align-items: center;
margin-bottom: 34px;
h2 {
color: #333333;
font-weight: normal;
font-size: 32px;
}
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
textarea {
width: 100%;
}
}
.form-type {
.form-item__title {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
margin-bottom: 34px;
h2 {
font-weight: normal;
color: #333333;
font-weight: normal;
font-size: 32px;
}
span {
i {
color: #999999;
font-size: 28px;
font-style: normal;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
textarea {
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
.form-type {
display: flex;
align-items: center;
justify-content: space-between;
height: 112px;
padding: 0 32px;
h2 {
font-weight: normal;
color: #333333;
font-size: 32px;
}
span {
color: #999999;
font-size: 28px;
}
}
.btn {
position: fixed;
left: 0;
bottom: 0;
z-index: 11;
width: 100%;
height: 112px;
line-height: 112px;
margin: 0;
text-align: center;
color: #FFFFFF;
font-size: 32px;
background: #3192F4;
}
}
</style>

View File

@@ -8,7 +8,9 @@
<div class="item" v-for="(item, index) in list" :key="index" hover-class="bg-hover" @click="toDetail(item.id)">
<div class="item-top">
<h2>{{ item.name || item.phone }}</h2>
<span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{ item.riskEliminationMethod ? '已解除' : '未解除' }}</span>
<span :style="{color: item.riskEliminationMethod ? '#2EA222' : '#FF4466'}">{{
item.riskEliminationMethod ? '已解除' : '未解除'
}}</span>
</div>
<p>{{ item.addressArea }} {{ item.address }}</p>
<div class="item-bottom">家庭收入</div>
@@ -19,191 +21,192 @@
</template>
<script>
import AiEmpty from '@/components/AiEmpty/AiEmpty'
export default {
name: 'list',
import AiEmpty from '@/components/AiEmpty/AiEmpty'
data () {
return {
list: [],
isMore: false,
current: 1,
currIndex: 0
}
export default {
name: 'list',
data() {
return {
list: [],
isMore: false,
current: 1,
currIndex: 0
}
},
components: {
AiEmpty
},
created() {
uni.showLoading()
this.$nextTick(() => {
this.getList()
})
uni.$on('reload', () => {
this.reload()
})
},
methods: {
changeTab(index) {
this.currIndex = index
},
components: {
AiEmpty
toDetail(id) {
uni.navigateTo({
url: `/pages/Monitor/Detail?id=${id}&isFrom=1`
})
},
created () {
reload() {
this.isMore = false
this.current = 1
this.getList()
uni.showLoading()
this.$nextTick(() => {
this.getList()
})
uni.$on('reload', () => {
this.reload()
})
},
methods: {
changeTab (index) {
this.currIndex = index
},
getList() {
if (this.isMore) return
toDetail (id) {
uni.navigateTo({
url: `/pages/Monitor/Detail?id=${id}&isFrom=1`
})
},
reload() {
this.isMore = false
this.current = 1
this.getList()
uni.showLoading()
},
getList() {
if (this.isMore) return
this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
params: {
current: this.current,
size: 15,
status: 2
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
uni.hideLoading()
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
this.$http.post(`/app/apppreventionreturntopoverty/list`, null, {
params: {
current: this.current,
size: 15,
status: 2
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
uni.hideLoading()
this.list = res.data.records
}
}).catch(() => {
uni.hideLoading()
})
}
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss">
.list {
padding: 30px 0 120px;
.list {
padding: 30px 0 120px;
.tab {
display: flex;
position: fixed;
top: 0;
left: 0;
z-index: 1;
align-items: center;
width: 100%;
height: 96px;
padding: 0 60px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
.tab {
display: flex;
position: fixed;
top: 0;
left: 0;
z-index: 1;
align-items: center;
width: 100%;
height: 96px;
padding: 0 60px;
background: #FFFFFF;
border-bottom: 1px solid #D4D4D4;
box-sizing: border-box;
* {
box-sizing: border-box;
* {
box-sizing: border-box;
}
span {
position: relative;
flex: 1;
height: 96rpx;
line-height: 96rpx;
color: #000000;
text-align: center;
font-size: 32px;
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
&.active {
color: #1365DD;
&::after {
background: #1365DD;
}
}
}
}
.list-wrapper {
.item {
margin: 0 32px 32px;
padding-bottom: 10px;
background: #FFFFFF;
border-radius: 16px;
span {
position: relative;
flex: 1;
height: 96 rpx;
line-height: 96 rpx;
color: #000000;
text-align: center;
font-size: 32px;
.item-bottom {
height: 94px;
line-height: 94px;
padding: 0 32px;
border-top: 1px solid #DDDDDD;
color: #3975C6;
font-size: 26px;
}
&::after {
position: absolute;
bottom: 0;
left: 50%;
width: 192px;
height: 6px;
background: transparent;
transform: translateX(-50%);
content: ' ';
}
.item-top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
padding: 32px 32px 0;
&.active {
color: #1365DD;
h2 {
color: #333333;
font-size: 32px;
font-weight: 700;
}
span {
color: #FFBB00;
&.status0 {
color: #FF4466;
}
&.status1 {
color: 已解除风险;
}
}
}
p {
line-height: 1.4;
margin-bottom: 32rpx;
padding: 0 32px;
color: #999999;
font-size: 26px;
&::after {
background: #1365DD;
}
}
}
}
.list-wrapper {
.item {
margin: 0 32px 32px;
padding-bottom: 10px;
background: #FFFFFF;
border-radius: 16px;
.item-bottom {
height: 94px;
line-height: 94px;
padding: 0 32px;
border-top: 1px solid #DDDDDD;
color: #3975C6;
font-size: 26px;
}
.item-top {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 16px;
padding: 32px 32px 0;
h2 {
color: #333333;
font-size: 32px;
font-weight: 700;
}
span {
color: #FFBB00;
&.status0 {
color: #FF4466;
}
&.status1 {
color: 已解除风险;
}
}
}
p {
line-height: 1.4;
margin-bottom: 32 rpx;
padding: 0 32px;
color: #999999;
font-size: 26px;
}
}
}
}
</style>

View File

@@ -33,297 +33,297 @@
</template>
<script>
import echarts from 'echarts'
import echarts from 'echarts'
export default {
name: 'statistics',
export default {
name: 'statistics',
data () {
return {
chart1: null,
chart2: null,
chart3: null,
chart4: null,
info: {}
}
data() {
return {
chart1: null,
chart2: null,
chart3: null,
chart4: null,
info: {}
}
},
mounted() {
window.scrollTo(0, 0)
// this.chart1 = echarts.init(document.getElementById('chart1'))
this.chart4 = echarts.init(document.getElementById('chart4'))
this.chart2 = echarts.init(document.getElementById('chart2'))
this.chart3 = echarts.init(document.getElementById('chart3'))
this.$dict.load(['fpType', 'fpRiskEliminationMethod'])
this.getInfo()
},
methods: {
getInfo() {
this.$http.post(`/app/apppreventionreturntopoverty/statistics-h5`).then(res => {
if (res.code === 0) {
this.info = res.data
this.initChart2(res.data.byxzMap)
this.initChart3(res.data.byxcMap)
this.initChart4(res.data.fxxcCount, res.data.fxyjCount)
}
})
},
mounted () {
window.scrollTo(0,0)
// this.chart1 = echarts.init(document.getElementById('chart1'))
this.chart4 = echarts.init(document.getElementById('chart4'))
this.chart2 = echarts.init(document.getElementById('chart2'))
this.chart3 = echarts.init(document.getElementById('chart3'))
this.$dict.load(['fpType', 'fpRiskEliminationMethod'])
this.getInfo()
initChart1() {
const option = {
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c}%'
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: 'Funnel',
type: 'funnel',
left: '0%',
top: 0,
bottom: 0,
width: '100%',
min: 0,
max: 100,
minSize: '0%',
maxSize: '100%',
sort: 'descending',
gap: 2,
label: {
show: true,
position: 'inside'
},
labelLine: {
length: 10,
lineStyle: {
width: 1,
type: 'solid'
}
},
itemStyle: {
borderColor: '#fff',
borderWidth: 1
},
emphasis: {
label: {
fontSize: 20
}
},
data: [
{value: 60, name: '总上报'},
{value: 40, name: '纳入监测'},
{value: 20, name: '已处理'}
]
}
]
}
this.chart1.setOption(option)
},
methods: {
getInfo () {
this.$http.post(`/app/apppreventionreturntopoverty/statistics-h5`).then(res => {
if (res.code === 0) {
this.info = res.data
this.initChart2(res.data.byxzMap)
this.initChart3(res.data.byxcMap)
this.initChart4(res.data.fxxcCount, res.data.fxyjCount)
}
})
},
initChart1 () {
const option = {
tooltip: {
trigger: 'item',
formatter: '{a} <br/>{b} : {c}%'
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: 'Funnel',
type: 'funnel',
left: '0%',
top: 0,
bottom: 0,
width: '100%',
min: 0,
max: 100,
minSize: '0%',
maxSize: '100%',
sort: 'descending',
gap: 2,
initChart2(data) {
const values = data.map(item => {
return {
value: item.typeCount,
name: this.$dict.getLabel('fpType', item.type)
}
})
const option = {
tooltip: {
trigger: 'item'
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '本月纳入监测人群属性分析',
type: 'pie',
radius: ['40%', '70%'],
emphasis: {
label: {
show: true,
position: 'inside'
},
labelLine: {
length: 10,
lineStyle: {
width: 1,
type: 'solid'
}
},
itemStyle: {
borderColor: '#fff',
borderWidth: 1
},
emphasis: {
label: {
fontSize: 20
}
},
data: [
{ value: 60, name: '总上报' },
{ value: 40, name: '纳入监测' },
{ value: 20, name: '已处理' }
]
}
]
}
this.chart1.setOption(option)
},
initChart2 (data) {
const values = data.map(item => {
return {
value: item.typeCount,
name: this.$dict.getLabel('fpType', item.type)
fontSize: '40',
fontWeight: 'bold'
}
},
data: values
}
})
const option = {
tooltip: {
trigger: 'item'
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '本月纳入监测人群属性分析',
type: 'pie',
radius: ['40%', '70%'],
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
data: values
}
]
}
this.chart2.setOption(option)
},
initChart3 (data) {
const values = data.map(item => {
return {
value: item.typeCount,
name: this.$dict.getLabel('fpRiskEliminationMethod', item.risk_elimination_method)
}
})
const option = {
tooltip: {
trigger: 'item'
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '本月纳入监测人群属性分析',
type: 'pie',
radius: ['40%', '70%'],
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
data: values
}
]
}
this.chart3.setOption(option)
},
initChart4 (x, y) {
const option = {
tooltip: {
trigger: 'item'
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '',
type: 'funnel',
left: '0%',
top: 0,
bottom: 0,
width: '100%',
min: 0,
max: 100,
minSize: '0%',
maxSize: '100%',
sort: 'descending',
gap: 2,
label: {
show: true,
position: 'inside'
},
labelLine: {
length: 10,
lineStyle: {
width: 1,
type: 'solid'
}
},
itemStyle: {
borderColor: '#fff',
borderWidth: 1
},
emphasis: {
label: {
fontSize: 20
}
},
data: [
{ value: y, name: '纳入监测' },
{ value: x, name: '消除监测' }
]
}
]
}
this.chart4.setOption(option)
]
}
this.chart2.setOption(option)
},
initChart3(data) {
const values = data.map(item => {
return {
value: item.typeCount,
name: this.$dict.getLabel('fpRiskEliminationMethod', item.risk_elimination_method)
}
})
const option = {
tooltip: {
trigger: 'item'
},
grid: {
left: '0%',
right: '0%',
bottom: '0%',
top: '40px',
containLabel: true
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '本月纳入监测人群属性分析',
type: 'pie',
radius: ['40%', '70%'],
emphasis: {
label: {
show: true,
fontSize: '40',
fontWeight: 'bold'
}
},
data: values
}
]
}
this.chart3.setOption(option)
},
initChart4(x, y) {
const option = {
tooltip: {
trigger: 'item'
},
color: ['#2896FF', '#09DBFE', '#61FDB9', '#FFBB69', '#8429FF', '#ea7ccc'],
series: [
{
name: '',
type: 'funnel',
left: '0%',
top: 0,
bottom: 0,
width: '100%',
min: 0,
max: 100,
minSize: '0%',
maxSize: '100%',
sort: 'descending',
gap: 2,
label: {
show: true,
position: 'inside'
},
labelLine: {
length: 10,
lineStyle: {
width: 1,
type: 'solid'
}
},
itemStyle: {
borderColor: '#fff',
borderWidth: 1
},
emphasis: {
label: {
fontSize: 20
}
},
data: [
{value: y, name: '纳入监测'},
{value: x, name: '消除监测'}
]
}
]
}
this.chart4.setOption(option)
}
}
}
</script>
<style lang="scss">
.statistics {
padding: 40px 0 120px;
.statistics {
padding: 40px 0 120px;
.block {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 140px;
background: #3975C6;
}
.block {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 100%;
height: 140px;
background: #3975C6;
}
.charts-wrapper {
position: relative;
z-index: 1;
padding: 0 32px;
.charts-wrapper {
position: relative;
z-index: 1;
padding: 0 32px;
.total {
display: flex;
align-items: center;
height: 200px;
background: #FFFFFF;
border-radius: 8px;
.total {
display: flex;
align-items: center;
height: 200px;
background: #FFFFFF;
border-radius: 8px;
.total-item {
flex: 1;
text-align: center;
.total-item {
flex: 1;
text-align: center;
h2 {
font-size: 64px;
color: #3192F4;
}
p {
margin-top: 10px;
color: #999999;
font-size: 28px;
}
&:last-child {
h2 {
font-size: 64px;
color: #3192F4;
}
p {
margin-top: 10px;
color: #999999;
font-size: 28px;
}
&:last-child {
h2 {
color: #F09535;
}
color: #F09535;
}
}
}
}
.charts {
margin-top: 32px;
background: #FFFFFF;
border-radius: 8px;
.charts {
margin-top: 32px;
background: #FFFFFF;
border-radius: 8px;
& > h2 {
height: 96px;
line-height: 96px;
padding: 0 32px;
color: #333333;
font-size: 32px;
border-bottom: 1px solid #DDDDDD;
}
& > h2 {
height: 96px;
line-height: 96px;
padding: 0 32px;
color: #333333;
font-size: 32px;
border-bottom: 1px solid #DDDDDD;
}
& > div {
width: 686px;
margin: 0 auto;
padding: 32px 0;
}
& > div {
width: 686px;
margin: 0 auto;
padding: 32px 0;
}
}
}
}
</style>

View File

@@ -12,78 +12,78 @@
</template>
<script>
import Statistics from './components/Statistics.vue'
import List from './components/List.vue'
import Statistics from './components/Statistics.vue'
import List from './components/List.vue'
export default {
data () {
return {
currIndex: 0
}
},
export default {
data() {
return {
currIndex: 0
}
},
components: {
List,
Statistics
},
components: {
List,
Statistics
},
computed: {
tabBar () {
const link = icon => `${this.$cdn}askform/${icon}.png`
return [
{text: "预警监控", iconPath: "bdlb1", selectedIconPath: "bdlb2" },
{text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2" }
].map(e => ({
...e,
iconPath: link(e.iconPath),
selectedIconPath: link(e.selectedIconPath)
}))
}
},
computed: {
tabBar() {
const link = icon => `${this.$cdn}askform/${icon}.png`
return [
{text: "预警监控", iconPath: "bdlb1", selectedIconPath: "bdlb2"},
{text: "数据统计", iconPath: "xjxm1", selectedIconPath: "xjxm2"}
].map(e => ({
...e,
iconPath: link(e.iconPath),
selectedIconPath: link(e.selectedIconPath)
}))
}
},
onLoad () {
uni.$on('reload', () => {
if (this.currIndex === 0) {
this.$refs.list.reload()
} else {
this.$refs.addList.getList()
}
})
},
onReachBottom() {
onLoad() {
uni.$on('reload', () => {
if (this.currIndex === 0) {
this.$refs.list.getList()
this.$refs.list.reload()
} else {
this.$refs.addList.getList()
}
})
},
onReachBottom() {
if (this.currIndex === 0) {
this.$refs.list.getList()
}
}
}
</script>
<style lang="scss" scoped>
.povertyMonitor {
.footer {
display: flex;
position: fixed;
bottom: 0;
left: 0;
z-index: 11;
width: 100%;
.povertyMonitor {
.footer {
display: flex;
position: fixed;
bottom: 0;
left: 0;
z-index: 11;
width: 100%;
height: 98px;
div {
flex: 1;
height: 98px;
line-height: 98px;
text-align: center;
color: #333333;
font-size: 32px;
background: #fff;
div {
flex: 1;
height: 98px;
line-height: 98px;
text-align: center;
color: #333333;
font-size: 32px;
background: #fff;
&.active {
color: #fff;
background: #3192F4;
}
&.active {
color: #fff;
background: #3192F4;
}
}
}
}
</style>

View File

@@ -142,8 +142,8 @@ export default {
}
})
},
handleWechat({userId,type}) {
this.injectJWeixin('openUserProfile').then(()=>{
handleWechat({userId, type}) {
this.injectJWeixin('openUserProfile').then(() => {
this.wxInvoke(['openUserProfile', {
type,
userid: userId

View File

@@ -194,6 +194,7 @@ export default {
<style lang="scss" scoped>
.info {
padding-bottom: 130px;
.certBtn {
cursor: pointer;
background: $uni-color-primary;

View File

@@ -12,17 +12,20 @@
</div>
<div class="radio-content">
<div class="title">素材标题</div>
<textarea rows="2" placeholder="请输入30字以内" v-model="name" style="width:100%;height:80px;" maxlength="30"></textarea>
<textarea rows="2" placeholder="请输入30字以内" v-model="name" style="width:100%;height:80px;"
maxlength="30"></textarea>
</div>
</div>
<div v-else>
<div class="radio-content mar-b16">
<div class="title">素材标题</div>
<textarea rows="2" placeholder="请输入30字以内" v-model="name" style="width:100%;height:80px;" maxlength="30"></textarea>
<textarea rows="2" placeholder="请输入30字以内" v-model="name" style="width:100%;height:80px;"
maxlength="30"></textarea>
</div>
<div class="radio-content">
<div class="title">文本内容</div>
<textarea rows="8" placeholder="请输入文本内容12000字以内" v-model="content" style="width:100%;height:300px;" maxlength="12000"></textarea>
<textarea rows="8" placeholder="请输入文本内容12000字以内" v-model="content" style="width:100%;height:300px;"
maxlength="12000"></textarea>
</div>
</div>
<div class="btn" @click="confirm">确认</div>
@@ -31,97 +34,100 @@
</template>
<script>
import AiBack from "@/components/AiBack";
export default {
name: "addPlay",
data() {
return {
type: '1',
file: null,
name: '',
content: ''
}
},
import AiBack from "@/components/AiBack";
components: {
AiBack
},
export default {
name: "addPlay",
data() {
return {
type: '1',
file: null,
name: '',
content: ''
}
},
onLoad (query) {
this.type = query.type
uni.$on('record', e => {
this.file = e
components: {
AiBack
},
onLoad(query) {
this.type = query.type
uni.$on('record', e => {
this.file = e
})
},
methods: {
toRecord() {
uni.navigateTo({
url: `/pages/resourcesManage/recording`
})
},
methods: {
toRecord () {
uni.navigateTo({
url: `/pages/resourcesManage/recording`
})
},
dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1]
var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n)
dataURLtoFile (dataurl, filename) {
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1]
var bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n)
while (n--){
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, {type:mime})
},
confirm () {
if (!this.file && this.type === '1') {
return this.$u.toast('请选择音频文件')
}
if (!this.name) {
return this.$u.toast('请输入素材标题')
}
if (!this.content && this.type === '3') {
return this.$u.toast('请输入文本内容')
}
uni.showLoading()
let formData = {}
formData = new FormData()
if (this.type === '1') {
formData.append('file', this.dataURLtoFile(this.file, this.name + '.mp3'))
formData.append('type', this.type)
formData.append('content', this.content)
formData.append('name', this.name)
} else {
formData.append('type', this.type)
formData.append('content', this.content)
formData.append('name', this.name)
}
this.$http.post(`/app/appdlbresource/addResourceWithFile`, formData).then((res) => {
uni.hideLoading()
if (res.code === 0) {
this.$u.toast('添加成功')
uni.$emit('getList')
uni.navigateBack({
delta: 1
})
}
}).catch(res => {
this.$u.toast(res)
uni.hideLoading()
})
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
return new File([u8arr], filename, {type: mime})
},
confirm() {
if (!this.file && this.type === '1') {
return this.$u.toast('请选择音频文件')
}
if (!this.name) {
return this.$u.toast('请输入素材标题')
}
if (!this.content && this.type === '3') {
return this.$u.toast('请输入文本内容')
}
uni.showLoading()
let formData = {}
formData = new FormData()
if (this.type === '1') {
formData.append('file', this.dataURLtoFile(this.file, this.name + '.mp3'))
formData.append('type', this.type)
formData.append('content', this.content)
formData.append('name', this.name)
} else {
formData.append('type', this.type)
formData.append('content', this.content)
formData.append('name', this.name)
}
this.$http.post(`/app/appdlbresource/addResourceWithFile`, formData).then((res) => {
uni.hideLoading()
if (res.code === 0) {
this.$u.toast('添加成功')
uni.$emit('getList')
uni.navigateBack({
delta: 1
})
}
}).catch(res => {
this.$u.toast(res)
uni.hideLoading()
})
}
}
}
</script>
<style lang="scss" scoped>
.addPlay {
padding-bottom: 128px;
.content{
.content {
padding-left: 32px;
background-color: #fff;
.item{
.item {
width: 100%;
padding: 34px 0;
font-size: 32px;
@@ -132,49 +138,57 @@
display: flex;
color: #333;
justify-content: space-between;
.label{
.label {
width: 198px;
font-size: 32px;
}
.value{
.value {
font-size: 28px;
width: calc(100% - 198px);
padding-right: 32px;
box-sizing: border-box;
text-align: right;
img{
img {
width: 32px;
height: 32px;
vertical-align: middle;
margin-left: 6px;
}
}
.color-999{
.color-999 {
color: #999;
}
}
}
.radio-content{
.radio-content {
padding: 34px 32px 38px;
background-color: #fff;
.title{
.title {
font-size: 32px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333;
line-height: 44px;
margin-bottom: 32px;
span{
span {
font-size: 24px;
font-weight: 400;
}
}
}
.mar-b16{
.mar-b16 {
margin-bottom: 16px;
}
.btn{
.btn {
position: fixed;
bottom: 0;
left: 0;
@@ -189,4 +203,4 @@
color: #FFFFFF;
}
}
</style>
</style>

View File

@@ -118,423 +118,432 @@
</div>
</template>
<script>
import AiBack from "@/components/AiBack";
import Recorder from 'recorder-core'
import 'recorder-core/src/engine/mp3'
import 'recorder-core/src/engine/mp3-engine'
import stopImg from './img/stop-img.png'
import microphone from './img/microphone.png'
import playImg from './img/play-icon.png'
<script>
import AiBack from "@/components/AiBack";
import Recorder from 'recorder-core'
import 'recorder-core/src/engine/mp3'
import 'recorder-core/src/engine/mp3-engine'
import stopImg from './img/stop-img.png'
import microphone from './img/microphone.png'
import playImg from './img/play-icon.png'
export default {
name: 'recording',
data () {
return {
isRecording: false,
progress: 0,
microphone,
playImg,
stopImg,
isPlay: false,
isStop: false,
blobFile: null,
time: '00:00:00',
counterDownTime: 0,
recorder: null,
counterDownTimeout: null,
timingTimeout: null,
audioSrc: '',
audio: null,
duration: 0
export default {
name: 'recording',
data() {
return {
isRecording: false,
progress: 0,
microphone,
playImg,
stopImg,
isPlay: false,
isStop: false,
blobFile: null,
time: '00:00:00',
counterDownTime: 0,
recorder: null,
counterDownTimeout: null,
timingTimeout: null,
audioSrc: '',
audio: null,
duration: 0
}
},
components: {
AiBack
},
mounted() {
this.$nextTick(() => {
this.audio = document.querySelector('audio')
})
},
methods: {
record() {
if (!this.isRecording) {
this.duration = 0
this.recorder = Recorder({
type: 'mp3',
sampleRate: 16000,
bitRate: 16,
onProcess(buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) {
//可利用extensions/waveview.js扩展实时绘制波形
}
})
this.recorder.open(() => {
this.recorder.start()
this.isRecording = true
this.timing()
}, (msg, isUserNotAllow) => {
// this.$u.toast(`${isUserNotAllow ? '请同意授权' : msg}`)
})
} else {
this.stop()
}
},
components: {
AiBack
},
mounted () {
this.$nextTick(() => {
this.audio = document.querySelector('audio')
blobToDataURI(blob) {
return new Promise((resolve) => {
var reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = function (e) {
resolve(e.target.result)
}
})
},
methods: {
record () {
if (!this.isRecording) {
this.duration = 0
this.recorder = Recorder({
type: 'mp3',
sampleRate: 16000,
bitRate: 16,
onProcess (buffers, powerLevel, bufferDuration, bufferSampleRate, newBufferIdx, asyncEnd) {
//可利用extensions/waveview.js扩展实时绘制波形
}
})
this.recorder.open(() => {
this.recorder.start()
this.isRecording = true
this.timing()
}, (msg, isUserNotAllow) => {
// this.$u.toast(`${isUserNotAllow ? '请同意授权' : msg}`)
})
} else {
this.stop()
}
},
blobToDataURI (blob) {
return new Promise((resolve) => {
var reader = new FileReader()
reader.readAsDataURL(blob)
reader.onload = function (e) {
resolve(e.target.result)
}
})
},
save () {
if (!this.blobFile) {
return this.$u.toast(`请录音`)
}
this.blobToDataURI(this.blobFile).then(res => {
uni.$emit('record', res)
uni.navigateBack({
delta: 1
})
})
},
onAudioEnd () {
this.isPlay = false
},
stop () {
this.isRecording = false
this.isStop = true
clearTimeout(this.timingTimeout)
this.recorder.stop((blob, duration) => {
this.blobFile = blob
var durationObj = this.$dayjs.duration(this.counterDownTime * 1000)
this.duration = this.counterDownTime
var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours()
var min = durationObj.minutes() > 9 ? durationObj.minutes() : '0' + durationObj.minutes()
var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds()
this.time = hours + ':' + min + ':' + seconds
console.log(blob, (window.URL|| webkitURL).createObjectURL(blob), '时长:' + duration + 'ms')
this.recorder.close()
this.recorder = null
}, msg => {
console.log('录音失败:' + msg)
this.recorder.close()
this.recorder = null
})
},
play () {
if (!this.isPlay) {
this.playAudio()
this.counterDown()
} else {
this.isPlay = false
clearTimeout(this.counterDownTimeout)
this.audio.pause()
}
},
playAudio () {
this.isPlay = true
if (!this.audioSrc) {
this.audioSrc = (window.URL||webkitURL).createObjectURL(this.blobFile)
}
this.$nextTick(() => {
this.audio.play()
})
},
recodeStop () {
this.recorder.stop((blob, duration) => {
this.restart()
this.blobFile = blob
console.log(blob, (window.URL|| webkitURL).createObjectURL(blob), '时长:' + duration + 'ms')
this.recorder.close()
this.recorder = null
}, msg => {
console.log('录音失败:' + msg)
this.recorder.close()
this.recorder = null
})
},
restart () {
this.time = '00:00:00'
this.progress = 0
this.blobFile = null
this.isPlay = false
this.isRecording = false
clearTimeout(this.counterDownTimeout)
clearTimeout(this.timingTimeout)
this.counterDownTime = 0
this.audioSrc = ''
this.isStop = false
},
counterDown () {
if (this.counterDownTime === -1) {
clearTimeout(this.counterDownTimeout)
this.counterDownTime = this.duration
return false
}
var durationObj = this.$dayjs.duration(this.counterDownTime * 1000)
var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours()
var min = durationObj.minutes() > 9 ? durationObj.minutes() : '0' + durationObj.minutes()
var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds()
this.time = hours + ':' + min + ':' + seconds
this.counterDownTime --
this.counterDownTimeout = setTimeout(() => {
this.counterDown()
}, 1000)
},
timing () {
this.progress = ((this.counterDownTime / 120) * 100).toFixed(2) > 100 ? 101 : ((this.counterDownTime / 120) * 100).toFixed(2)
var durationObj = this.$dayjs.duration(this.counterDownTime * 1000)
var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours()
var min = durationObj.minutes() > 9 ? durationObj.minutes() : '0' + durationObj.minutes()
var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds()
this.time = hours + ':' + min + ':' + seconds
this.counterDownTime ++
this.timingTimeout = setTimeout(() => {
this.timing()
}, 1000)
save() {
if (!this.blobFile) {
return this.$u.toast(`请录音`)
}
this.blobToDataURI(this.blobFile).then(res => {
uni.$emit('record', res)
uni.navigateBack({
delta: 1
})
})
},
onAudioEnd() {
this.isPlay = false
},
stop() {
this.isRecording = false
this.isStop = true
clearTimeout(this.timingTimeout)
this.recorder.stop((blob, duration) => {
this.blobFile = blob
var durationObj = this.$dayjs.duration(this.counterDownTime * 1000)
this.duration = this.counterDownTime
var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours()
var min = durationObj.minutes() > 9 ? durationObj.minutes() : '0' + durationObj.minutes()
var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds()
this.time = hours + ':' + min + ':' + seconds
console.log(blob, (window.URL || webkitURL).createObjectURL(blob), '时长:' + duration + 'ms')
this.recorder.close()
this.recorder = null
}, msg => {
console.log('录音失败:' + msg)
this.recorder.close()
this.recorder = null
})
},
play() {
if (!this.isPlay) {
this.playAudio()
this.counterDown()
} else {
this.isPlay = false
clearTimeout(this.counterDownTimeout)
this.audio.pause()
}
},
playAudio() {
this.isPlay = true
if (!this.audioSrc) {
this.audioSrc = (window.URL || webkitURL).createObjectURL(this.blobFile)
}
this.$nextTick(() => {
this.audio.play()
})
},
recodeStop() {
this.recorder.stop((blob, duration) => {
this.restart()
this.blobFile = blob
console.log(blob, (window.URL || webkitURL).createObjectURL(blob), '时长:' + duration + 'ms')
this.recorder.close()
this.recorder = null
}, msg => {
console.log('录音失败:' + msg)
this.recorder.close()
this.recorder = null
})
},
restart() {
this.time = '00:00:00'
this.progress = 0
this.blobFile = null
this.isPlay = false
this.isRecording = false
clearTimeout(this.counterDownTimeout)
clearTimeout(this.timingTimeout)
this.counterDownTime = 0
this.audioSrc = ''
this.isStop = false
},
counterDown() {
if (this.counterDownTime === -1) {
clearTimeout(this.counterDownTimeout)
this.counterDownTime = this.duration
return false
}
var durationObj = this.$dayjs.duration(this.counterDownTime * 1000)
var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours()
var min = durationObj.minutes() > 9 ? durationObj.minutes() : '0' + durationObj.minutes()
var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds()
this.time = hours + ':' + min + ':' + seconds
this.counterDownTime--
this.counterDownTimeout = setTimeout(() => {
this.counterDown()
}, 1000)
},
timing() {
this.progress = ((this.counterDownTime / 120) * 100).toFixed(2) > 100 ? 101 : ((this.counterDownTime / 120) * 100).toFixed(2)
var durationObj = this.$dayjs.duration(this.counterDownTime * 1000)
var hours = durationObj.hours() > 9 ? durationObj.hours() : '0' + durationObj.hours()
var min = durationObj.minutes() > 9 ? durationObj.minutes() : '0' + durationObj.minutes()
var seconds = durationObj.seconds() > 9 ? durationObj.seconds() : '0' + durationObj.seconds()
this.time = hours + ':' + min + ':' + seconds
this.counterDownTime++
this.timingTimeout = setTimeout(() => {
this.timing()
}, 1000)
}
}
}
</script>
<style lang="scss" scoped>
uni-page-body{
background-color: #fff;
uni-page-body {
background-color: #fff;
}
.recording {
height: 100vh;
overflow-y: hidden;
.content {
padding-top: 310px;
text-align: center;
img {
width: 406px;
height: 306px;
margin-bottom: 48px;
}
.text {
font-size: 30px;
color: #999;
line-height: 42px;
text-align: center;
}
}
.recording {
height: 100vh;
overflow-y: hidden;
.content{
padding-top: 310px;
.footer {
display: flex;
align-items: center;
justify-content: center;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 168px;
background: #F6F8FC;
padding: 20px 86px;
box-sizing: border-box;
span {
display: inline-block;
width: 160px;
height: 64px;
background: #4E8EEE;
border-radius: 32px;
font-size: 30px;
color: #fff;
text-align: center;
img{
width: 406px;
height: 306px;
margin-bottom: 48px;
}
.text{
font-size: 30px;
color: #999;
line-height: 42px;
text-align: center;
}
}
.footer{
display: flex;
align-items: center;
justify-content: center;
position: fixed;
bottom: 0;
left: 0;
width: 100%;
height: 168px;
background: #F6F8FC;
padding: 20px 86px;
box-sizing: border-box;
span{
display: inline-block;
width: 160px;
height: 64px;
background: #4E8EEE;
border-radius: 32px;
font-size: 30px;
color: #fff;
text-align: center;
line-height: 64px;
vertical-align: top;
margin-top: 30px;
}
img{
width: 128px;
height: 128px;
margin: 0 64px;
}
line-height: 64px;
vertical-align: top;
margin-top: 30px;
}
.recording-content {
position: relative;
overflow: hidden;
}
.stop-content {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
height: calc(100% - 168px);
.header-line {
width: 380px;
}
.time {
margin-top: 0;
margin-bottom: 32px;
}
}
.header-top {
position: absolute;
top: 16px;
left: 0;
height: 6px;
background: url(./img/top.png) repeat-x;
background-size: auto 6px;
}
.time{
width: 100%;
margin-top: 208px;
text-align: center;
font-size: 96px;
color: #000000;
line-height: 134px;
}
.progress {
position: absolute;
top: 16px;
left: 0;
width: 2px;
img {
width: 128px;
height: 128px;
background: #3477EE;
margin: 0 64px;
}
}
.recording-content {
position: relative;
overflow: hidden;
}
.stop-content {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
height: calc(100% - 168px);
.header-line {
width: 100%;
max-width: 100%;
height: 128px;
line-height: 128px;
margin-top: 16px;
overflow: hidden;
width: 380px;
}
.animation {
animation: note 0.24s ease-in-out;
animation-iteration-count: infinite;
animation-direction: alternate;
}
.header-line span {
display: inline-block;
width: 6px;
height: 16px;
margin: 0 6px;
border: none;
border-radius: 4px;
background-color: #3476EE;
}
.header-line span.line1 {
animation-delay: -1s;
}
.header-line span.line2 {
animation-delay: -0.9s;
}
.header-line span.line3 {
animation-delay: -0.8s;
}
.header-line span.line4 {
animation-delay: -0.7s;
}
.header-line span.line5 {
animation-delay: -0.6s;
}
.header-line span.line6 {
animation-delay: -0.5s;
}
.header-line span.line7 {
animation-delay: -0.4s;
}
.header-line span.line8 {
animation-delay: -0.4s;
}
.header-line span.line9 {
animation-delay: -0.2s;
}
.header-line span.line10 {
animation-delay: -0.1s;
}
.header-line span.line11 {
animation-delay: -1s;
}
.header-line span.line12 {
animation-delay: -0.9s;
}
.header-line span.line13 {
animation-delay: -0.8s;
}
.header-line span.line14 {
animation-delay: -0.7s;
}
.header-line span.line15 {
animation-delay: -0.6s;
}
.header-line span.line16 {
animation-delay: -0.5s;
}
.header-line span.line17 {
animation-delay: -0.4s;
}
.header-line span.line18 {
animation-delay: -0.3s;
}
.header-line span.line19 {
animation-delay: -0.2s;
}
.header-line span.line20 {
animation-delay: -0.1s;
}
@keyframes note {
from {
transform: scaleY(1);
}
to {
transform: scaleY(4);
}
.time {
margin-top: 0;
margin-bottom: 32px;
}
}
.header-top {
position: absolute;
top: 16px;
left: 0;
height: 6px;
background: url(./img/top.png) repeat-x;
background-size: auto 6px;
}
.time {
width: 100%;
margin-top: 208px;
text-align: center;
font-size: 96px;
color: #000000;
line-height: 134px;
}
.progress {
position: absolute;
top: 16px;
left: 0;
width: 2px;
height: 128px;
background: #3477EE;
}
.header-line {
width: 100%;
max-width: 100%;
height: 128px;
line-height: 128px;
margin-top: 16px;
overflow: hidden;
}
.animation {
animation: note 0.24s ease-in-out;
animation-iteration-count: infinite;
animation-direction: alternate;
}
.header-line span {
display: inline-block;
width: 6px;
height: 16px;
margin: 0 6px;
border: none;
border-radius: 4px;
background-color: #3476EE;
}
.header-line span.line1 {
animation-delay: -1s;
}
.header-line span.line2 {
animation-delay: -0.9s;
}
.header-line span.line3 {
animation-delay: -0.8s;
}
.header-line span.line4 {
animation-delay: -0.7s;
}
.header-line span.line5 {
animation-delay: -0.6s;
}
.header-line span.line6 {
animation-delay: -0.5s;
}
.header-line span.line7 {
animation-delay: -0.4s;
}
.header-line span.line8 {
animation-delay: -0.4s;
}
.header-line span.line9 {
animation-delay: -0.2s;
}
.header-line span.line10 {
animation-delay: -0.1s;
}
.header-line span.line11 {
animation-delay: -1s;
}
.header-line span.line12 {
animation-delay: -0.9s;
}
.header-line span.line13 {
animation-delay: -0.8s;
}
.header-line span.line14 {
animation-delay: -0.7s;
}
.header-line span.line15 {
animation-delay: -0.6s;
}
.header-line span.line16 {
animation-delay: -0.5s;
}
.header-line span.line17 {
animation-delay: -0.4s;
}
.header-line span.line18 {
animation-delay: -0.3s;
}
.header-line span.line19 {
animation-delay: -0.2s;
}
.header-line span.line20 {
animation-delay: -0.1s;
}
@keyframes note {
from {
transform: scaleY(1);
}
to {
transform: scaleY(4);
}
}
}
</style>

View File

@@ -1,7 +1,8 @@
<template>
<div class="resourcesManage">
<div class="tab">
<u-tabs :list="tab" :is-scroll="false" :current="currIndex" @change="change" height="96" :bar-style="barStyle"></u-tabs>
<u-tabs :list="tab" :is-scroll="false" :current="currIndex" @change="change" height="96"
:bar-style="barStyle"></u-tabs>
</div>
<div class="record" v-if="currIndex == 0">
<div class="item" v-for="(item, index) in list" :key="index" @click="choose(item)">
@@ -21,161 +22,167 @@
<u-popup v-model="isShow" mode="bottom">
<div class="audio">
<AiVideo :src="url" autoplay></AiVideo>
<!-- <audio :src="url" ref="audio" :controls="true" :name="autioName" style="display: block;"></audio> -->
<!-- <audio :src="url" ref="audio" :controls="true" :name="autioName" style="display: block;"></audio> -->
</div>
</u-popup>
</u-popup>
<AiBack></AiBack>
</div>
</template>
<script>
import AiVideo from '@/components/AiVideo'
import AiBack from "@/components/AiBack";
export default {
name: "resourcesManage",
data() {
return {
tab: [{ name: '音频素材' }, { name: '文本素材' }],
list: [],
currIndex: 0,
current: 1,
isChoose: false,
isMore: false,
isShow: false,
url: '',
autioName: '',
audio: null,
barStyle: {width:'98px', bottom: '-3px', left: '-38px'}
}
},
<script>
import AiVideo from '@/components/AiVideo'
import AiBack from "@/components/AiBack";
components: {
AiBack,
AiVideo
},
export default {
name: "resourcesManage",
data() {
return {
tab: [{name: '音频素材'}, {name: '文本素材'}],
list: [],
currIndex: 0,
current: 1,
isChoose: false,
isMore: false,
isShow: false,
url: '',
autioName: '',
audio: null,
barStyle: {width: '98px', bottom: '-3px', left: '-38px'}
}
},
onLoad (query) {
this.isChoose = query.isChoose ? true : false
this.getList()
uni.$on('getList', e => {
this.isMore = false
this.list = []
this.current = 1
components: {
AiBack,
AiVideo
},
this.$nextTick(() => {
this.getList()
})
onLoad(query) {
this.isChoose = query.isChoose ? true : false
this.getList()
uni.$on('getList', e => {
this.isMore = false
this.list = []
this.current = 1
this.$nextTick(() => {
this.getList()
})
})
},
methods: {
change(index) {
this.isMore = false
this.list = []
this.current = 1
this.currIndex = index
this.$nextTick(() => {
this.getList()
})
},
methods: {
change(index) {
this.isMore = false
this.list = []
this.current = 1
this.currIndex = index
this.$nextTick(() => {
this.getList()
})
},
add () {
uni.navigateTo({
url: `/pages/resourcesManage/addPlay?type=${this.currIndex === 0 ? 1 : 3}`
})
},
choose (item) {
if (!this.isChoose) {
console.log(item.url)
this.url = item.url
this.isShow = true
return false
}
uni.$emit('choose', {
mediaId: item.id,
mediaName: item.name
})
uni.navigateBack({
delta: 1
})
},
getList () {
if (this.isMore) return
this.$http.post(`/app/appdlbresource/list`, null, {
params: {
...this.search,
type: this.currIndex === 0 ? 1 : 3,
current: this.current,
size: 10
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
uni.hideLoading()
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
})
}
add() {
uni.navigateTo({
url: `/pages/resourcesManage/addPlay?type=${this.currIndex === 0 ? 1 : 3}`
})
},
onReachBottom() {
this.getList()
choose(item) {
if (!this.isChoose) {
console.log(item.url)
this.url = item.url
this.isShow = true
return false
}
uni.$emit('choose', {
mediaId: item.id,
mediaName: item.name
})
uni.navigateBack({
delta: 1
})
},
getList() {
if (this.isMore) return
this.$http.post(`/app/appdlbresource/list`, null, {
params: {
...this.search,
type: this.currIndex === 0 ? 1 : 3,
current: this.current,
size: 10
}
}).then(res => {
if (res.code == 0) {
if (this.current > 1) {
this.list = [...this.list, ...res.data.records]
} else {
this.list = res.data.records
}
uni.hideLoading()
if (res.data.records.length < 10) {
this.isMore = true
return false
}
this.current = this.current + 1
} else {
uni.hideLoading()
}
}).catch(() => {
uni.hideLoading()
})
}
},
onReachBottom() {
this.getList()
}
}
</script>
<style lang="scss" scoped>
.resourcesManage {
padding-bottom: 128px;
.tab{
.tab {
border-bottom: 1px solid #ddd;
margin-bottom: 4px;
}
.audio {
width: 100%;
height: 400rpx;
height: 400 rpx;
box-sizing: border-box;
padding: 104rpx 0 46rpx;
padding: 104 rpx 0 46 rpx;
audio {
}
}
.record{
.record {
background-color: #fff;
.item{
.item {
width: 100%;
display: flex;
border-bottom: 1px solid #ddd;
padding: 32px 30px;
box-sizing: border-box;
img{
img {
width: 56px;
height: 56px;
margin-right: 14px;
}
.info{
.info {
width: calc(100% - 70px);
line-height: 44px;
font-size: 34px;
@@ -192,34 +199,41 @@
}
}
}
.record-text{
background-color: #fff;
.item{
.record-text {
background-color: #fff;
.item {
width: 100%;
border-bottom: 1px solid #ddd;
padding: 32px 30px;
box-sizing: border-box;
font-size: 30px;
div{
div {
font-size: 30px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333;
overflow: hidden;
text-overflow:ellipsis;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: 12px;
.color-0063E5{
.color-0063E5 {
color: #0063E5;
}
.color-FF8100{
.color-FF8100 {
color: #FF8100;
}
.color-FF4466{
.color-FF4466 {
color: #FF4466;
}
}
p{
p {
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #666;
@@ -235,7 +249,8 @@
}
}
}
.add-img{
.add-img {
width: 120px;
position: fixed;
bottom: 120px;

View File

@@ -15,28 +15,25 @@
</div>
</div>
</template>
<script>
<script>
export default {
name: "talking",
data() {
return {
}
},
methods: {
return {}
},
methods: {},
mounted() {
}
}
</script>
<style lang="scss" scoped>
uni-page-body{
uni-page-body {
background-color: #fff;
}
.talking {
.header{
.header {
width: 100%;
height: 128px;
background: #F6F8FC;
@@ -44,41 +41,49 @@ uni-page-body{
box-sizing: border-box;
display: flex;
justify-content: space-between;
p{
p {
font-size: 32px;
color: #333;
line-height: 44px;
span{
span {
color: #1174FE;
}
}
img{
img {
width: 32px;
height: 32px;
}
}
.content{
.content {
margin-top: 224px;
.time{
.time {
width: 100%;
text-align: center;
font-size: 96px;
color: #000000;
line-height: 134px;
}
img{
img {
width: 406px;
height: 306px;
margin: 0 0 48px 172px;
}
.text{
.text {
font-size: 30px;
color: #999;
line-height: 42px;
text-align: center;
}
}
.footer{
.footer {
position: fixed;
bottom: 0;
left: 0;
@@ -87,10 +92,11 @@ uni-page-body{
background: #F6F8FC;
padding: 20px 310px;
box-sizing: border-box;
img{
img {
width: 128px;
height: 128px;
}
}
}
</style>
</style>

View File

@@ -38,9 +38,9 @@
<u-row justify="between">
<u-row>
<img
class="avatar"
:src="item.portrait ? item.portrait : $cdn + 'other/tx.png'"
alt=""/>
class="avatar"
:src="item.portrait ? item.portrait : $cdn + 'other/tx.png'"
alt=""/>
<div class="wrap">
<span class="name">{{ item.nickName }}</span>
<span class="date">{{ item.createTime }}</span>
@@ -48,7 +48,7 @@
</u-row>
<u-row>
<u-icon :name="$cdn + 'Location2@2x.png'" :custom-style="{width:'20px',height:'20px'}"></u-icon>
<span class="date">{{item.areaName}}</span>
<span class="date">{{ item.areaName }}</span>
</u-row>
</u-row>
<div class="content">
@@ -141,7 +141,7 @@ export default {
status: this.currentType,
reportType: this.reportIndex == 6 ? null : this.reportIndex,
address: this.keyword,
areaId:this.user?.areaId
areaId: this.user?.areaId
}
}).then(res => {
if (res?.code == 0) {

View File

@@ -30,12 +30,13 @@
<text class="title">事件描述</text>
<div class="content">{{ detail.explain }}</div>
<div class="photos">
<img :src="item.url" alt="" v-for="(item,index) in detail.files" :key="index" @click.stop="previewImage(detail.files,index)">
<img :src="item.url" alt="" v-for="(item,index) in detail.files" :key="index"
@click.stop="previewImage(detail.files,index)">
</div>
<template v-if="detail.handleResult">
<u-row justify="space-between" class="result">
<text class="title">处理结果</text>
<text>{{detail.integral|formt}}</text>
<text>{{ detail.integral|formt }}</text>
</u-row>
<div class="content">{{ detail.handleResult }}</div>
<div class="photos">
@@ -93,7 +94,7 @@ export default {
}
},
methods: {
previewImage(data,index) {
previewImage(data, index) {
uni.previewImage({
urls: data.map(e => e.url),
current: data[index].url
@@ -117,8 +118,8 @@ export default {
}
},
filters:{
formt(val){
filters: {
formt(val) {
return +val > 0 ? `+${val}` : val
}
}

View File

@@ -5,8 +5,8 @@
<div class="select" @click="handleSelect">
{{
selected
? `${selected.familyName} 剩余积分:${selected.familyIntegral}`
: '请选择'
? `${selected.familyName} 剩余积分:${selected.familyIntegral}`
: '请选择'
}}
<u-icon name="arrow-right" color="#E2E2E2" size="28"></u-icon>
</div>
@@ -16,15 +16,15 @@
<scroll-view scroll-y class="category-wrap">
<div
class="category-item"
v-for="(item, index) in categoryList"
:key="index"
class="category-item"
v-for="(item, index) in categoryList"
:key="index"
>
<img class="category-img" :src="parseObj(item.photo)" alt="" />
<img class="category-img" :src="parseObj(item.photo)" alt=""/>
<div class="category-info">
<label class="hidden">{{ item.merchandiseName }}</label>
<span class="score"
>{{ item.costIntegral }}
>{{ item.costIntegral }}
<span>积分</span>
</span>
<div class="wrap">×{{ item.merchandiseNumber }}</div>
@@ -35,13 +35,13 @@
<div class="sum">
<span>{{ totalCount }}件商品</span>
<span
>合计{{ totalScore }}
>合计{{ totalScore }}
<span>积分</span>
</span>
</div>
<div class="btn" @click="hanldeSubmit">确认领取</div>
</div>
<back />
<back/>
</div>
</template>
@@ -50,7 +50,7 @@ import Back from '../../components/AiBack'
export default {
name: 'balance',
components: { Back },
components: {Back},
data() {
return {
selected: null,
@@ -81,7 +81,7 @@ export default {
},
computed: {
uri() {
return this.$cdn+'other/' + 'line.png'
return this.$cdn + 'other/' + 'line.png'
}
},
@@ -95,39 +95,39 @@ export default {
title: '请选择结算对象',
icon: 'none'
})
let { memberId, familyId } = this.selected
let {memberId, familyId} = this.selected
this.$http
.post(`/app/appvillagerintegralshoporder/addOrder`, {
shopId: this.categoryList[0].shopId,
memberId,
familyId,
orderIntegral: this.totalScore,
merchandiseList: this.categoryList.map(e => {
return {
...e,
merchandiseId: e.id
}
})
})
.then(res => {
if (res.code == 0) {
uni.navigateTo({
url: '/pages/supermarket/components/resultPage/resultPage'
})
} else {
uni.navigateTo({
url:
'/pages/supermarket/components/resultPage/resultPage?flag=' +
false
})
.post(`/app/appvillagerintegralshoporder/addOrder`, {
shopId: this.categoryList[0].shopId,
memberId,
familyId,
orderIntegral: this.totalScore,
merchandiseList: this.categoryList.map(e => {
return {
...e,
merchandiseId: e.id
}
})
.catch(e => {
uni.showToast({
title: e || '网络异常',
icon: 'none'
})
.then(res => {
if (res.code == 0) {
uni.navigateTo({
url: '/pages/supermarket/components/resultPage/resultPage'
})
} else {
uni.navigateTo({
url:
'/pages/supermarket/components/resultPage/resultPage?flag=' +
false
})
}
})
.catch(e => {
uni.showToast({
title: e || '网络异常',
icon: 'none'
})
})
},
handleSelect() {
uni.navigateTo({
@@ -142,6 +142,7 @@ export default {
.balance {
min-height: 100%;
background-color: #ffffff;
.operate {
height: 120px;
display: flex;

View File

@@ -1,69 +1,72 @@
<template>
<div class="result-page">
<img :src="imgSrc" alt="">
<text>{{text}}</text>
<u-button type="primary" :custom-style="{width:'100%',borderRadius:'4px',marginTop:'48px'}" @click="goBack">{{btnText}}</u-button>
<text>{{ text }}</text>
<u-button type="primary" :custom-style="{width:'100%',borderRadius:'4px',marginTop:'48px'}" @click="goBack">
{{ btnText }}
</u-button>
<back></back>
</div>
</template>
<script>
import Back from "../../../../components/AiBack";
export default {
name: "result-page",
components: {Back},
data() {
return {
flag: true
}
import Back from "../../../../components/AiBack";
export default {
name: "result-page",
components: {Back},
data() {
return {
flag: true
}
},
onLoad(val) {
if (val.flag) {
this.flag = val.flag
}
},
methods: {
goBack() {
uni.navigateBack({
delta: 3
})
}
},
computed: {
text() {
return this.flag ? '领取成功!' : '领取失败!请联系管理员处理'
},
onLoad(val) {
if (val.flag) {
this.flag = val.flag
}
btnText() {
return this.flag ? '确定' : '我知道了'
},
methods: {
goBack() {
uni.navigateBack({
delta:3
})
}
},
computed: {
text(){
return this.flag ? '领取成功!' : '领取失败!请联系管理员处理'
},
btnText(){
return this.flag ? '确定' : '我知道了'
},
imgSrc(){
return this.flag ? (this.$cdn+'other/' + 'kztcg.png') : (this.$cdn+'other/' + 'kztsb.png')
}
imgSrc() {
return this.flag ? (this.$cdn + 'other/' + 'kztcg.png') : (this.$cdn + 'other/' + 'kztsb.png')
}
}
}
</script>
<style lang="scss" scoped>
.result-page {
min-height: 100%;
background-color: #ffffff;
display: flex;
flex-direction: column;
align-items: center;
padding: 96px ;
.result-page {
min-height: 100%;
background-color: #ffffff;
display: flex;
flex-direction: column;
align-items: center;
padding: 96px;
img {
width: 192px;
height: 192px;
}
text{
font-size: 36px;
font-weight: 800;
color: #333333;
line-height: 50px;
display: flex;
justify-content: center;
}
img {
width: 192px;
height: 192px;
}
text {
font-size: 36px;
font-weight: 800;
color: #333333;
line-height: 50px;
display: flex;
justify-content: center;
}
}
</style>

View File

@@ -5,8 +5,8 @@
</div>
<div class="result-body">
<div class="res-item" v-if="result" @click="selected">
<span>{{result.familyName}}</span>
<span>剩余积分:{{result.familyIntegral}}</span>
<span>{{ result.familyName }}</span>
<span>剩余积分:{{ result.familyIntegral }}</span>
</div>
<span class="placeholder" v-else>请通过搜索
<strong>手机号或身份证号</strong>
@@ -20,101 +20,101 @@
</template>
<script>
import back from "../../components/AiBack";
import back from "../../components/AiBack";
export default {
name: "search",
components: {back},
data() {
return {
keyword: "",
show: false,
result: null,
}
},
methods: {
selected() {
uni.navigateBack({
delta: 1,
success: () => {
uni.$emit('selected',this.result)
},
fail: (err) => {
console.error(err)
}
})
},
search() {
if (this.keyword == "") {
return uni.showToast({
title: "请输入搜索关键字",
icon: 'none'
})
export default {
name: "search",
components: {back},
data() {
return {
keyword: "",
show: false,
result: null,
}
},
methods: {
selected() {
uni.navigateBack({
delta: 1,
success: () => {
uni.$emit('selected', this.result)
},
fail: (err) => {
console.error(err)
}
this.$http.post(`/app/appresident/queryFamilyByPhone`, null, {
params: {
phone: this.keyword
}
}).then(res => {
if (res && res.data) {
this.result = res.data
}
}).catch(e => {
this.result = null
uni.showToast({
title: e,
icon: 'none'
})
})
},
search() {
if (this.keyword == "") {
return uni.showToast({
title: "请输入搜索关键字",
icon: 'none'
})
},
confirm() {
this.show = false
}
this.$http.post(`/app/appresident/queryFamilyByPhone`, null, {
params: {
phone: this.keyword
}
}).then(res => {
if (res && res.data) {
this.result = res.data
}
}).catch(e => {
this.result = null
uni.showToast({
title: e,
icon: 'none'
})
})
},
confirm() {
this.show = false
}
}
}
</script>
<style lang="scss" scoped>
.search {
min-height: 100%;
background-color: #ffffff;
.search-wrap {
width: 100%;
box-sizing: border-box;
padding: 24px 32px;
}
.result-body {
.res-item {
height: 112px;
border-bottom: 1px solid #F5F5F5;
box-sizing: border-box;
padding: 0 56px;
display: flex;
align-items: center;
justify-content: space-between;
& > span {
font-size: 32px;
color: #333333;
}
}
.placeholder {
display: flex;
justify-content: center;
margin-top: 144px;
font-size: 28px;
color: #999999;
& > strong {
color: #135AB8;
}
}
}
.search {
min-height: 100%;
background-color: #ffffff;
.search-wrap {
width: 100%;
box-sizing: border-box;
padding: 24px 32px;
}
.result-body {
.res-item {
height: 112px;
border-bottom: 1px solid #F5F5F5;
box-sizing: border-box;
padding: 0 56px;
display: flex;
align-items: center;
justify-content: space-between;
& > span {
font-size: 32px;
color: #333333;
}
}
.placeholder {
display: flex;
justify-content: center;
margin-top: 144px;
font-size: 28px;
color: #999999;
& > strong {
color: #135AB8;
}
}
}
}
</style>

View File

@@ -5,7 +5,7 @@
<scroll-view scroll-y style="height: 100%;">
<div class="nav-left-item" v-for="(val, key, index) in list" :style="active(key)" :key="index"
@click="clickSort(key,index)">
{{key}}分区
{{ key }}分区
<u-badge size="mini" :count="sortCountList[index]" absolute :offset="[5,5]"></u-badge>
</div>
</scroll-view>
@@ -14,17 +14,17 @@
<scroll-view scroll-y style="height: 100%;">
<div class="category-item" v-for="(item,index) in categoryList" :key="index">
<img
:src="parseObj(item.photo)"
class="category-img" alt="">
:src="parseObj(item.photo)"
class="category-img" alt="">
<div class="category-info">
<label class="hidden">{{item.merchandiseName}}</label>
<span class="score">{{item.costIntegral}}
<label class="hidden">{{ item.merchandiseName }}</label>
<span class="score">{{ item.costIntegral }}
<span>积分</span>
</span>
<div class="wrap">
<div class="lxc-count">
<div class="less" @click="less(item,index)">-</div>
<div class="num">{{item.merchandiseNumber}}</div>
<div class="num">{{ item.merchandiseNumber }}</div>
<div class="less" @click="add(item,index)">+</div>
</div>
</div>
@@ -34,8 +34,8 @@
</div>
<div class="footer">
<div class="sum">
<span>{{totalCount}}件商品</span>
<span>合计{{totalScore}}
<span>{{ totalCount }}件商品</span>
<span>合计{{ totalScore }}
<span>积分</span>
</span>
</div>
@@ -47,291 +47,294 @@
</template>
<script>
import AiEmpty from "../../components/AiEmpty";
import {mapState} from "vuex";
export default {
name: "supermarket",
components: {AiEmpty},
data() {
return {
list: {},
idx: 0,
totalScore: 0,
sortCountList: [],
mark: 0,
}
},
import AiEmpty from "../../components/AiEmpty";
import {mapState} from "vuex";
onLoad() {
this.getList()
},
export default {
name: "supermarket",
components: {AiEmpty},
data() {
return {
list: {},
idx: 0,
totalScore: 0,
sortCountList: [],
mark: 0,
}
},
watch: {
list: {
handler(val) {
let sum = 0
Object.keys(val).map(e=>{
val[e].map(p=>{
if (p.merchandiseNumber != 0) {
sum += (p.merchandiseNumber) * (p.costIntegral)
}
})
})
this.totalScore = sum
},
immediate: true,
deep: true
}
},
onLoad() {
this.getList()
},
computed: {
...mapState(['user']),
totalCount() {
return this.sortCountList.reduce((pre, cur) => (pre + cur), 0)
},
categoryList() {
return this.idx == 0 ? this.list[Object.keys(this.list)[0]] : this.list[this.idx]
},
},
methods: {
handleSubmit() {
if (this.totalCount == 0) {
return uni.showToast({
title: "您还没有选择商品",
icon: 'none'
})
}
let filter = []
Object.keys(this.list).map(e => {
this.list[e].map(p => {
if (p.merchandiseNumber > 0) {
filter.push(p)
watch: {
list: {
handler(val) {
let sum = 0
Object.keys(val).map(e => {
val[e].map(p => {
if (p.merchandiseNumber != 0) {
sum += (p.merchandiseNumber) * (p.costIntegral)
}
})
})
uni.navigateTo({
url: "/pages/supermarket/balance?category=" + JSON.stringify(filter)
})
this.totalScore = sum
},
active(key) {
const flag = key == this.idx
return {
borderLeft: flag ? '3px solid #1D58FE' : '',
background: flag ? 'linear-gradient(270deg, #FFFFFF 0%, #FFFFFF 77%, #E7EAFA 100%)' : ''
}
},
add(item, index) {
this.list[this.idx][index]["merchandiseNumber"] = this.list[this.idx][index]["merchandiseNumber"] + 1
this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre,curr)=>{
return (pre + curr.merchandiseNumber)
},0))
},
less(item, index) {
if (item.merchandiseNumber > 0) {
this.list[this.idx][index]["merchandiseNumber"] = this.list[this.idx][index]["merchandiseNumber"] - 1
this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre,curr)=>{
return (pre + curr.merchandiseNumber)
},0))
}
},
clickSort(key, index) {
this.mark = index
this.idx = key.toString()
},
parseObj(json) {
return JSON.parse(json || '[]')[0]?.url
},
getList() {
this.$http.post(`/app/appvillagerintegralmerchandise/listByIntegral`, null, {
params: {
areaId: this.user?.areaId
}
}).then(res => {
if (res && res.data) {
Object.keys(res.data).map(e => {
res.data[e].map(p => {
p.merchandiseNumber = 0
})
})
this.list = res.data
this.idx = Object.keys(res.data)[0]
this.sortCountList = Array(Object.keys(res.data).length).fill(0)
}
})
}
immediate: true,
deep: true
}
},
computed: {
...mapState(['user']),
totalCount() {
return this.sortCountList.reduce((pre, cur) => (pre + cur), 0)
},
}
categoryList() {
return this.idx == 0 ? this.list[Object.keys(this.list)[0]] : this.list[this.idx]
},
},
methods: {
handleSubmit() {
if (this.totalCount == 0) {
return uni.showToast({
title: "您还没有选择商品",
icon: 'none'
})
}
let filter = []
Object.keys(this.list).map(e => {
this.list[e].map(p => {
if (p.merchandiseNumber > 0) {
filter.push(p)
}
})
})
uni.navigateTo({
url: "/pages/supermarket/balance?category=" + JSON.stringify(filter)
})
},
active(key) {
const flag = key == this.idx
return {
borderLeft: flag ? '3px solid #1D58FE' : '',
background: flag ? 'linear-gradient(270deg, #FFFFFF 0%, #FFFFFF 77%, #E7EAFA 100%)' : ''
}
},
add(item, index) {
this.list[this.idx][index]["merchandiseNumber"] = this.list[this.idx][index]["merchandiseNumber"] + 1
this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre, curr) => {
return (pre + curr.merchandiseNumber)
}, 0))
},
less(item, index) {
if (item.merchandiseNumber > 0) {
this.list[this.idx][index]["merchandiseNumber"] = this.list[this.idx][index]["merchandiseNumber"] - 1
this.$set(this.sortCountList, this.mark, this.list[this.idx]?.reduce((pre, curr) => {
return (pre + curr.merchandiseNumber)
}, 0))
}
},
clickSort(key, index) {
this.mark = index
this.idx = key.toString()
},
parseObj(json) {
return JSON.parse(json || '[]')[0]?.url
},
getList() {
this.$http.post(`/app/appvillagerintegralmerchandise/listByIntegral`, null, {
params: {
areaId: this.user?.areaId
}
}).then(res => {
if (res && res.data) {
Object.keys(res.data).map(e => {
res.data[e].map(p => {
p.merchandiseNumber = 0
})
})
this.list = res.data
this.idx = Object.keys(res.data)[0]
this.sortCountList = Array(Object.keys(res.data).length).fill(0)
}
})
}
},
}
</script>
<style lang="scss" scoped>
uni-page-body{
background-color: #ffffff;
}
uni-page-body {
background-color: #ffffff;
}
.supermarket {
background-color: #ffffff;
display: flex;
justify-content: space-between;
padding-bottom: 104px;
.supermarket {
background-color: #ffffff;
display: flex;
justify-content: space-between;
padding-bottom: 104px;
.nav-left {
width: 168px;
height: 100%;
.nav-left {
width: 168px;
height: 100%;
.nav-left-item {
height: 104px;
background: #FAF9FB;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
color: #333333;
border-top: 1px solid #D8E5FF;
border-left: 2px solid transparent;
position: relative;
&:nth-last-child {
border-bottom: 1px solid #D8E5FF;
}
}
}
.nav-right {
width: calc(100% - 168px - 24px);
height: 100%;
.category-item {
height: 264px;
box-sizing: border-box;
padding: 28px 32px 44px 30px;
display: flex;
.category-img {
width: 192px;
height: 192px;
border: 1px solid #F6F6F6;
flex-shrink: 0;
margin-right: 30px;
}
.category-info {
width: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
& > label {
font-size: 30px;
font-weight: 800;
color: #333333;
line-height: 42px;
}
.score {
font-size: 40px;
font-weight: 600;
color: #FA4A51;
line-height: 40px;
& > span {
font-size: 24px;
color: #FA4A51;
margin-left: 8px;
}
}
.wrap {
display: flex;
justify-content: flex-end;
.lxc-count{
display: flex;
align-items: center;
justify-content: center;
.less{
width: 40px;
height: 40px;
font-size: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
font-weight: 500;
color: #333333;
}
.num{
width: 89px;
height: 61px;
display: flex;
align-items: center;
justify-content: center;
background: #F6F6F6;
border-radius: 10px;
font-size: 28px;
font-weight: 400;
color: #333333;
margin: 0 16px;
}
}
}
}
}
}
.footer {
.nav-left-item {
height: 104px;
background: #FAF9FB;
display: flex;
align-items: center;
width: 100%;
background-color: #ffffff;
z-index: 100;
height: 104px;
box-shadow: 0px -2px 8px 0px rgba(214, 214, 214, 0.5);
position: fixed;
left: 0;
bottom: 0;
justify-content: center;
font-size: 28px;
color: #333333;
border-top: 1px solid #D8E5FF;
border-left: 2px solid transparent;
position: relative;
.sum {
width: calc(100% - 212px);
box-sizing: border-box;
padding: 30px;
&:nth-last-child {
border-bottom: 1px solid #D8E5FF;
}
}
}
.nav-right {
width: calc(100% - 168px - 24px);
height: 100%;
.category-item {
height: 264px;
box-sizing: border-box;
padding: 28px 32px 44px 30px;
display: flex;
.category-img {
width: 192px;
height: 192px;
border: 1px solid #F6F6F6;
flex-shrink: 0;
margin-right: 30px;
}
.category-info {
width: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
& > span:nth-child(1), span:nth-child(2) {
font-size: 32px;
font-weight: 400;
color: #F94246;
& > label {
font-size: 30px;
font-weight: 800;
color: #333333;
line-height: 42px;
}
.score {
font-size: 40px;
font-weight: 600;
color: #FA4A51;
line-height: 40px;
& > span {
font-size: 24px;
margin-left: 12px;
color: #FA4A51;
margin-left: 8px;
}
}
}
.btn {
width: 212px;
height: 100%;
background-color: #1365DD;
font-size: 36px;
font-weight: 500;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
}
.wrap {
display: flex;
justify-content: flex-end;
.hidden {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
.lxc-count {
display: flex;
align-items: center;
justify-content: center;
.less {
width: 40px;
height: 40px;
font-size: 20px;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
font-weight: 500;
color: #333333;
}
.num {
width: 89px;
height: 61px;
display: flex;
align-items: center;
justify-content: center;
background: #F6F6F6;
border-radius: 10px;
font-size: 28px;
font-weight: 400;
color: #333333;
margin: 0 16px;
}
}
}
}
}
}
.footer {
display: flex;
align-items: center;
width: 100%;
background-color: #ffffff;
z-index: 100;
height: 104px;
box-shadow: 0px -2px 8px 0px rgba(214, 214, 214, 0.5);
position: fixed;
left: 0;
bottom: 0;
.sum {
width: calc(100% - 212px);
box-sizing: border-box;
padding: 30px;
display: flex;
justify-content: space-between;
& > span:nth-child(1), span:nth-child(2) {
font-size: 32px;
font-weight: 400;
color: #F94246;
& > span {
font-size: 24px;
margin-left: 12px;
}
}
}
.btn {
width: 212px;
height: 100%;
background-color: #1365DD;
font-size: 36px;
font-weight: 500;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
}
.hidden {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
</style>

View File

@@ -8,7 +8,7 @@
</div>
<picker @change="change" :value="form.type" range-key="dictName" :range="$dict.getDict('workTaskType')">
<u-row>
<div v-if="form.type!=null" class="value">{{$dict.getDict('workTaskType')[form.type]["dictName"]}}</div>
<div v-if="form.type!=null" class="value">{{ $dict.getDict('workTaskType')[form.type]["dictName"] }}</div>
<div v-else class="placeholder">请选择</div>
<div class="arrow"></div>
</u-row>
@@ -41,7 +41,7 @@
</div>
<picker @change="dateChange" mode="date" :value="form.lastTime" :start="startDate" :end="endDate">
<u-row>
<div v-if="form.lastTime!=null" class="value">{{form.lastTime}}</div>
<div v-if="form.lastTime!=null" class="value">{{ form.lastTime }}</div>
<div v-else class="placeholder">请选择</div>
<div class="arrow" v-if="form.lastTime==null"></div>
<div class="clear" v-else @click.stop="form.lastTime = null"></div>
@@ -56,8 +56,8 @@
</div>
<u-row @click="handleSelectUser(0)" style="justify-content: flex-end">
<div v-if="form.userInfoList.length" class="value">
已选择<em>{{form.userInfoList.slice(0,2).map(e=>e.name).join("、")}}</em>
<em>{{form.userInfoList.length}}</em>
已选择<em>{{ form.userInfoList.slice(0, 2).map(e => e.name).join("、") }}</em>
<em>{{ form.userInfoList.length }}</em>
</div>
<div v-else class="placeholder">请选择</div>
<div class="arrow"></div>
@@ -69,8 +69,8 @@
<div class="left" style="line-height: 22px;">督办人</div>
<u-row @click="handleSelectUser(1)" style="justify-content: flex-end">
<div v-if="form.checkUserList.length" class="value">
已选择<em>{{form.checkUserList.slice(0,2).map(e=>e.name).join("、")}}</em>
<em>{{form.checkUserList.length}}</em>
已选择<em>{{ form.checkUserList.slice(0, 2).map(e => e.name).join("、") }}</em>
<em>{{ form.checkUserList.length }}</em>
</div>
<div v-else class="placeholder">请选择</div>
<div class="arrow"></div>
@@ -82,8 +82,8 @@
<div class="left" style="line-height: 22px;">抄送人</div>
<u-row @click="handleSelectUser(2)" style="justify-content: flex-end">
<div v-if="form.sendUserList.length" class="value">
已选择<em>{{form.sendUserList.slice(0,2).map(e=>e.name).join("、")}}</em>
<em>{{form.sendUserList.length}}</em>
已选择<em>{{ form.sendUserList.slice(0, 2).map(e => e.name).join("、") }}</em>
<em>{{ form.sendUserList.length }}</em>
</div>
<div v-else class="placeholder">请选择</div>
<div class="arrow"></div>
@@ -106,220 +106,220 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
import AiBack from "../../../components/AiBack";
import AiSelectEnterprise from "../../../components/AiSelectEnterprise";
export default {
name: "create",
components: {AiBack, AiSelectEnterprise},
data() {
return {
index: null,
userSelect: false,
selectList: [],
form: {
parentTaskCode: null,
type: null,
taskTitle: "",
taskDescription: "",
lastTime: null,
userInfoList: [],
checkUserList: [],
sendUserList: [],
isNofity: 0
},
currentClick: null,
}
},
onLoad(opt) {
if (opt.taskCode) {
this.form.parentTaskCode = opt.taskCode
}
this.$dict.load("workTaskType")
},
computed: {
startDate() {
return this.getDate('start');
export default {
name: "create",
components: {AiBack, AiSelectEnterprise},
data() {
return {
index: null,
userSelect: false,
selectList: [],
form: {
parentTaskCode: null,
type: null,
taskTitle: "",
taskDescription: "",
lastTime: null,
userInfoList: [],
checkUserList: [],
sendUserList: [],
isNofity: 0
},
endDate() {
return this.getDate('end');
}
currentClick: null,
}
},
onLoad(opt) {
if (opt.taskCode) {
this.form.parentTaskCode = opt.taskCode
}
this.$dict.load("workTaskType")
},
computed: {
startDate() {
return this.getDate('start');
},
methods: {
handleCreate() {
if (this.form.type==null) return this.$u.toast("请选择任务类型")
if (!this.form.taskTitle) return this.$u.toast("请输入任务标题")
if (!this.form.taskDescription) return this.$u.toast("请输入任务说明")
if (this.form.lastTime==null) return this.$u.toast("请选择截止日期")
if (!this.form.userInfoList.length) return this.$u.toast("请选择执行人")
endDate() {
return this.getDate('end');
}
},
methods: {
handleCreate() {
if (this.form.type == null) return this.$u.toast("请选择任务类型")
if (!this.form.taskTitle) return this.$u.toast("请输入任务标题")
if (!this.form.taskDescription) return this.$u.toast("请输入任务说明")
if (this.form.lastTime == null) return this.$u.toast("请选择截止日期")
if (!this.form.userInfoList.length) return this.$u.toast("请选择执行人")
this.$http.post("/app/appworktaskinfo/addOrUpdate", {
...this.form,
lastTime:this.form.lastTime + " 23:59:59"
}).then(res => {
if (res.code == 0) {
this.$u.toast("创建成功")
this.$refs["aiBack"].back()
}
})
},
handleSelectUser(status) {
this.currentClick = status
if (this.currentClick == 0 && this.form.userInfoList.length) {
this.selectList = this.form.userInfoList
} else if (this.currentClick == 1 && this.form.checkUserList.length) {
this.selectList = this.form.checkUserList
} else if (this.currentClick == 2 && this.form.sendUserList.length) {
this.selectList = this.form.sendUserList
this.$http.post("/app/appworktaskinfo/addOrUpdate", {
...this.form,
lastTime: this.form.lastTime + " 23:59:59"
}).then(res => {
if (res.code == 0) {
this.$u.toast("创建成功")
this.$refs["aiBack"].back()
}
this.userSelect = true
},
dateChange(e) {
let date = this.getDate({format: true});
if (new Date(date).getTime() > new Date(e.target.value).getTime()) {
this.form.lastTime = null
return this.$u.toast("截止时间不能小于当前时间")
}
this.form.lastTime = e.target.value
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
change(e) {
this.form.type = e.detail.value
},
userChange(e) {
if (this.currentClick == 0) {
this.form.userInfoList = e
} else if (this.currentClick == 1) {
this.form.checkUserList = e
} else if (this.currentClick == 2) {
this.form.sendUserList = e
}
this.selectList = []
}
})
},
}
handleSelectUser(status) {
this.currentClick = status
if (this.currentClick == 0 && this.form.userInfoList.length) {
this.selectList = this.form.userInfoList
} else if (this.currentClick == 1 && this.form.checkUserList.length) {
this.selectList = this.form.checkUserList
} else if (this.currentClick == 2 && this.form.sendUserList.length) {
this.selectList = this.form.sendUserList
}
this.userSelect = true
},
dateChange(e) {
let date = this.getDate({format: true});
if (new Date(date).getTime() > new Date(e.target.value).getTime()) {
this.form.lastTime = null
return this.$u.toast("截止时间不能小于当前时间")
}
this.form.lastTime = e.target.value
},
getDate(type) {
const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
if (type === 'start') {
year = year - 60;
} else if (type === 'end') {
year = year + 2;
}
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
change(e) {
this.form.type = e.detail.value
},
userChange(e) {
if (this.currentClick == 0) {
this.form.userInfoList = e
} else if (this.currentClick == 1) {
this.form.checkUserList = e
} else if (this.currentClick == 2) {
this.form.sendUserList = e
}
this.selectList = []
}
},
}
</script>
<style lang="scss" scoped>
.create-sub-task {
min-height: 100%;
background-color: #F5F5F5;
.create-sub-task {
min-height: 100%;
background-color: #F5F5F5;
box-sizing: border-box;
padding: 16px 0 140px 0;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 16px 0 140px 0;
padding: 32px 34px;
margin-bottom: 16px;
.card {
background-color: #FFFFFF;
box-sizing: border-box;
padding: 32px 34px;
margin-bottom: 16px;
.left {
font-size: 32px;
color: #333333;
font-weight: 400;
line-height: 48px;
.left {
& > em {
font-style: normal;
font-size: 32px;
color: #333333;
font-weight: 400;
line-height: 48px;
& > em {
font-style: normal;
font-size: 32px;
color: #FF4466;
}
color: #FF4466;
}
}
.value {
font-size: 32px;
color: #333333;
.value {
font-size: 32px;
color: #333333;
& > em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
}
.placeholder {
& > em {
font-style: normal;
font-size: 28px;
color: #999999;
}
.arrow {
width: 16px;
height: 16px;
border-top: 5px solid #CCCCCC;
border-right: 5px solid #CCCCCC;
transform: rotate(45deg);
margin-left: 8px;
}
.clear {
width: 32px;
height: 32px;
border-radius: 50%;
background-color: #CCCCCC;
margin-left: 8px;
position: relative;
&:before {
content: "";
width: 4px;
height: 24px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) rotate(-45deg);
background-color: #FFFFFF;
border-radius: 4px;
}
&:after {
content: "";
width: 4px;
height: 24px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) rotate(45deg);
background-color: #FFFFFF;
border-radius: 4px;
}
}
textarea {
width: 100%;
color: #1365DD;
}
}
.border {
border-top: 1px solid rgba(216, 221, 230, 0.5);
border-bottom: 1px solid rgba(216, 221, 230, 0.5);
.placeholder {
font-size: 28px;
color: #999999;
}
.footer {
height: 112px;
.arrow {
width: 16px;
height: 16px;
border-top: 5px solid #CCCCCC;
border-right: 5px solid #CCCCCC;
transform: rotate(45deg);
margin-left: 8px;
}
.clear {
width: 32px;
height: 32px;
border-radius: 50%;
background-color: #CCCCCC;
margin-left: 8px;
position: relative;
&:before {
content: "";
width: 4px;
height: 24px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) rotate(-45deg);
background-color: #FFFFFF;
border-radius: 4px;
}
&:after {
content: "";
width: 4px;
height: 24px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) rotate(45deg);
background-color: #FFFFFF;
border-radius: 4px;
}
}
textarea {
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #1365DD;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
}
}
.border {
border-top: 1px solid rgba(216, 221, 230, 0.5);
border-bottom: 1px solid rgba(216, 221, 230, 0.5);
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #1365DD;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
}
}
</style>

View File

@@ -6,43 +6,43 @@
</ai-top-fixed>
<template v-if="index==0">
<div class="card">
<header>{{detail.taskTitle}}</header>
<header>{{ detail.taskTitle }}</header>
<u-gap height="16"></u-gap>
<u-row>
<span>任务类型</span>
<span>{{$dict.getLabel("workTaskType",detail.type)}}</span>
<span>{{ $dict.getLabel("workTaskType", detail.type) }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>开始时间</span>
<span>{{detail.createTime}}</span>
<span>{{ detail.createTime }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>截止时间</span>
<span style="color:#1365DD">{{detail.lastTime}}</span>
<span style="color:#1365DD">{{ detail.lastTime }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>剩余时间</span>
<span style="color:#1365DD">{{detail.overTimeStatus}}</span>
<span style="color:#1365DD">{{ detail.overTimeStatus }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>任务状态</span>
<span>{{$dict.getLabel("workTaskDoStatus",detail.status)}}</span>
<span>{{ $dict.getLabel("workTaskDoStatus", detail.status) }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>执行说明</span>
<span>{{detail.doDescription}}</span>
<span>{{ detail.doDescription }}</span>
</u-row>
<u-gap height="16"></u-gap>
</div>
<div class="card" style="padding-top: 0">
<div class="label">任务说明</div>
<u-read-more close-text="展开" color="#999999" show-height="300">
<span>{{detail.taskDescription}}</span>
<span>{{ detail.taskDescription }}</span>
</u-read-more>
</div>
<div class="card" style="padding-top: 0" v-if="detail.fileList && detail.fileList.length">
@@ -51,9 +51,9 @@
<u-row justify="between">
<label class="left">
<img :src="$cdn + 'common/appendix.png'" alt="">
<span>{{item.name}}.{{item.postfix}}</span>
<span>{{ item.name }}.{{ item.postfix }}</span>
</label>
<span>{{(item.size/1024).toFixed(2)}}KB</span>
<span>{{ (item.size / 1024).toFixed(2) }}KB</span>
</u-row>
</div>
</div>
@@ -63,26 +63,27 @@
<template v-if="['0','1'].includes(isMine)">
<div class="card">
<div class="label">我的进度</div>
<text>已完成{{detail.myUserInfo.percent}}%</text>
<text>已完成{{ detail.myUserInfo.percent }}%</text>
<div class="progress">
<div class="pro-active" :style="{width:detail.myUserInfo.percent + '%'}"></div>
</div>
</div>
<div class="card" v-if="detail.processList.length">
<u-collapse>
<u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]" v-for="(item, index) in detail.processList" :key="index">
<u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]"
v-for="(item, index) in detail.processList" :key="index">
<template slot="info">
完成到<em>{{item.percent}}%</em>
完成到<em>{{ item.percent }}%</em>
</template>
{{item.remarks}}
{{ item.remarks }}
</u-collapse-item>
</u-collapse>
</div>
</template>
<template v-else>
<div class="card" v-for="(item,index) in detail.userInfoList" :key="index">
<div class="label">{{item.userName}}</div>
<text>已完成{{item.percent}}%</text>
<div class="label">{{ item.userName }}</div>
<text>已完成{{ item.percent }}%</text>
<div class="progress">
<div class="pro-active" :style="{width:item.percent + '%'}"></div>
</div>
@@ -93,8 +94,8 @@
<template v-if="index==2">
<div class="card" v-if="list.length">
<u-row justify="between" v-for="(item,index) in list" :key="index" class="item" @click="subDetail(item)">
<label class="title">{{item.taskTitle}}</label>
<label class="right">{{item.percent}}%
<label class="title">{{ item.taskTitle }}</label>
<label class="right">{{ item.percent }}%
<div class="arrow"></div>
</label>
</u-row>
@@ -103,342 +104,344 @@
</template>
<ai-back></ai-back>
<div class="footer" v-if="index==1 && detail.myUserInfo.taskRole == 1 && detail.myUserInfo.doStatus==0" @click="handleClick">去完成</div>
<div class="footer" v-if="index==1 && detail.myUserInfo.taskRole == 1 && detail.myUserInfo.doStatus==0"
@click="handleClick">去完成
</div>
<div class="footer" v-if="index==2" @click="createSubTask">创建子任务</div>
</div>
</template>
<script>
import AiTopFixed from "../../../components/AiTopFixed";
import AiBack from "../../../components/AiBack";
import AiEmpty from "../../../components/AiEmpty";
import {mapActions} from "vuex";
import AiTopFixed from "../../../components/AiTopFixed";
import AiBack from "../../../components/AiBack";
import AiEmpty from "../../../components/AiEmpty";
import {mapActions} from "vuex";
export default {
name: "detail",
components: {AiTopFixed, AiBack,AiEmpty},
data() {
return {
current: 1,
index: 0,
id: null,
taskCode: null,
isMine: null,
detail: {},
list: [],
}
},
onLoad(opt) {
this.id = opt.id
this.taskCode = opt.taskCode
this.isMine = opt.isMine
this.$dict.load("workTaskType", "workTaskDoStatus")
},
computed: {
tabs() {
return [
{name: "信息"},
{name: "进度"},
{name: "子任务"},
]
}
},
methods: {
...mapActions(['previewFile', 'injectJWeixin']),
preFile(e) {
if([".jpg",".png",".gif"].includes(e.postfix.toLowerCase())){
uni.previewImage({
current: e.url,
urls: [e.url]
})
}else {
this.previewFile({ ...e})
}
},
getDetail() {
this.$http.post("/app/appworktaskinfo/queryDetailById", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.detail = res.data
}
})
},
getList(){
this.$http.post("/app/appworktaskinfo/list", null, {
params: {
parentTaskCode: this.detail.taskCode,
size: 999,
}
}).then(res => {
if (res && res.data) {
this.list = res.data.records
}
})
},
createSubTask() {
uni.navigateTo({
url: "/pages/workTask/components/create?taskCode=" + this.taskCode
})
},
subDetail({id}) {
uni.navigateTo({
url: "/pages/workTask/components/subDetail?id=" + id
})
},
handleClick() {
uni.navigateTo({
url: "/pages/workTask/components/finish?taskCode=" + this.detail.taskCode + "&percent=" + this.detail.myUserInfo.percent
})
},
change(e) {
this.index = e
if (e == 2) {
this.getList()
}
}
},
onShow(){
this.getDetail()
this.getList()
export default {
name: "detail",
components: {AiTopFixed, AiBack, AiEmpty},
data() {
return {
current: 1,
index: 0,
id: null,
taskCode: null,
isMine: null,
detail: {},
list: [],
}
},
onLoad(opt) {
this.id = opt.id
this.taskCode = opt.taskCode
this.isMine = opt.isMine
this.$dict.load("workTaskType", "workTaskDoStatus")
},
computed: {
tabs() {
return [
{name: "信息"},
{name: "进度"},
{name: "子任务"},
]
}
},
methods: {
...mapActions(['previewFile', 'injectJWeixin']),
preFile(e) {
if ([".jpg", ".png", ".gif"].includes(e.postfix.toLowerCase())) {
uni.previewImage({
current: e.url,
urls: [e.url]
})
} else {
this.previewFile({...e})
}
},
getDetail() {
this.$http.post("/app/appworktaskinfo/queryDetailById", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.detail = res.data
}
})
},
getList() {
this.$http.post("/app/appworktaskinfo/list", null, {
params: {
parentTaskCode: this.detail.taskCode,
size: 999,
}
}).then(res => {
if (res && res.data) {
this.list = res.data.records
}
})
},
createSubTask() {
uni.navigateTo({
url: "/pages/workTask/components/create?taskCode=" + this.taskCode
})
},
subDetail({id}) {
uni.navigateTo({
url: "/pages/workTask/components/subDetail?id=" + id
})
},
handleClick() {
uni.navigateTo({
url: "/pages/workTask/components/finish?taskCode=" + this.detail.taskCode + "&percent=" + this.detail.myUserInfo.percent
})
},
change(e) {
this.index = e
if (e == 2) {
this.getList()
}
}
},
onShow() {
this.getDetail()
this.getList()
}
}
</script>
<style lang="scss" scoped>
.detail {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 140px;
.detail {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 140px;
::v-deep .content {
padding: 0;
::v-deep .content {
padding: 0;
}
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
}
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
.u-row {
& > div {
background-color: #2266FF;
border-radius: 50%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
.u-row {
& > div {
background-color: #2266FF;
border-radius: 50%;
text-align: center;
font-size: 22px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
.title {
width: 490px;
height: 112px;
display: flex;
align-items: center;
font-size: 32px;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.title {
width: 490px;
height: 112px;
display: flex;
align-items: center;
font-size: 32px;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.right {
font-size: 28px;
color: #1365DD;
display: flex;
align-items: center;
.right {
font-size: 28px;
color: #1365DD;
.arrow {
width: 16px;
height: 16px;
border-top: 3px solid #CCCCCC;
border-right: 3px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
.item {
position: relative;
&:after {
width: 100%;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
content: "";
position: absolute;
left: 0;
bottom: 0;
}
}
& > span {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
}
.file {
height: 128px;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
padding: 0 16px;
margin-bottom: 32px;
& > .u-row {
height: 100%;
.left {
width: 476px;
display: flex;
align-items: center;
.arrow {
width: 16px;
height: 16px;
border-top: 3px solid #CCCCCC;
border-right: 3px solid #CCCCCC;
transform: rotate(45deg);
& > img {
flex-shrink: 0;
width: 96px;
height: 96px;
}
& > span {
font-size: 32px;
color: #333333;
display: inline-block;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
}
}
}
.item {
position: relative;
&:after {
width: 100%;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
content: "";
position: absolute;
left: 0;
bottom: 0;
& > span {
font-size: 28px;
color: #999999;
}
}
}
& > span {
.active {
background-color: #F3F6F9;
}
& > text {
width: 100%;
display: inline-block;
font-size: 30px;
color: #649EFD;
text-align: center;
}
.progress {
height: 12px;
background: #F2F4FC;
border-radius: 12px;
position: relative;
margin: 16px 0 64px 0;
.pro-active {
height: 12px;
background: #639EFD;
border-radius: 12px;
position: absolute;
left: 0;
top: 0;
}
}
em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
::v-deep .u-collapse {
position: relative;
&:after {
content: "";
width: 718px;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
position: absolute;
left: 0;
bottom: 0;
}
.u-collapse-head {
padding: 40px 0;
}
.u-collapse-content {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
}
.file {
height: 128px;
background: #FFFFFF;
border-radius: 8px;
border: 1px solid #CCCCCC;
box-sizing: border-box;
padding: 0 16px;
margin-bottom: 32px;
& > .u-row {
height: 100%;
.left {
width: 476px;
display: flex;
align-items: center;
& > img {
flex-shrink: 0;
width: 96px;
height: 96px;
}
& > span {
font-size: 32px;
color: #333333;
display: inline-block;
line-height: 44px;
overflow: hidden;
text-overflow: ellipsis;
display:-webkit-box;
-webkit-box-orient:vertical;
-webkit-line-clamp:2;
}
}
& > span {
font-size: 28px;
color: #999999;
}
}
}
.active {
background-color: #F3F6F9;
}
& > text {
width: 100%;
display: inline-block;
font-size: 30px;
color: #649EFD;
text-align: center;
}
.progress {
height: 12px;
background: #F2F4FC;
border-radius: 12px;
position: relative;
margin: 16px 0 64px 0;
.pro-active {
height: 12px;
background: #639EFD;
border-radius: 12px;
position: absolute;
left: 0;
top: 0;
}
}
em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
::v-deep .u-collapse {
position: relative;
&:after {
content: "";
width: 718px;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
position: absolute;
left: 0;
bottom: 0;
}
.u-collapse-head {
padding: 40px 0;
}
.u-collapse-content {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
}
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #1365DD;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #1365DD;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
}
}
</style>

View File

@@ -4,25 +4,25 @@
<u-row justify="between">
<div class="left">
<u-avatar :src="detail.avatar" v-if="detail.avatar"></u-avatar>
<div class="avatar" v-else>{{detail.name && detail.name.substr(-2)}}</div>
<div class="avatar" v-else>{{ detail.name && detail.name.substr(-2) }}</div>
<div class="info">
<div class="name">{{detail.name}}</div>
<div class="status">{{$dict.getLabel("workTaskRole",detail.taskRole)}}</div>
<div class="name">{{ detail.name }}</div>
<div class="status">{{ $dict.getLabel("workTaskRole", detail.taskRole) }}</div>
</div>
</div>
<!-- <div class="btn">-->
<!-- <img src="../static/tx.png" alt="">催办提醒-->
<!-- </div>-->
<!-- <div class="btn">-->
<!-- <img src="../static/tx.png" alt="">催办提醒-->
<!-- </div>-->
</u-row>
<u-gap height="32"></u-gap>
<u-row>
<div class="label">完成时间</div>
<div class="value">{{detail.finishTime}}</div>
<div class="value">{{ detail.finishTime }}</div>
</u-row>
<u-gap height="16"></u-gap>
<u-row>
<div class="label">逾期时间</div>
<div class="value" style="color: #FF4466">{{detail.overTimeStatus}}</div>
<div class="value" style="color: #FF4466">{{ detail.overTimeStatus }}</div>
</u-row>
<u-gap height="30"></u-gap>
</div>
@@ -31,9 +31,9 @@
<u-collapse v-for="(item,index) in detail.processList" :key="index">
<u-collapse-item :title="item.createDate && item.createDate.split(' ')[0]">
<template slot="info">
完成到<em>{{item.percent}}%</em>
完成到<em>{{ item.percent }}%</em>
</template>
{{item.remarks}}
{{ item.remarks }}
</u-collapse-item>
</u-collapse>
</div>
@@ -42,145 +42,145 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiBack from "../../../components/AiBack";
export default {
name: "finishDetail",
components: {AiBack},
data() {
return {
id: null,
detail: {},
}
},
onLoad(opt) {
this.id = opt.id
this.$dict.load("workTaskRole").then(_=>this.getDetail())
},
methods: {
getDetail() {
this.$http.post("/app/appworktaskuserinfo/queryDetailById", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.detail = res.data;
}
})
}
},
}
export default {
name: "finishDetail",
components: {AiBack},
data() {
return {
id: null,
detail: {},
}
},
onLoad(opt) {
this.id = opt.id
this.$dict.load("workTaskRole").then(_ => this.getDetail())
},
methods: {
getDetail() {
this.$http.post("/app/appworktaskuserinfo/queryDetailById", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.detail = res.data;
}
})
}
},
}
</script>
<style lang="scss" scoped>
.finish-detail {
min-height: 100%;
background-color: #F5F5F5;
.finish-detail {
min-height: 100%;
background-color: #F5F5F5;
.card {
box-sizing: border-box;
padding: 18px 32px;
background-color: #FFFFFF;
margin-bottom: 8px;
.card {
box-sizing: border-box;
padding: 18px 32px;
background-color: #FFFFFF;
margin-bottom: 8px;
.left {
display: flex;
align-items: center;
.left {
display: flex;
align-items: center;
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
font-size: 28px;
font-weight: 500;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
background: #2266FF;
}
.info {
display: flex;
flex-direction: column;
margin-left: 16px;
.name {
font-size: 32px;
font-weight: 400;
color: #333333;
line-height: 44px;
}
.status {
font-size: 24px;
font-weight: 400;
color: #999999;
line-height: 34px;
}
}
}
.btn {
.avatar {
width: 80px;
height: 80px;
border-radius: 50%;
font-size: 28px;
font-weight: 500;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
font-weight: 400;
color: #1365DD;
& > img {
width: 40px;
height: 40px;
}
background: #2266FF;
}
.label {
font-size: 30px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999999;
line-height: 42px;
}
.info {
display: flex;
flex-direction: column;
margin-left: 16px;
.value {
font-size: 30px;
font-weight: 400;
color: #343D65;
line-height: 48px;
}
em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
::v-deep .u-collapse {
position: relative;
&:after {
content: "";
width: 718px;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
position: absolute;
left: 0;
bottom: 0;
}
.u-collapse-head {
padding: 40px 0;
}
.u-collapse-content {
.name {
font-size: 32px;
font-weight: 400;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
line-height: 44px;
}
.status {
font-size: 24px;
font-weight: 400;
color: #999999;
line-height: 34px;
}
}
}
.btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 28px;
font-weight: 400;
color: #1365DD;
& > img {
width: 40px;
height: 40px;
}
}
.label {
font-size: 30px;
font-family: PingFangSC-Regular, PingFang SC;
color: #999999;
line-height: 42px;
}
.value {
font-size: 30px;
font-weight: 400;
color: #343D65;
line-height: 48px;
}
em {
font-style: normal;
font-size: 28px;
color: #1365DD;
}
::v-deep .u-collapse {
position: relative;
&:after {
content: "";
width: 718px;
height: 1px;
background-color: rgba(216, 221, 230, 0.5);
position: absolute;
left: 0;
bottom: 0;
}
.u-collapse-head {
padding: 40px 0;
}
.u-collapse-content {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
}
}
}
}
</style>

View File

@@ -3,58 +3,58 @@
<div class="card">
<header>
<em>[子任务]</em>
{{detail.taskTitle}}
{{ detail.taskTitle }}
</header>
<u-gap height="16"></u-gap>
<u-row>
<span>任务类型</span>
<span>{{$dict.getLabel("workTaskType",detail.type)}}</span>
<span>{{ $dict.getLabel("workTaskType", detail.type) }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>开始时间</span>
<span>{{detail.createTime}}</span>
<span>{{ detail.createTime }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>截止时间</span>
<span>{{detail.lastTime}}</span>
<span>{{ detail.lastTime }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>剩余时间</span>
<span style="color:#1365DD">{{detail.overTimeStatus}}</span>
<span style="color:#1365DD">{{ detail.overTimeStatus }}</span>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<span>任务状态</span>
<span style="color:#1365DD">{{$dict.getLabel("workTaskDoStatus",detail.status)}}</span>
<span style="color:#1365DD">{{ $dict.getLabel("workTaskDoStatus", detail.status) }}</span>
</u-row>
<u-gap height="16"></u-gap>
</div>
<div class="card" style="padding-top: 0">
<div class="label">任务说明</div>
<u-read-more close-text="展开" color="#999999" show-height="300">
<span>{{detail.taskDescription}}</span>
<span>{{ detail.taskDescription }}</span>
</u-read-more>
</div>
<div class="card">
<div class="label">当前进度</div>
<text>已完成{{detail.percent}}%</text>
<text>已完成{{ detail.percent }}%</text>
<div class="progress">
<div class="pro-active" :style="{width:detail.percent + '%'}"></div>
</div>
</div>
<div class="card" style="padding-top: 0" v-if="detail.userInfoList && detail.userInfoList.length">
<div class="label title">任务完成进度(<i>{{count}}</i>/{{detail.userInfoList.length}})</div>
<div class="label title">任务完成进度(<i>{{ count }}</i>/{{ detail.userInfoList.length }})</div>
<u-row justify="between" v-for="(item,index) in detail.userInfoList" :key="index" @click="finishDetail(item)">
<div>{{item.userName && item.userName.substr(-2)}}</div>
<div>{{ item.userName && item.userName.substr(-2) }}</div>
<u-row justify="between" class="item">
<text class="name">{{item.userName}}</text>
<text class="name">{{ item.userName }}</text>
<label class="right">
<span>已完成{{item.percent}}%</span>
<span>已完成{{ item.percent }}%</span>
<label class="arrow"></label>
</label>
</u-row>
@@ -75,267 +75,267 @@
</template>
<script>
import AiBack from "../../../components/AiBack";
import AiBack from "../../../components/AiBack";
export default {
name: "subDetail",
components: {AiBack},
data() {
return {
id: null,
detail: {},
show: false,
content: "",
idx: null,
count: 0,
}
export default {
name: "subDetail",
components: {AiBack},
data() {
return {
id: null,
detail: {},
show: false,
content: "",
idx: null,
count: 0,
}
},
onLoad(opt) {
this.id = opt.id
this.$dict.load("workTaskType", "workTaskDoStatus").then(_ => this.getDetail())
},
methods: {
finishDetail({id}) {
uni.navigateTo({
url: "/pages/workTask/components/finishDetail?id=" + id
})
},
onLoad(opt) {
this.id = opt.id
this.$dict.load("workTaskType", "workTaskDoStatus").then(_ => this.getDetail())
confirm() {
this.$http.post(this.idx == 0 ? "/app/appworktaskinfo/stopOrFinish" : "/app/appworktaskuserinfo/sendMesage", null, {
params: {
id: this.id,
status: this.idx == 0 ? 2 : null
}
}).then(res => {
if (res.code == 0) {
this.$u.toast(this.idx == 0 ? "关闭成功" : "催办成功")
this.getDetail()
}
})
},
methods: {
finishDetail({id}){
uni.navigateTo({
url:"/pages/workTask/components/finishDetail?id=" + id
})
},
confirm() {
this.$http.post(this.idx == 0 ? "/app/appworktaskinfo/stopOrFinish" : "/app/appworktaskuserinfo/sendMesage", null, {
params: {
id: this.id,
status: this.idx == 0 ? 2 : null
}
}).then(res => {
if (res.code == 0) {
this.$u.toast(this.idx == 0 ? "关闭成功" : "催办成功")
this.getDetail()
}
})
},
getDetail() {
this.$http.post("/app/appworktaskinfo/queryDetailById", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.detail = res.data
this.count = res.data?.userInfoList?.reduce((pre,cur)=>{
return pre + (cur.percent==100 ? 1 : 0)
},0)
}
})
}
},
}
getDetail() {
this.$http.post("/app/appworktaskinfo/queryDetailById", null, {
params: {
id: this.id
}
}).then(res => {
if (res && res.data) {
this.detail = res.data
this.count = res.data?.userInfoList?.reduce((pre, cur) => {
return pre + (cur.percent == 100 ? 1 : 0)
}, 0)
}
})
}
},
}
</script>
<style lang="scss" scoped>
.sub-detail {
min-height: 100%;
overflow-x: hidden;
background-color: #F5F5F5;
padding-bottom: 140px;
.sub-detail {
min-height: 100%;
overflow-x: hidden;
background-color: #F5F5F5;
padding-bottom: 140px;
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
.card {
background-color: #FFFFFF;
margin-bottom: 8px;
box-sizing: border-box;
padding: 16px 32px;
header {
header {
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
& > em {
font-style: normal;
color: #1365DD;
font-size: 40px;
font-weight: 600;
color: #333333;
line-height: 64px;
letter-spacing: 1px;
& > em {
font-style: normal;
color: #1365DD;
font-size: 40px;
}
}
.u-row {
flex: 1;
margin-left: 16px;
position: relative;
.item {
height: 112px;
&:after {
width: 622px;
height: 2px;
content: "";
position: absolute;
left: 0;
bottom: 0;
background-color: rgba(216, 221, 230, 0.5);
}
}
& > div {
width: 80px;
height: 80px;
background-color: #4E8EEE;
border-radius: 50%;
text-align: center;
font-size: 28px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
.name {
font-size: 32px;
font-weight: 400;
color: #333333;
}
.title {
width: 490px;
height: 112px;
display: flex;
align-items: center;
font-size: 32px;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.right {
font-size: 28px;
color: #1365DD;
display: flex;
align-items: center;
.arrow {
width: 16px;
height: 16px;
border-top: 3px solid #CCCCCC;
border-right: 3px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
& > text {
width: 100%;
display: inline-block;
font-size: 30px;
color: #649EFD;
text-align: center;
}
.progress {
height: 12px;
background: #F2F4FC;
border-radius: 12px;
position: relative;
margin: 16px 0 80px 0;
.pro-active {
height: 12px;
background: #639EFD;
border-radius: 12px;
position: absolute;
left: 0;
top: 0;
}
}
& > span {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
& > i {
font-style: normal;
font-size: 32px;
color: #2EA222;
}
}
.title {
font-weight: bold;
height: 96px;
border-bottom: 1px solid rgba(216, 221, 230, 0.5);
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
.u-row {
flex: 1;
margin-left: 16px;
position: relative;
img {
width: 48px;
height: 48px;
margin-right: 8px;
.item {
height: 112px;
&:after {
width: 622px;
height: 2px;
content: "";
position: absolute;
left: 0;
bottom: 0;
background-color: rgba(216, 221, 230, 0.5);
}
}
& > div:first-child, div:last-child {
width: 50%;
height: 100%;
& > div {
width: 80px;
height: 80px;
background-color: #4E8EEE;
border-radius: 50%;
text-align: center;
font-size: 28px;
font-weight: bold;
color: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
}
& > div:first-child {
color: #666666;
& > span:first-child {
font-size: 30px;
color: #999999;;
line-height: 48px;
}
& > div:last-child {
background: #1365DD;
& > span:last-child {
font-size: 30px;
color: #343D65;
margin-left: 16px;
line-height: 48px;
}
.name {
font-size: 32px;
font-weight: 400;
color: #333333;
}
.title {
width: 490px;
height: 112px;
display: flex;
align-items: center;
font-size: 32px;
color: #333333;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.right {
font-size: 28px;
color: #1365DD;
display: flex;
align-items: center;
.arrow {
width: 16px;
height: 16px;
border-top: 3px solid #CCCCCC;
border-right: 3px solid #CCCCCC;
transform: rotate(45deg);
}
}
}
& > text {
width: 100%;
display: inline-block;
font-size: 30px;
color: #649EFD;
text-align: center;
}
.progress {
height: 12px;
background: #F2F4FC;
border-radius: 12px;
position: relative;
margin: 16px 0 80px 0;
.pro-active {
height: 12px;
background: #639EFD;
border-radius: 12px;
position: absolute;
left: 0;
top: 0;
}
}
& > span {
font-size: 32px;
color: #333333;
line-height: 48px;
letter-spacing: 1px;
display: inline-block;
}
.label {
height: 80px;
font-size: 32px;
color: #333333;
display: flex;
align-items: center;
margin-bottom: 16px;
& > em {
font-style: normal;
font-size: 32px;
color: #1365DD;
}
& > i {
font-style: normal;
font-size: 32px;
color: #2EA222;
}
}
.title {
font-weight: bold;
height: 96px;
border-bottom: 1px solid rgba(216, 221, 230, 0.5);
}
}
.footer {
height: 112px;
width: 100%;
position: fixed;
left: 0;
bottom: 0;
background: #FFFFFF;
display: flex;
align-items: center;
justify-content: center;
font-size: 36px;
color: #FFFFFF;
img {
width: 48px;
height: 48px;
margin-right: 8px;
}
& > div:first-child, div:last-child {
width: 50%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
& > div:first-child {
color: #666666;
}
& > div:last-child {
background: #1365DD;
}
}
}
</style>

View File

@@ -5,24 +5,24 @@
</ai-top-fixed>
<div class="list" v-if="list.length">
<div class="card" v-for="(item,index) in list" :key="index" @click="handleClick(item)">
<header>{{item.taskTitle}}</header>
<header>{{ item.taskTitle }}</header>
<u-gap height="24"></u-gap>
<u-row>
<text>任务类型</text>
<text>{{$dict.getLabel("workTaskType",item.type)}}</text>
<text>{{ $dict.getLabel("workTaskType", item.type) }}</text>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<text>截止时间</text>
<text>{{item.lastTime}}</text>
<text>{{ item.lastTime }}</text>
</u-row>
<u-gap height="8"></u-gap>
<u-row>
<text>剩余时间</text>
<text :style="{color:item.isOverTime==1?'#FF4466':'#1365DD'}">{{item.overTimeStatus}}</text>
<text :style="{color:item.isOverTime==1?'#FF4466':'#1365DD'}">{{ item.overTimeStatus }}</text>
</u-row>
<u-gap height="24"></u-gap>
<span>已完成{{item.percent}}%</span>
<span>已完成{{ item.percent }}%</span>
<u-gap height="16"></u-gap>
<div class="progress">
<div class="active" :style="{width: item.percent + '%'}"></div>
@@ -37,186 +37,186 @@
</template>
<script>
import AiTopFixed from "../../components/AiTopFixed";
import AiAdd from "../../components/AiAdd";
import AiEmpty from "../../components/AiEmpty";
import AiTopFixed from "../../components/AiTopFixed";
import AiAdd from "../../components/AiAdd";
import AiEmpty from "../../components/AiEmpty";
export default {
name: "workTask",
components: {AiTopFixed, AiAdd, AiEmpty},
data() {
export default {
name: "workTask",
components: {AiTopFixed, AiAdd, AiEmpty},
data() {
return {
index: 0,
current: 1,
list: [],
status: "加载更多",
userSelect: false,
}
},
computed: {
tabs() {
return [
{name: "我执行的"},
{name: "我完成的"},
{name: "我发起的"},
{name: "我督办的"},
{name: "抄送我的"},
]
},
},
onLoad() {
this.$dict.load("workTaskType")
},
methods: {
tag(status) {
return {
index: 0,
current: 1,
list: [],
status: "加载更多",
userSelect: false,
}
"0": "common/1jxz.png",
"1": "common/1ywc.png",
"2": "common/1ygb.png"
}[status]
},
computed: {
tabs() {
return [
{name: "我执行的"},
{name: "我完成的"},
{name: "我发起的"},
{name: "我督办的"},
{name: "抄送我的"},
]
},
},
onLoad() {
this.$dict.load("workTaskType")
},
methods: {
tag(status) {
return {
"0": "common/1jxz.png",
"1": "common/1ywc.png",
"2": "common/1ygb.png"
}[status]
},
handleClick(item) {
uni.navigateTo({
url: "/pages/workTask/components/detail?id=" + item.id + "&taskCode=" + item.taskCode + "&isMine=" + this.index
})
},
add() {
uni.navigateTo({
url: "/pages/workTask/components/create"
})
},
change(e) {
this.index = e
this.current = 1
this.getList()
},
map(index) {
return {
"0": {
taskRole: 1,
status: 0,
},
"1": {
taskRole: 1,
status: 1,
},
"2": {
taskRole: 0,
},
"3": {
taskRole: 2,
},
"4": {
taskRole: 3,
}
}[index]
},
getList() {
this.$http.post("/app/appworktaskinfo/list", null, {
params: {
...this.map(this.index),
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
}
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
onShow() {
uni.pageScrollTo({
duration: 0,
scrollTop: 0
handleClick(item) {
uni.navigateTo({
url: "/pages/workTask/components/detail?id=" + item.id + "&taskCode=" + item.taskCode + "&isMine=" + this.index
})
},
add() {
uni.navigateTo({
url: "/pages/workTask/components/create"
})
},
change(e) {
this.index = e
this.current = 1
this.getList()
},
map(index) {
return {
"0": {
taskRole: 1,
status: 0,
},
"1": {
taskRole: 1,
status: 1,
},
"2": {
taskRole: 0,
},
"3": {
taskRole: 2,
},
"4": {
taskRole: 3,
}
}[index]
},
getList() {
this.$http.post("/app/appworktaskinfo/list", null, {
params: {
...this.map(this.index),
size: 10,
current: this.current
}
}).then(res => {
if (res && res.data) {
if (this.current > 1 && this.current > res.data.pages) {
this.status = "已经到底啦"
}
this.list = this.current > 1 ? [...this.list, ...res.data.records] : res.data.records
}
})
}
},
onReachBottom() {
this.current = this.current + 1;
this.getList()
},
onShow() {
uni.pageScrollTo({
duration: 0,
scrollTop: 0
})
this.current = 1
this.getList()
}
}
</script>
<style lang="scss" scoped>
.work-task {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 32px;
.work-task {
min-height: 100%;
background-color: #F5F5F5;
padding-bottom: 32px;
::v-deep .content {
padding: 0;
}
::v-deep .content {
padding: 0;
}
.list {
.list {
box-sizing: border-box;
padding: 32px 32px 0 32px;
.card {
background: #FFFFFF;
border-radius: 8px;
box-sizing: border-box;
padding: 32px 32px 0 32px;
padding: 32px;
position: relative;
margin-bottom: 32px;
.card {
background: #FFFFFF;
border-radius: 8px;
box-sizing: border-box;
padding: 32px;
& > header {
font-size: 32px;
font-weight: 600;
color: #333333;
}
& > .u-row {
text {
font-size: 30px;
color: #999999;
line-height: 42px;
}
}
& > span {
font-size: 26px;
color: #649EFD;
}
.progress {
width: 100%;
height: 4px;
background: #F0F1F2;
border-radius: 2px;
position: relative;
margin-bottom: 32px;
& > header {
font-size: 32px;
font-weight: 600;
color: #333333;
}
& > .u-row {
text {
font-size: 30px;
color: #999999;
line-height: 42px;
}
}
& > span {
font-size: 26px;
color: #649EFD;
}
.progress {
width: 100%;
height: 4px;
background: #F0F1F2;
border-radius: 2px;
position: relative;
.active {
position: absolute;
left: 0;
top: 0;
height: 4px;
background: #639EFD;
border-radius: 2px;
}
}
& > img {
width: 112px;
height: 112px;
.active {
position: absolute;
left: 0;
top: 0;
right: 0;
height: 4px;
background: #639EFD;
border-radius: 2px;
}
}
& > img {
width: 112px;
height: 112px;
position: absolute;
top: 0;
right: 0;
}
}
}
}
</style>

View File

@@ -9,7 +9,8 @@
<span class="icon">*</span>
<span> 审批意见:</span>
</span>
<textarea :maxlength="150" placeholder="请输入审批意见" v-model="opinion" class="textarea" clearable="false"> </textarea>
<textarea :maxlength="150" placeholder="请输入审批意见" v-model="opinion" class="textarea"
clearable="false"> </textarea>
<div class="clearn" @click="clearn">清空内容</div>
<div class="msg_length">
<span class="font">{{ opinion.length }}</span>
@@ -26,7 +27,8 @@
<span class="icon" v-if="item.mustFill == 1">*</span>
<span> {{ item.fieldName }}:</span>
</span>
<textarea :maxlength="150" placeholder="请输入审批意见" v-model="item.fieldValue" class="textarea" clearable="false"> </textarea>
<textarea :maxlength="150" placeholder="请输入审批意见" v-model="item.fieldValue" class="textarea"
clearable="false"> </textarea>
<div class="clearn" @click="clearn">清空内容</div>
<div class="msg_length">
<span class="font">{{ item.fieldValue.length }}</span>
@@ -42,7 +44,8 @@
<span> {{ item.fieldName }}:</span>
</div>
<div class="left">
<u-input type="text" @click="timeSelect(index)" class="right" placeholder="请选择" disabled v-model="item.fieldValue"></u-input>
<u-input type="text" @click="timeSelect(index)" class="right" placeholder="请选择" disabled
v-model="item.fieldValue"></u-input>
</div>
</div>
</div>
@@ -56,7 +59,8 @@
<!-- 单个文件最大10MB.zip.rar.doc.docx.xls.xlsx.ppt.pptx.pdf.txt.jpg.png格式 -->
<div class="upload">
<div class="info">
<ai-uploader multiple @list="(v) => (annex = v)" :limit="9" action="/admin/file/add2" type="file" placeholder="添加文件" preview />
<ai-uploader multiple @list="(v) => (annex = v)" :limit="9" action="/admin/file/add2" type="file"
placeholder="添加文件" preview/>
</div>
</div>
</div>
@@ -67,7 +71,7 @@
<text class="img_text">(最多9张)</text>
<div class="upload">
<div class="info">
<ai-uploader multiple @list="(v) => (picture = v)" :limit="9" :size="2097152" preview />
<ai-uploader multiple @list="(v) => (picture = v)" :limit="9" :size="2097152" preview/>
</div>
</div>
</div>
@@ -76,8 +80,8 @@
<div class="btn" @click="btn">确定</div>
<!-- 日期选择器 -->
<u-calendar v-model="show" :mode="mode" @change="calendar" />
<back />
<u-calendar v-model="show" :mode="mode" @change="calendar"/>
<back/>
</div>
</template>
@@ -119,9 +123,11 @@ export default {
// 监听
watch: {},
// 实例创建后
onShow() {},
onShow() {
},
// 实例渲染后
mounted() {},
mounted() {
},
// 方法
methods: {
timeSelect(index) {
@@ -139,23 +145,23 @@ export default {
},
getList() {
this.$http
.post(`/app/approv-alapply-info/approval-popup?type=${this.type}&id=${this.objid}`)
.then((res) => {
if (res.code == 0) {
res.data.fieldInfos.map((item) => {
if (item.fieldDataType == 1) {
item.fieldValue = ''
}
.post(`/app/approv-alapply-info/approval-popup?type=${this.type}&id=${this.objid}`)
.then((res) => {
if (res.code == 0) {
res.data.fieldInfos.map((item) => {
if (item.fieldDataType == 1) {
item.fieldValue = ''
}
if (item.fieldType == 3) {
this.list.push(item)
}
})
}
})
.catch(() => {
// this.$u.toast(err)
})
if (item.fieldType == 3) {
this.list.push(item)
}
})
}
})
.catch(() => {
// this.$u.toast(err)
})
},
// 提交确定
btn() {
@@ -169,15 +175,15 @@ export default {
// var isConfirm = true
if (
this.list.some((item) => {
if (item.mustFill == 1 && !item.fieldValue) {
uni.showToast({
title: item.fieldName + '为必填',
icon: 'none',
})
return true
}
})
this.list.some((item) => {
if (item.mustFill == 1 && !item.fieldValue) {
uni.showToast({
title: item.fieldName + '为必填',
icon: 'none',
})
return true
}
})
)
return
@@ -208,27 +214,27 @@ export default {
})
this.$http
.post(`/app/approv-alapply-info/approval`, params)
.then((res) => {
if (res.code == 0) {
uni.navigateTo({
url: `/pages/workonline/truemsg?flag=1`,
})
this.getList()
}
})
.catch((e) => {
.post(`/app/approv-alapply-info/approval`, params)
.then((res) => {
if (res.code == 0) {
uni.navigateTo({
url: `/pages/workonline/truemsg?flag=0`,
url: `/pages/workonline/truemsg?flag=1`,
})
// this.$u.toast(err)
uni.showToast({
title: e,
icon: 'none',
})
// this.$u.toast(err || '网络异常')
this.getList()
}
})
.catch((e) => {
uni.navigateTo({
url: `/pages/workonline/truemsg?flag=0`,
})
// this.$u.toast(err)
uni.showToast({
title: e,
icon: 'none',
})
// this.$u.toast(err || '网络异常')
this.getList()
})
},
data(e) {
this.files.push(e)

View File

@@ -6,7 +6,8 @@
<p>审批通过:</p>
<div class="save">
<div style="display:inline">[{{ this.list.tableInfo.tableName }}]已签署完成,</div>
<ai-image preview :file="list.pdfFile" style="display:inline-block;margin-left:4px ;"><span class="clicksave">点击查看和保存</span> </ai-image>
<ai-image preview :file="list.pdfFile" style="display:inline-block;margin-left:4px ;"><span class="clicksave">点击查看和保存</span>
</ai-image>
</div>
</div>
@@ -19,7 +20,8 @@
<div class="people_msg">
<!-- 圆形头像 -->
<div class="avatar">
<span v-if="list.createUserAvatar"><img :src="list.createUserAvatar" alt="" style="width: 100%;height: 100%;border-radius:50%"/></span>
<span v-if="list.createUserAvatar"><img :src="list.createUserAvatar" alt=""
style="width: 100%;height: 100%;border-radius:50%"/></span>
<span v-else> {{ $formatName(list.createUserName) }}</span>
</div>
@@ -40,7 +42,7 @@
<!-- 已通过 -->
<div class="people_status_agree" v-if="list.approvalStatus == 1">
<img src="./components/people_status_agree.png" alt="" />
<img src="./components/people_status_agree.png" alt=""/>
</div>
<!-- 被驳回 -->
@@ -72,7 +74,7 @@
<div class="item_info">
<span class="annexs">附件资料</span>
<div class="img_text" v-for="(item, indexs) in list.annexs" :key="indexs">
<ai-image :src="item.annexFile.url" preview />
<ai-image :src="item.annexFile.url" preview/>
<span class="text">{{ item.annexName }}</span>
</div>
</div>
@@ -81,23 +83,27 @@
</div>
<!-- tabs栏 -->
<u-tabs class="tabs" :list="list_tabs" height="96" active-color="#1365dd" inactive-color="#999" bar-width="374" font-size="30" :is-scroll="false" :current="current" @change="change"></u-tabs>
<u-tabs class="tabs" :list="list_tabs" height="96" active-color="#1365dd" inactive-color="#999" bar-width="374"
font-size="30" :is-scroll="false" :current="current" @change="change"></u-tabs>
<!-- 表单申请的折叠窗 -->
<div style="background-color:#fff">
<div v-if="current == 0" class="collapse">
<u-collapse event-type="close" :arrow="true" :accordion="true">
<u-collapse-item v-if="item.length > 0" v-for="(item, index) in inforlist" :title="item[0].groupName" :key="index">
<u-collapse-item v-if="item.length > 0" v-for="(item, index) in inforlist" :title="item[0].groupName"
:key="index">
<div v-for="(items, indexs) in item" :key="indexs">
<div class="item_msg">
<!-- -->
<span class="msg_lef">{{ items.fieldName }}</span>
<!-- -->
<!-- 字典值 items.dictionaryCode -->
<span class="msg_lright" v-if="items.fieldDataType != 5">{{ $dict.getLabel(items.dictionaryCode, items.fieldValue) }}</span>
<span class="msg_lright" v-if="items.fieldDataType != 5">{{
$dict.getLabel(items.dictionaryCode, items.fieldValue)
}}</span>
<span class="msg_lright" v-else>
<span v-for="(itemL, indexL) in items.fieldValue" :key="indexL"
>{{ $dict.getLabel(items.dictionaryCode, itemL) }}
>{{ $dict.getLabel(items.dictionaryCode, itemL) }}
<span v-if="indexL < items.fieldValue.length - 1">,</span>
</span>
</span>
@@ -120,12 +126,13 @@
<div class="item-left-ava-icon">
<!-- 头像 -->
<div class="avatar" v-if="item.userName">
<span v-if="item.stepAvatar"><img :src="item.stepAvatar" alt="" style="width: 100%;height: 100%;border-radius:50%"/></span>
<span v-if="item.stepAvatar"><img :src="item.stepAvatar" alt=""
style="width: 100%;height: 100%;border-radius:50%"/></span>
<span v-else> {{ $formatName(item.userName) }}</span>
</div>
<div class="avatar" v-else-if="item.title == '抄送'">
<img src="./components/Profile_Picture.png" alt="" />
<img src="./components/Profile_Picture.png" alt=""/>
</div>
<div class="avatar" v-else>
@@ -134,14 +141,14 @@
<!-- 图标 发起 抄送和审批通过图标 -->
<div class="icon-yes" v-if="item.stepType == 1 || item.stepType == 0 || item.stepType == 3">
<img src="./components/agree.png" alt="" />
<img src="./components/agree.png" alt=""/>
</div>
<!-- 审批拒绝图标 -->
<div class="" v-else-if="item.stepType == 2"></div>
<div class="icon-no" v-else>
<img src="./components/clearn.png" />
<img src="./components/clearn.png"/>
</div>
</div>
@@ -191,7 +198,8 @@
<div class="examine_docx1">
<!-- 图片 -->
<div class="examine_img" v-if="item.pictureFiles && item.pictureFiles.length > 0" style="">
<ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" style="width: 65px;height: 75px;float: left;margin-left: 6px;margin-bottom: 4px;overflow: hidden;" />
<ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id"
style="width: 65px;height: 75px;float: left;margin-left: 6px;margin-bottom: 4px;overflow: hidden;"/>
</div>
<!-- 附件资料 -->
@@ -214,7 +222,8 @@
<div class="examine_docx1">
<!-- 图片 -->
<div class="examine_img" v-if="item.pictureFiles && item.pictureFiles.length > 0" style="">
<ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id" style="width: 69px;height: 75px;float: left;margin-left: 4px;margin-bottom: 4px;overflow: hidden;" />
<ai-image preview :src="pic.url" v-for="pic in item.pictureFiles" :key="pic.id"
style="width: 69px;height: 75px;float: left;margin-left: 4px;margin-bottom: 4px;overflow: hidden;"/>
</div>
<!-- 附件资料 -->
@@ -244,18 +253,18 @@
<div class="agree" @click="agree(1)">同意</div>
</div>
<back />
<back/>
</div>
</template>
<script>
import back from '../../components/AiBack'
import AiImage from '../../components/AiImage'
import { mapActions } from 'vuex'
import {mapActions} from 'vuex'
export default {
name: 'workonlineDetail',
components: { AiImage, back },
components: {AiImage, back},
computed: {
canApproval() {
return this.listType == 0
@@ -345,20 +354,20 @@ export default {
},
agree(type) {
this.$http
.post(`/app/approv-alapply-info/approval-popup?type=${type}&id=${this.objid}`)
.then((res) => {
if (res.code == 0) {
uni.navigateTo({
url: `/pages/workonline/approvalopinion?id=${this.objid}&type=${type}`,
})
}
})
.catch((e) => {
uni.showToast({
title: e,
icon: 'none',
.post(`/app/approv-alapply-info/approval-popup?type=${type}&id=${this.objid}`)
.then((res) => {
if (res.code == 0) {
uni.navigateTo({
url: `/pages/workonline/approvalopinion?id=${this.objid}&type=${type}`,
})
}
})
.catch((e) => {
uni.showToast({
title: e,
icon: 'none',
})
})
},
},
}

View File

@@ -1,8 +1,10 @@
<template>
<div class="closemsg">
<img :src="imgSrc" alt="" />
<img :src="imgSrc" alt=""/>
<text>{{ text }}</text>
<u-button type="primary" :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" @click="goBack">{{ btnText }} </u-button>
<u-button type="primary" :custom-style="{ width: '100%', borderRadius: '4px', marginTop: '48px' }" @click="goBack">
{{ btnText }}
</u-button>
<back></back>
</div>
</template>
@@ -12,7 +14,7 @@ import back from '../../components/AiBack'
export default {
name: 'CloseMsg',
components: { back },
components: {back},
data() {
return {
flag: true,
@@ -38,7 +40,7 @@ export default {
return this.flag ? '确定' : '我知道了'
},
imgSrc() {
return this.flag ? this.$cdn+'other/' + 'kztcg.png' : this.$cdn+'other/' + 'kztsb.png'
return this.flag ? this.$cdn + 'other/' + 'kztcg.png' : this.$cdn + 'other/' + 'kztsb.png'
},
},
}

View File

@@ -2,7 +2,8 @@
<div class="workonline">
<!-- 顶部搜索 -->
<div class="search">
<u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="search" @search="search"></u-search>
<u-search class="serach_content" placeholder="请输入标题" :show-action="false" v-model="keyword" @clear="search"
@search="search"></u-search>
</div>
<u-tabs :list="list" :is-scroll="false" :current="currentType" @change="change"></u-tabs>
@@ -22,10 +23,14 @@
<span class="item_info">审批进度</span>
<!-- 申请类型 ing -->
<span class="business_status" v-if="item.approvalStatus == 0"> {{ $dict.getLabel('listApprovalStatusHb', item.approvalStatus) }}</span>
<span class="business_status" v-if="item.approvalStatus == 0"> {{
$dict.getLabel('listApprovalStatusHb', item.approvalStatus)
}}</span>
<!-- end -->
<span class="business_status_blue" v-if="item.approvalStatus == 1"> {{ $dict.getLabel('listApprovalStatusHb', item.approvalStatus) }}</span>
<span class="business_status_blue" v-if="item.approvalStatus == 1"> {{
$dict.getLabel('listApprovalStatusHb', item.approvalStatus)
}}</span>
<!-- false -->
<span class="business_status_gray" v-if="item.approvalStatus == 2">
@@ -49,11 +54,11 @@
<span class="icon">
<!-- ing -->
<img src="./components/ing.png" alt="" v-if="item.approvalStatus == 0" />
<img src="./components/ing.png" alt="" v-if="item.approvalStatus == 0"/>
<!-- end -->
<img src="./components/end.png" alt="" v-if="item.approvalStatus == 1" />
<img src="./components/end.png" alt="" v-if="item.approvalStatus == 1"/>
<!-- false -->
<img src="./components/reject.png" alt="" v-if="item.approvalStatus == 2" />
<img src="./components/reject.png" alt="" v-if="item.approvalStatus == 2"/>
</span>
</div>
</div>
@@ -69,10 +74,10 @@ export default {
data() {
return {
list: [
{ name: '待我审批', type: 0 },
{ name: '我已审批', type: 1 },
{ name: '抄送我的', type: 3 },
{ name: '超时督办', type: 4 },
{name: '待我审批', type: 0},
{name: '我已审批', type: 1},
{name: '抄送我的', type: 3},
{name: '超时督办', type: 4},
],
currentType: 0, // 0待我审批 1已审批 2抄送我的 3超时
keyword: '',
@@ -95,7 +100,8 @@ export default {
})
},
// 实例渲染后
mounted() {},
mounted() {
},
// 方法
methods: {
getList() {