12 changed files with 708 additions and 147 deletions
After Width: | Height: | Size: 20 KiB |
@ -0,0 +1,10 @@ |
|||||
|
class Base { |
||||
|
constructor() { |
||||
|
this.a = '3' |
||||
|
this.init() |
||||
|
} |
||||
|
init() { |
||||
|
console.log('1') |
||||
|
} |
||||
|
} |
||||
|
export default Base |
@ -0,0 +1,68 @@ |
|||||
|
<template> |
||||
|
<div class="screen-loading"> |
||||
|
<svg width="50px" |
||||
|
height="50px"> |
||||
|
<circle cx="25" |
||||
|
cy="25" |
||||
|
r="20" |
||||
|
fill="transparent" |
||||
|
stroke-width="3" |
||||
|
stroke-dasharray="31.415, 31.415" |
||||
|
stroke="#29cdff" |
||||
|
stroke-linecap="round"> |
||||
|
<animateTransform attributeName="transform" |
||||
|
type="rotate" |
||||
|
values="0, 25 25;360, 25 25" |
||||
|
dur="1.5s" |
||||
|
repeatCount="indefinite" /> |
||||
|
<animate attributeName="stroke" |
||||
|
values="#02bcfe;#3be6cb;#02bcfe" |
||||
|
dur="3s" |
||||
|
repeatCount="indefinite" /> |
||||
|
</circle> |
||||
|
|
||||
|
<circle cx="25" |
||||
|
cy="25" |
||||
|
r="10" |
||||
|
fill="transparent" |
||||
|
stroke-width="3" |
||||
|
stroke-dasharray="15.7, 15.7" |
||||
|
stroke="#29cdff" |
||||
|
stroke-linecap="round"> |
||||
|
<animateTransform attributeName="transform" |
||||
|
type="rotate" |
||||
|
values="360, 25 25;0, 25 25" |
||||
|
dur="1.5s" |
||||
|
repeatCount="indefinite" /> |
||||
|
<animate attributeName="stroke" |
||||
|
values="#3be6cb;#02bcfe;#3be6cb" |
||||
|
dur="3s" |
||||
|
repeatCount="indefinite" /> |
||||
|
</circle> |
||||
|
</svg> |
||||
|
<div class="loading-tip"> |
||||
|
<slot></slot> |
||||
|
</div> |
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
export default { |
||||
|
name: 'DvLoading' |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.screen-loading { |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
display: flex; |
||||
|
flex-direction: column; |
||||
|
justify-content: center; |
||||
|
align-items: center; |
||||
|
.loading-tip { |
||||
|
font-size: 14px; |
||||
|
color: #fff; |
||||
|
} |
||||
|
} |
||||
|
</style> |
@ -0,0 +1,395 @@ |
|||||
|
<template> |
||||
|
<div v-if="pageLoading" class="resi-container"> |
||||
|
<el-card class="resi-card-table"> |
||||
|
<div class="resi-row-btn"> |
||||
|
<el-form :inline="true" :model="form" class="demo-form-inline"> |
||||
|
<el-form-item label="需求分类"> |
||||
|
<el-input v-model="form.categoryName" placeholder="需求分类" clearable=""></el-input> |
||||
|
</el-form-item> |
||||
|
<el-form-item> |
||||
|
<el-button type="primary" @click="handleSearch">查询</el-button> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
</div> |
||||
|
<div class="resi-row-btn"> |
||||
|
<el-button type="success" @click="handleSearch">新增分类</el-button> |
||||
|
</div> |
||||
|
|
||||
|
<el-table |
||||
|
:data="tableData" |
||||
|
row-key="id" |
||||
|
v-loading="tableLoading" |
||||
|
border |
||||
|
max-height="800" |
||||
|
style="width: 100%" |
||||
|
class="resi-table" |
||||
|
> |
||||
|
<el-table-column label="序号" type="index" align="center" width="50"> |
||||
|
</el-table-column> |
||||
|
<el-table-column |
||||
|
v-for="item in tableHeader" |
||||
|
:key="item.columnName" |
||||
|
:prop="item.columnName" |
||||
|
:label="item.label" |
||||
|
align="center" |
||||
|
> |
||||
|
<template slot-scope="scope"> |
||||
|
<span>{{ handleFilterSpan(scope.row, item) }}</span> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
<el-table-column label="操作" align="center" width="200"> |
||||
|
<template slot-scope="scope"> |
||||
|
<el-button |
||||
|
@click="handleLook(scope.row)" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
class="btn-color-look" |
||||
|
>{{(scope.row.usableFlag&&'禁用') || '启用'}}</el-button |
||||
|
> |
||||
|
<el-button |
||||
|
@click="handleEdit(scope.row)" |
||||
|
type="text" |
||||
|
size="small" |
||||
|
class="btn-color-edit" |
||||
|
>编辑</el-button |
||||
|
> |
||||
|
</template> |
||||
|
</el-table-column> |
||||
|
</el-table> |
||||
|
<div> |
||||
|
<el-pagination |
||||
|
@size-change="handleSizeChange" |
||||
|
@current-change="handleCurrentChange" |
||||
|
:current-page.sync="currentPage" |
||||
|
:page-sizes="[20, 50, 100, 200]" |
||||
|
:page-size="pageSize" |
||||
|
layout="sizes, prev, pager, next" |
||||
|
:total="total" |
||||
|
> |
||||
|
</el-pagination> |
||||
|
</div> |
||||
|
</el-card> |
||||
|
|
||||
|
<el-dialog |
||||
|
title="居民需求分类" |
||||
|
:visible.sync="dialogVisible" |
||||
|
width="40%" |
||||
|
append-to-body |
||||
|
:close-on-click-modal="false" |
||||
|
:before-close="handlerCancle" |
||||
|
> |
||||
|
<el-form label-width="100px" :model="form" :rules="rules" ref="ruleForm"> |
||||
|
<el-form-item label="分类名称" prop="categoryName"> |
||||
|
<el-input v-model="form.categoryName" size="small" style="width: 180px;" disabled></el-input> |
||||
|
</el-form-item> |
||||
|
|
||||
|
<el-form-item label="状态"> |
||||
|
<el-switch v-model="form.usableFlag"></el-switch> |
||||
|
</el-form-item> |
||||
|
<el-form-item label="奖励积分"> |
||||
|
<el-input-number v-model="form.awardPoint" :min="0" size="small" label="描述文字"></el-input-number> |
||||
|
</el-form-item> |
||||
|
</el-form> |
||||
|
<div class="resi-btns"> |
||||
|
<el-button size="small" @click="handlerCancle">取消</el-button> |
||||
|
<el-button |
||||
|
type="primary" |
||||
|
size="small" |
||||
|
:loading="btnLoading" |
||||
|
@click="handleSUbmit" |
||||
|
>提交</el-button |
||||
|
> |
||||
|
</div> |
||||
|
</el-dialog> |
||||
|
|
||||
|
</div> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import axios from 'axios' |
||||
|
import Sortable from 'sortablejs' |
||||
|
export default { |
||||
|
data() { |
||||
|
return { |
||||
|
tableLoading: false, |
||||
|
btnLoading: false, |
||||
|
disabled: false, |
||||
|
pageLoading: false, |
||||
|
dialogVisible: false, |
||||
|
currentPage: 1, |
||||
|
pageSize: 20, |
||||
|
total: null, |
||||
|
conditions: [], |
||||
|
tableData: [], |
||||
|
value: '', |
||||
|
options: [ |
||||
|
{ |
||||
|
label: '是', |
||||
|
value: 1 |
||||
|
},{ |
||||
|
label: '否', |
||||
|
value: 2 |
||||
|
} |
||||
|
], |
||||
|
tableHeader: [ |
||||
|
{ |
||||
|
label: '分类名称', |
||||
|
columnName: 'categoryName' |
||||
|
}, { |
||||
|
label: '状态', |
||||
|
columnName: 'usableFlag', |
||||
|
options: [{ |
||||
|
value: true, |
||||
|
label: '启用' |
||||
|
}, { |
||||
|
value: false, |
||||
|
label: '禁用' |
||||
|
}] |
||||
|
} |
||||
|
], |
||||
|
customerId: '', |
||||
|
form: { |
||||
|
categoryName: '', |
||||
|
awardPoint: '', |
||||
|
usableFlag: false |
||||
|
}, |
||||
|
rules: { |
||||
|
categoryName: [{ required: true, message: '分类名称不能为空', trigger: 'blur' }] |
||||
|
} |
||||
|
} |
||||
|
}, |
||||
|
async created() { |
||||
|
this.customerId = localStorage.getItem('customerId') |
||||
|
this.getTableData() |
||||
|
this.pageLoading = true |
||||
|
}, |
||||
|
mounted() { |
||||
|
}, |
||||
|
methods: { |
||||
|
handleSizeChange(val) { |
||||
|
console.log(`每页 ${val} 条`) |
||||
|
this.pageSize = val |
||||
|
this.getTableData() |
||||
|
}, |
||||
|
handleCurrentChange(val) { |
||||
|
console.log(`当前页: ${val}`) |
||||
|
this.currentPage = val |
||||
|
this.getTableData() |
||||
|
}, |
||||
|
handleFilterSpan(row, item) { |
||||
|
let _val = '' |
||||
|
if (item.options && item.options.length > 0) { |
||||
|
item.options.forEach((n) => { |
||||
|
if (n.value === row[item.columnName]) _val = n.label |
||||
|
}) |
||||
|
} |
||||
|
return _val || row[item.columnName] |
||||
|
}, |
||||
|
handleSearch(val) { |
||||
|
console.log('searchhh--', val) |
||||
|
this.currentPage = 1 |
||||
|
this.conditions = val |
||||
|
this.getTableData() |
||||
|
}, |
||||
|
|
||||
|
handlerCancle() { |
||||
|
this.dialogVisible = false |
||||
|
}, |
||||
|
async handleLook(row) { |
||||
|
const _show = { |
||||
|
show: 'hidden', |
||||
|
hidden: 'show' |
||||
|
} |
||||
|
const params = { |
||||
|
id: row.id, |
||||
|
status: _show[row.status] |
||||
|
} |
||||
|
this.$http |
||||
|
.post('/oper/customize/resicategorystatsconfig/updatestatus', params) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} else { |
||||
|
this.getTableData() |
||||
|
} |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
return this.$message.error('网络错误') |
||||
|
}) |
||||
|
}, |
||||
|
async handleEdit(row) { |
||||
|
|
||||
|
this.form = { ...row } |
||||
|
this.dialogVisible = true |
||||
|
}, |
||||
|
async handleSUbmit() { |
||||
|
this.$refs.ruleForm.validate(async (valid) => { |
||||
|
if (valid) { |
||||
|
this.btnLoading = true |
||||
|
const _form = { |
||||
|
...this.form, |
||||
|
warn: (this.form.warn && 1) || 0 |
||||
|
} |
||||
|
await this.$http |
||||
|
.post('/oper/customize/resicategorystatsconfig/update', _form) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} else { |
||||
|
this.dialogVisible = false |
||||
|
this.getTableData() |
||||
|
} |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
return this.$message.error('网络错误') |
||||
|
}) |
||||
|
this.btnLoading = false |
||||
|
} else { |
||||
|
console.log('error submit!!'); |
||||
|
return false; |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
}, |
||||
|
handleDel(row) { |
||||
|
let params = { |
||||
|
formCode: 'resi_base_info', |
||||
|
icResiUserId: row.icResiUserId |
||||
|
} |
||||
|
console.log('row1', row) |
||||
|
this.$http |
||||
|
.post('/epmetuser/icresiuser/delete', params) |
||||
|
.then(({ data: res }) => { |
||||
|
console.log('row2', row) |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} else { |
||||
|
console.log('row3', row) |
||||
|
this.$message.success('删除成功') |
||||
|
this.getTableData() |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log('row4', err) |
||||
|
return this.$message.error('网络错误') |
||||
|
}) |
||||
|
}, |
||||
|
sortData() { |
||||
|
const _data = this.tableData.map((item, index)=> { |
||||
|
return { |
||||
|
id: item.id, |
||||
|
sort: index |
||||
|
} |
||||
|
}) |
||||
|
this.$http |
||||
|
.post('/oper/customize/resicategorystatsconfig/updatesort', _data) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} else { |
||||
|
// this.getTableData() |
||||
|
} |
||||
|
}) |
||||
|
.catch((err) => { |
||||
|
console.log('row4', err) |
||||
|
return this.$message.error('网络错误') |
||||
|
}) |
||||
|
}, |
||||
|
async getTableData() { |
||||
|
this.tableLoading = true |
||||
|
let params = { |
||||
|
// formCode: 'resi_base_info', |
||||
|
pageNo: this.currentPage, |
||||
|
pageSize: this.pageSize |
||||
|
} |
||||
|
await this.$http |
||||
|
.post('/epmetuser/icresidemanddict/pagelist', params) |
||||
|
.then(({ data: res }) => { |
||||
|
if (res.code !== 0) { |
||||
|
return this.$message.error(res.msg) |
||||
|
} else { |
||||
|
this.tableData = res.data.list |
||||
|
this.total = res.data.total |
||||
|
} |
||||
|
}) |
||||
|
.catch(() => { |
||||
|
return this.$message.error('网络错误') |
||||
|
}) |
||||
|
this.tableLoading = false |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.resi-container .resi-card-table { |
||||
|
::v-deep .el-table th { |
||||
|
color: #fff; |
||||
|
background-color: rgba(33, 149, 254, 1); |
||||
|
border-right: 1px solid rgba(33, 149, 254, 1);; |
||||
|
} |
||||
|
} |
||||
|
.resi-table { |
||||
|
::v-deep .el-button--text { |
||||
|
text-decoration: underline; |
||||
|
} |
||||
|
::v-deep .btn-color-del { |
||||
|
margin-left: 10px; |
||||
|
color: rgba(213, 16, 16, 1); |
||||
|
} |
||||
|
::v-deep .btn-color-edit { |
||||
|
color: rgba(0, 167, 169, 1); |
||||
|
} |
||||
|
} |
||||
|
</style> |
||||
|
|
||||
|
<style lang="scss" scoped> |
||||
|
.resi-row-btn { |
||||
|
display: flex; |
||||
|
margin-bottom: 13px; |
||||
|
::v-deep .el-button { |
||||
|
// margin-left: 10px; |
||||
|
border: 0; |
||||
|
} |
||||
|
::v-deep .el-select { |
||||
|
margin-right: 10px; |
||||
|
} |
||||
|
.el-button--success { |
||||
|
background: rgba(34, 193, 195, 1); |
||||
|
} |
||||
|
} |
||||
|
.avatar-uploader { |
||||
|
::v-deep |
||||
|
.el-upload { |
||||
|
cursor: pointer; |
||||
|
position: relative; |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
.el-upload:hover { |
||||
|
border-color: #409EFF; |
||||
|
} |
||||
|
.avatar { |
||||
|
width: 70px; |
||||
|
height: 70px; |
||||
|
display: block; |
||||
|
} |
||||
|
.avatar-uploader-icon { |
||||
|
border: 1px dashed #d9d9d9; |
||||
|
border-radius: 6px; |
||||
|
font-size: 28px; |
||||
|
color: #8c939d; |
||||
|
width: 70px; |
||||
|
height: 70px; |
||||
|
line-height: 70px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
.resi-btns { |
||||
|
margin-top: 20px; |
||||
|
text-align: center; |
||||
|
} |
||||
|
</style> |
Loading…
Reference in new issue