Browse Source

Merge branch 'dev_1114' of http://121.42.41.42:7070/r/esua-epdc-admin into dev_1114

master
lihenian 6 years ago
parent
commit
bc5463d503
  1. 67
      package-lock.json
  2. 2
      public/index.html
  3. 2
      src/i18n/zh-CN.js
  4. 1
      src/views/main-navbar.vue
  5. 152
      src/views/modules/events/interfacelog-add-or-update.vue
  6. 173
      src/views/modules/events/interfacelog.vue
  7. 2
      src/views/modules/events/issue-change-list.vue
  8. 9
      src/views/modules/events/issue-close-detail-view.vue
  9. 2
      src/views/modules/events/issue-close-list.vue
  10. 9
      src/views/modules/events/issue-process-detail-view.vue
  11. 2
      src/views/modules/events/issue-process-list.vue
  12. 5
      src/views/modules/events/issue-reject-detail-view.vue
  13. 2
      src/views/modules/events/issue-reject-list.vue
  14. 5
      src/views/modules/events/issue-review-detail-view.vue
  15. 2
      src/views/modules/events/issue-review-list.vue
  16. 11
      src/views/modules/events/item-close-detail-view.vue
  17. 2
      src/views/modules/events/item-close-list.vue
  18. 11
      src/views/modules/events/item-deal-detail-view.vue
  19. 2
      src/views/modules/events/item-deal-list.vue
  20. 2
      src/views/modules/events/item-end-list.vue
  21. 8
      src/views/modules/group/group-approve.vue
  22. 201
      src/views/modules/group/leaderboard.vue
  23. 278
      src/views/modules/group/topic-add-or-update.vue
  24. 67
      src/views/modules/group/topic-close.vue
  25. 244
      src/views/modules/group/topic-detail.vue
  26. 236
      src/views/modules/group/topic-list.vue
  27. 98
      src/views/modules/group/topic.vue
  28. 376
      src/views/modules/sys/app-menu-add-or-update.vue
  29. 104
      src/views/modules/sys/app-menu.vue
  30. 186
      src/views/modules/sys/appmenutemplate-add-or-update.vue
  31. 126
      src/views/modules/sys/appmenutemplate.vue
  32. 5
      src/views/modules/sys/dept-add-or-update.vue
  33. 36
      src/views/modules/sys/role-add-or-update.vue
  34. 97
      src/views/modules/user/authenticate-history.vue
  35. 190
      src/views/modules/user/fail-authentication.vue
  36. 69
      src/views/modules/user/partyauthenticationfailed-add-or-update.vue
  37. 91
      src/views/modules/user/partyauthenticationfailed.vue
  38. 209
      src/views/modules/user/pass-authentication.vue
  39. 190
      src/views/modules/user/unauthorized.vue
  40. 33
      src/views/modules/user/user-add-or-update.vue
  41. 144
      src/views/modules/user/user-grid.vue
  42. 58
      src/views/modules/user/user.vue
  43. 190
      src/views/modules/user/wait-authentication.vue
  44. 13
      src/views/pages/login.vue

67
package-lock.json

@ -2700,7 +2700,7 @@
},
"babel-runtime": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
"resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
"integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
"dev": true,
"requires": {
@ -5396,15 +5396,6 @@
"resolved": "http://r.cnpmjs.org/events/download/events-1.1.1.tgz",
"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
},
"eventsource": {
"version": "0.1.6",
"resolved": "http://registry.npm.taobao.org/eventsource/download/eventsource-0.1.6.tgz",
"integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=",
"dev": true,
"requires": {
"original": ">=0.0.5"
}
},
"evp_bytestokey": {
"version": "1.0.3",
"resolved": "http://r.cnpmjs.org/evp_bytestokey/download/evp_bytestokey-1.0.3.tgz",
@ -10378,7 +10369,7 @@
},
"normalize-wheel": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
"resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
"integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=",
"dev": true
},
@ -14308,40 +14299,6 @@
}
}
},
"sockjs-client": {
"version": "1.0.0",
"resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.0.0.tgz?cache=0&sync_timestamp=1566505930428&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.0.0.tgz",
"integrity": "sha1-r20tNASCcJveJ4kKC6gE39dl+Pk=",
"dev": true,
"requires": {
"debug": "^2.1.0",
"eventsource": "^0.1.3",
"faye-websocket": "~0.7.3",
"inherits": "^2.0.1",
"json3": "^3.3.2",
"url-parse": "^1.0.1"
},
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"dev": true,
"requires": {
"ms": "2.0.0"
}
},
"faye-websocket": {
"version": "0.7.3",
"resolved": "https://registry.npm.taobao.org/faye-websocket/download/faye-websocket-0.7.3.tgz",
"integrity": "sha1-zEB0x/Sk39A69U3WXDVLE1EyzhE=",
"dev": true,
"requires": {
"websocket-driver": ">=0.3.6"
}
}
}
},
"source-list-map": {
"version": "2.0.0",
"resolved": "http://r.cnpmjs.org/source-list-map/download/source-list-map-2.0.0.tgz",
@ -14603,7 +14560,7 @@
},
"stompjs": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/stompjs/-/stompjs-2.3.3.tgz",
"resolved": "https://registry.npm.taobao.org/stompjs/download/stompjs-2.3.3.tgz",
"integrity": "sha1-NBeKx7uO4pTMXVVK2LUPf1RZ/Y4=",
"dev": true,
"requires": {
@ -15530,8 +15487,8 @@
},
"typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
"resolved": "https://registry.npm.taobao.org/typedarray-to-buffer/download/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha1-qX7nqf9CaRufeD/xvFES/j/KkIA=",
"dev": true,
"optional": true,
"requires": {
@ -16712,8 +16669,8 @@
},
"websocket": {
"version": "1.0.30",
"resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.30.tgz",
"integrity": "sha512-aO6klgaTdSMkhfl5VVJzD5fm+Srhh5jLYbS15+OiI1sN6h/RU/XW6WN9J1uVIpUKNmsTvT3Hs35XAFjn9NMfOw==",
"resolved": "https://registry.npm.taobao.org/websocket/download/websocket-1.0.30.tgz",
"integrity": "sha1-kdO9AMPUPpFvDPli+PjEUbsLI3M=",
"dev": true,
"optional": true,
"requires": {
@ -16725,8 +16682,8 @@
"dependencies": {
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"resolved": "http://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
"dev": true,
"optional": true,
"requires": {
@ -16735,8 +16692,8 @@
},
"nan": {
"version": "2.14.0",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
"integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
"resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz",
"integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=",
"dev": true,
"optional": true
}
@ -16844,7 +16801,7 @@
},
"yaeti": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz",
"resolved": "https://registry.npm.taobao.org/yaeti/download/yaeti-0.0.6.tgz",
"integrity": "sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=",
"dev": true,
"optional": true

2
public/index.html

@ -51,7 +51,7 @@
<!-- 生产环境 -->
<% if (process.env.VUE_APP_NODE_ENV === 'prod') { %>
<script>
window.SITE_CONFIG['apiURL'] = 'https://epdc-api.elinkchina.com.cn/epdc-api'
window.SITE_CONFIG['apiURL'] = 'https://epdc.elinkservice.cn/epdc-api'
</script>
<% } %>
</head>

2
src/i18n/zh-CN.js

@ -25,6 +25,7 @@ t.look = '查看'
t.ban = '禁言'
t.liftTheBan = '解禁'
t.disband = '解散'
t.close = '关闭'
t.prompt = {}
t.prompt.title = '提示'
@ -359,6 +360,7 @@ t.role.remark = '备注'
t.role.createDate = '创建时间'
t.role.menuList = '菜单授权'
t.role.deptList = '数据授权'
t.role.appMenuList = 'App菜单授权'
t.user = {}
t.user.username = '用户名'

1
src/views/main-navbar.vue

@ -128,6 +128,7 @@ export default {
return this.$message.error(res.msg)
}
clearLoginInfo()
window.sessionStorage.removeItem('routeList')
this.$router.push({ name: 'login' })
}).catch(() => { })
}).catch(() => { })

152
src/views/modules/events/interfacelog-add-or-update.vue

@ -0,0 +1,152 @@
<template>
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
<el-form-item label="引用ID" prop="referenceId">
<el-input v-model="dataForm.referenceId" placeholder="引用ID"></el-input>
</el-form-item>
<el-form-item label="业务类型" prop="businessType">
<el-input v-model="dataForm.businessType" placeholder="业务类型"></el-input>
</el-form-item>
<el-form-item label="调用接口名称" prop="interfaceName">
<el-input v-model="dataForm.interfaceName" placeholder="调用接口名称"></el-input>
</el-form-item>
<el-form-item label="调用是否成功 0-调用失败,1-调用成功" prop="successFlag">
<el-input v-model="dataForm.successFlag" placeholder="调用是否成功 0-调用失败,1-调用成功"></el-input>
</el-form-item>
<el-form-item label="调用消息体" prop="callMsgBody">
<el-input v-model="dataForm.callMsgBody" placeholder="调用消息体"></el-input>
</el-form-item>
<el-form-item label="调用返回消息体" prop="returnMsgBody">
<el-input v-model="dataForm.returnMsgBody" placeholder="调用返回消息体"></el-input>
</el-form-item>
<el-form-item label="创建人" prop="createdBy">
<el-input v-model="dataForm.createdBy" placeholder="创建人"></el-input>
</el-form-item>
<el-form-item label="创建时间" prop="createdTime">
<el-input v-model="dataForm.createdTime" placeholder="创建时间"></el-input>
</el-form-item>
<el-form-item label="更新人" prop="updatedBy">
<el-input v-model="dataForm.updatedBy" placeholder="更新人"></el-input>
</el-form-item>
<el-form-item label="更新时间" prop="updatedTime">
<el-input v-model="dataForm.updatedTime" placeholder="更新时间"></el-input>
</el-form-item>
<el-form-item label="删除标记" prop="delFlag">
<el-input v-model="dataForm.delFlag" placeholder="删除标记"></el-input>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
referenceId: '',
businessType: '',
interfaceName: '',
successFlag: '',
callMsgBody: '',
returnMsgBody: '',
createdBy: '',
createdTime: '',
updatedBy: '',
updatedTime: '',
delFlag: ''
}
}
},
computed: {
dataRule () {
return {
referenceId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
businessType: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
interfaceName: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
successFlag: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
callMsgBody: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
returnMsgBody: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
delFlag: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
}
})
},
//
getInfo () {
this.$http.get(`/events/interfacelog/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/events/interfacelog/', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

173
src/views/modules/events/interfacelog.vue

@ -0,0 +1,173 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-events__interfacelog}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="接口名称">
<el-input v-model="dataForm.interfaceName" clearable></el-input>
</el-form-item>
<el-form-item label="业务类型">
<el-select v-model="dataForm.businessType"
@change="changeBusinessType">
<el-option v-for="item in businessTypeDictList"
:key="item.dictValue"
:label="item.dictName"
:value="item.dictValue">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="状态">
<el-select v-model="dataForm.successFlag" @change="changeSuccessFlag">
<el-option :label="$t('logOperation.status0')" :value="0"></el-option>
<el-option :label="$t('logOperation.status1')" :value="1"></el-option>
</el-select>
</el-form-item>
<br>
<el-form-item>
<el-input v-model="dataForm.callMsgBody" placeholder="调用消息体" clearable></el-input>
</el-form-item>
<el-form-item>
<el-input v-model="dataForm.returnMsgBody" placeholder="调用返回消息体" clearable></el-input>
</el-form-item>
<el-form-item label="时间"
prop="startTime">
<el-date-picker v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="至"
label-width="25px"
prop="endTime">
<el-date-picker v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:interfacelog:save')" type="primary"
@click="addOrUpdateHandle()">{{ $t('add') }}
</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:interfacelog:delete')" type="danger" @click="deleteHandle()">
{{ $t('deleteBatch') }}
</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border
@selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column v-if="false" type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="referenceId" label="引用ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="businessType" label="业务类型" header-align="center"
align="center"
:formatter="showBusinessTypeFormatter"></el-table-column>
<el-table-column prop="interfaceName" label="接口名称" header-align="center"
align="center"></el-table-column>
<el-table-column prop="successFlag" label="状态" header-align="center" align="center">
<template slot-scope="scope">
<el-tag v-if="scope.row.successFlag === '0'" size="small" type="danger">失败</el-tag>
<el-tag v-else size="small" type="success">成功</el-tag>
</template>
</el-table-column>
<el-table-column prop="callMsgBody" label="调用消息体" header-align="center"
align="center"></el-table-column>
<el-table-column prop="returnMsgBody" label="调用返回消息体" header-align="center"
align="center"></el-table-column>
<el-table-column prop="createdTime" label="调用时间" header-align="center" align="center"></el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/events/interfacelog/page',
getDataListIsPage: true,
deleteURL: '/events/interfacelog',
deleteIsBatch: true
},
dataForm: {
businessType: '',
interfaceName: '',
successFlag: '',
callMsgBody: '',
returnMsgBody: '',
startTime: '',
endTime: ''
},
businessTypeDictList: [],
pickerBeginDateBefore: {
disabledDate: (time) => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: (time) => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
}
}
},
created: function () {
this.getBusinessTypeDicList()
},
methods: {
//
changeBusinessType (item) {
this.businessType = item
},
//
changeSuccessFlag (item) {
this.successFlag = item
},
// business_type
getBusinessTypeDicList () {
this.$http.get(`/sys/dict/listSimple/gender`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.businessTypeDictList = res.data
}).catch(() => { })
},
// label
showBusinessTypeFormatter: function (row, column) {
if (row.businessType) {
let dict = this.businessTypeDictList.filter(item => item.dictValue === row.businessType)[0]
if (dict) {
return dict.dictName
}
}
return ''
}
}
}
</script>

2
src/views/modules/events/issue-change-list.vue

@ -78,7 +78,7 @@
label="议题内容"
header-align="center"
width="330"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="提交时间"
header-align="center"

9
src/views/modules/events/issue-close-detail-view.vue

@ -40,7 +40,7 @@
</el-form-item>
</el-form>
<div class="container">
<div class="location">上报位置: {{dataForm.issueAddress}}</div>
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.issueAddress}}</div>
<div id="map"></div>
</div>
</div>
@ -52,8 +52,8 @@
v-for="(jobFeedbackDTO, index) in dataForm.feedbackDTOList"
:key="index" placement="top"
:color="index === dataForm.feedbackDTOList.length - 1 ? '#ccc' : 'green'">
<div v-if="jobFeedbackDTO.stateName === '【反馈】'">{{jobFeedbackDTO.createdTime}} {{'回应'}}</div>
<div v-else>{{jobFeedbackDTO.createdTime}} {{jobFeedbackDTO.stateName}}</div>
<div v-if="jobFeedbackDTO.stateName === '【反馈】'">{{jobFeedbackDTO.createdTime}} <span style="font-weight: bold;color: #606266">{{'回应'}}</span></div>
<div v-else>{{jobFeedbackDTO.createdTime}} <span style="font-weight: bold;color: #606266">{{jobFeedbackDTO.stateName}}</span></div>
<div>处理部门 {{jobFeedbackDTO.handlerDept}}</div>
<div>处理意见 {{jobFeedbackDTO.advice}}</div>
</el-timeline-item>
@ -205,6 +205,9 @@ export default {
font-size: 13px;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>

2
src/views/modules/events/issue-close-list.vue

@ -78,7 +78,7 @@
label="议题内容"
header-align="center"
width="330"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="提交时间"
header-align="center"

9
src/views/modules/events/issue-process-detail-view.vue

@ -32,7 +32,7 @@
</el-form-item>
</el-form>
<div class="container">
<div class="location">上报位置: {{dataForm.address}}</div>
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.address}}</div>
<div id="map"></div>
</div>
</div>
@ -43,8 +43,8 @@
v-for="(jobFeedbackDTO, index) in dataForm.jobFeedbackDTOS"
:key="index" placement="top"
:color="index === dataForm.jobFeedbackDTOS.length - 1 ? '#ccc': 'green'">
<div v-if="jobFeedbackDTO.stateName === '【反馈】'">{{jobFeedbackDTO.createdTime}} {{'回应'}}</div>
<div v-else>{{jobFeedbackDTO.createdTime}} {{jobFeedbackDTO.stateName}}</div>
<div v-if="jobFeedbackDTO.stateName === '【反馈】'">{{jobFeedbackDTO.createdTime}} <span style="font-weight: bold;color: #606266">{{'回应'}}</span></div>
<div v-else>{{jobFeedbackDTO.createdTime}} <span style="font-weight: bold;color: #606266">{{jobFeedbackDTO.stateName}}</span></div>
<div>处理部门 {{jobFeedbackDTO.handlerDept}}</div>
<div>处理意见 {{jobFeedbackDTO.advice}}</div>
</el-timeline-item>
@ -207,6 +207,9 @@ export default {
width: 600px !important;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>

2
src/views/modules/events/issue-process-list.vue

@ -78,7 +78,7 @@
label="议题内容"
header-align="center"
width="330"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="提交时间"
header-align="center"

5
src/views/modules/events/issue-reject-detail-view.vue

@ -34,7 +34,7 @@
</el-form-item>
</el-form>
<div class="container">
<div class="location">上报位置: {{dataForm.address}}</div>
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.address}}</div>
<div id="map"></div>
</div>
</div>
@ -118,6 +118,9 @@ export default {
font-size: 13px;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>

2
src/views/modules/events/issue-reject-list.vue

@ -78,7 +78,7 @@
label="议题内容"
header-align="center"
width="520"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="提交时间"
header-align="center"

5
src/views/modules/events/issue-review-detail-view.vue

@ -27,7 +27,7 @@
</el-form-item>
</el-form>
<div class="container">
<div class="location">上报位置: {{dataForm.address}}</div>
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.address}}</div>
<div id="map"></div>
</div>
</div>
@ -210,6 +210,9 @@ export default {
width: 600px !important;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>

2
src/views/modules/events/issue-review-list.vue

@ -78,7 +78,7 @@
label="议题内容"
header-align="center"
width="520"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="提交时间"
header-align="center"

11
src/views/modules/events/item-close-detail-view.vue

@ -46,7 +46,7 @@
</el-form-item>
</el-form>
<div class="container">
<div class="location">上报位置: {{dataForm.issueAddress}}</div>
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.issueAddress}}</div>
<div id="map"></div>
</div>
</div>
@ -61,9 +61,9 @@
:color="index === 0 ? 'green' : activity.itemDeptDTOS.length > 0 ? 'red' : '#ccc'"
:size="activity.size">
<div style="line-height: 25px;">
<div v-if="activity.itemDeptDTOS.length > 0">{{activity.createdTime}} {{ '吹哨' }}</div>
<div v-else-if="activity.itemDeptDTOS.length <= 0 && activity.progressName !== '审核通过' && activity.progressName !== '已关闭' && activity.progressName !== '已结案'">{{activity.createdTime}} {{ '【回应】' }}</div>
<div v-else>{{activity.createdTime}} {{activity.progressName}}</div>
<div v-if="activity.itemDeptDTOS.length > 0">{{activity.createdTime}} <span style="font-weight: bold;color: #606266">{{'吹哨'}}</span></div>
<div v-else-if="activity.itemDeptDTOS.length <= 0 && activity.progressName !== '审核通过' && activity.progressName !== '已关闭' && activity.progressName !== '已结案'">{{activity.createdTime}} <span style="font-weight: bold;color: #606266">{{ '【回应】' }}</span></div>
<div v-else>{{activity.createdTime}} <span style="font-weight: bold;color: #606266">{{activity.progressName}}</span></div>
<div>处理部门 {{activity.handlerDept}}</div>
<div v-if="activity.itemDeptDTOS.length > 0" style="width: 100%; display: flex;">
<div>吹哨部门</div>
@ -225,6 +225,9 @@ export default {
font-size: 13px;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>

2
src/views/modules/events/item-close-list.vue

@ -78,7 +78,7 @@
label="项目内容"
header-align="center"
width="330"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="转成项目时间"
header-align="center"

11
src/views/modules/events/item-deal-detail-view.vue

@ -37,7 +37,7 @@
</el-form-item>
</el-form>
<div class="container">
<div class="location">上报位置: {{dataForm.issueAddress}}</div>
<div class="location"><span style="font-weight: bold;color: #606266">上报位置:</span> {{dataForm.issueAddress}}</div>
<div id="map"></div>
</div>
</div>
@ -52,9 +52,9 @@
:color="index === 0 ? 'green' : activity.itemDeptDTOS.length > 0 ? 'red' : '#ccc'"
:size="activity.size">
<div style="line-height: 25px;">
<div v-if="activity.itemDeptDTOS.length > 0">{{activity.createdTime}} {{ '吹哨' }}</div>
<div v-else-if="activity.itemDeptDTOS.length <= 0 && activity.progressName !== '审核通过'">{{activity.createdTime}} {{ '【回应】' }}</div>
<div v-else>{{activity.createdTime}} {{activity.progressName}}</div>
<div v-if="activity.itemDeptDTOS.length > 0">{{activity.createdTime}} <span style="font-weight: bold;color: #606266">{{ '吹哨' }}</span></div>
<div v-else-if="activity.itemDeptDTOS.length <= 0 && activity.progressName !== '审核通过'">{{activity.createdTime}} <span style="font-weight: bold;color: #606266">{{ '【回应】' }}</span></div>
<div v-else>{{activity.createdTime}} <span style="font-weight: bold;color: #606266">{{activity.progressName}}</span></div>
<div>处理部门 {{activity.handlerDept}}</div>
<div v-if="activity.itemDeptDTOS.length > 0" style="width: 100%; display: flex;">
<div>吹哨部门</div>
@ -400,6 +400,9 @@ export default {
width: 600px !important;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>

2
src/views/modules/events/item-deal-list.vue

@ -78,7 +78,7 @@
label="项目内容"
header-align="center"
width="330"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="转成项目时间"
header-align="center"

2
src/views/modules/events/item-end-list.vue

@ -78,7 +78,7 @@
label="项目内容"
header-align="center"
width="257"
align="center"></el-table-column>
align="left"></el-table-column>
<el-table-column prop="createdTime"
label="转成项目时间"
header-align="center"

8
src/views/modules/group/group-approve.vue

@ -47,21 +47,21 @@ export default {
createdTime: '',
groupIntroduction: '',
nickname: '',
state: '5',
state: '10',
processingOpinions: ''
},
options: [{
value: '10',
label: '审核通过'
label: '通过'
}, {
value: '5',
label: '审核拒绝'
label: '拒绝'
}]
}
},
watch: {
'dataForm.state': function (val) {
if (val === '5') {
if (val === '10') {
this.adviceVisible = false
} else {
this.adviceVisible = true

201
src/views/modules/group/leaderboard.vue

@ -0,0 +1,201 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__topic}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" placeholder="请选择" clearable @change="getCommunityList">
<el-option v-for="item in streetOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId"
placeholder="请选择"
clearable
@change="getGridList">
<el-option v-for="item in communityOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable
placeholder="请选择">
<el-option v-for="item in gridOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间"
prop="startTime">
<el-date-picker v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="至"
label-width="25px"
prop="endTime">
<el-date-picker v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="排名">
<el-select v-model="orderType" clearable
placeholder="请选择">
<el-option v-for="item in orderTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
</el-form>
<el-table v-if="this.orderType === '0'" v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column label="排名" type="index" show-overflow-tooltip align="center" width="50"></el-table-column>
<el-table-column prop="groupName" label="群名" header-align="center" align="center"></el-table-column>
<el-table-column prop="ownGrid" label="所属网格" header-align="center" align="center"></el-table-column>
</el-table>
<el-table v-if="this.orderType === '1'" v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column label="排名" type="index" show-overflow-tooltip align="center" width="50"></el-table-column>
<el-table-column prop="groupName" label="群名" header-align="center" align="center"></el-table-column>
<el-table-column prop="memberNum" label="群成员数量" header-align="center" align="center"></el-table-column>
<el-table-column prop="ownGrid" label="所属网格" header-align="center" align="center"></el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<close v-if="closeVisible" ref="close" @refreshDataList="getDataList"></close>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import Close from './topic-close'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/group/group/activity',
getDataListIsPage: true
},
closeVisible: false,
detailVisible: false,
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
startTime: '',
endTime: ''
},
pickerBeginDateBefore: {
disabledDate: (time) => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: (time) => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
},
orderType: '0',
streetOptions: [],
communityOptions: [],
gridOptions: [],
orderTypeOptions: [{
id: '0',
name: '按活跃度排名'
}, {
id: '1',
name: '按群成员排名'
}]
}
},
watch: {
'orderType': function (val) {
if (val === '0') {
this.mixinViewModuleOptions.getDataListURL = '/group/group/activity'
} else {
this.mixinViewModuleOptions.getDataListURL = '/group/group/member'
}
this.getDataList()
}
},
components: {
Close
},
created: function () {
this.getStreetList()
},
methods: {
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => { })
},
getCommunityList () {
if (this.dataForm.streetId === '') {
this.communityOptions = []
this.gridOptions = []
this.dataForm.communityId = ''
this.dataForm.gridId = ''
return
}
this.dataForm.communityId = ''
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => { })
},
getGridList () {
if (this.dataForm.communityId === '') {
this.gridOptions = []
this.dataForm.gridId = ''
return
}
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => { })
}
}
}
</script>

278
src/views/modules/group/topic-add-or-update.vue

@ -1,278 +0,0 @@
<template>
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
<el-form-item label="用户ID" prop="userId">
<el-input v-model="dataForm.userId" placeholder="用户ID"></el-input>
</el-form-item>
<el-form-item label="用户昵称" prop="nickname">
<el-input v-model="dataForm.nickname" placeholder="用户昵称"></el-input>
</el-form-item>
<el-form-item label="用户头像" prop="userFace">
<el-input v-model="dataForm.userFace" placeholder="用户头像"></el-input>
</el-form-item>
<el-form-item label="党员标识 0:否,1:是" prop="partyMember">
<el-input v-model="dataForm.partyMember" placeholder="党员标识 0:否,1:是"></el-input>
</el-form-item>
<el-form-item label="话题内容" prop="topicContent">
<el-input v-model="dataForm.topicContent" placeholder="话题内容"></el-input>
</el-form-item>
<el-form-item label="议题ID" prop="issueId">
<el-input v-model="dataForm.issueId" placeholder="议题ID"></el-input>
</el-form-item>
<el-form-item label="项目ID" prop="itemId">
<el-input v-model="dataForm.itemId" placeholder="项目ID"></el-input>
</el-form-item>
<el-form-item label="区" prop="area">
<el-input v-model="dataForm.area" placeholder="区"></el-input>
</el-form-item>
<el-form-item label="区ID" prop="areaId">
<el-input v-model="dataForm.areaId" placeholder="区ID"></el-input>
</el-form-item>
<el-form-item label="街道" prop="street">
<el-input v-model="dataForm.street" placeholder="街道"></el-input>
</el-form-item>
<el-form-item label="街道ID" prop="streetId">
<el-input v-model="dataForm.streetId" placeholder="街道ID"></el-input>
</el-form-item>
<el-form-item label="社区" prop="community">
<el-input v-model="dataForm.community" placeholder="社区"></el-input>
</el-form-item>
<el-form-item label="社区ID" prop="communityId">
<el-input v-model="dataForm.communityId" placeholder="社区ID"></el-input>
</el-form-item>
<el-form-item label="网格" prop="grid">
<el-input v-model="dataForm.grid" placeholder="网格"></el-input>
</el-form-item>
<el-form-item label="网格ID" prop="gridId">
<el-input v-model="dataForm.gridId" placeholder="网格ID"></el-input>
</el-form-item>
<el-form-item label="话题地址" prop="topicAddress">
<el-input v-model="dataForm.topicAddress" placeholder="话题地址"></el-input>
</el-form-item>
<el-form-item label="话题位置纬度" prop="topicLatitude">
<el-input v-model="dataForm.topicLatitude" placeholder="话题位置纬度"></el-input>
</el-form-item>
<el-form-item label="话题位置经度" prop="topicLongitude">
<el-input v-model="dataForm.topicLongitude" placeholder="话题位置经度"></el-input>
</el-form-item>
<el-form-item label="友邻社群" prop="groupName">
<el-input v-model="dataForm.groupName" placeholder="友邻社群"></el-input>
</el-form-item>
<el-form-item label="友邻社群ID" prop="groupId">
<el-input v-model="dataForm.groupId" placeholder="友邻社群ID"></el-input>
</el-form-item>
<el-form-item label="状态 0:讨论中,5:转议题待审核,10:转议题审核不通过,15:已转议题,20:已转项目,25:已关闭" prop="state">
<el-input v-model="dataForm.state" placeholder="状态 0:讨论中,5:转议题待审核,10:转议题审核不通过,15:已转议题,20:已转项目,25:已关闭"></el-input>
</el-form-item>
<el-form-item label="评论数" prop="commentNum">
<el-input v-model="dataForm.commentNum" placeholder="评论数"></el-input>
</el-form-item>
<el-form-item label="浏览数" prop="browseNum">
<el-input v-model="dataForm.browseNum" placeholder="浏览数"></el-input>
</el-form-item>
<el-form-item label="删除标记 0:未删除,1:已删除" prop="delFlag">
<el-input v-model="dataForm.delFlag" placeholder="删除标记 0:未删除,1:已删除"></el-input>
</el-form-item>
<el-form-item label="乐观锁" prop="revision">
<el-input v-model="dataForm.revision" placeholder="乐观锁"></el-input>
</el-form-item>
<el-form-item label="创建人" prop="createdBy">
<el-input v-model="dataForm.createdBy" placeholder="创建人"></el-input>
</el-form-item>
<el-form-item label="创建时间" prop="createdTime">
<el-input v-model="dataForm.createdTime" placeholder="创建时间"></el-input>
</el-form-item>
<el-form-item label="更新人" prop="updatedBy">
<el-input v-model="dataForm.updatedBy" placeholder="更新人"></el-input>
</el-form-item>
<el-form-item label="更新时间" prop="updatedTime">
<el-input v-model="dataForm.updatedTime" placeholder="更新时间"></el-input>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
userId: '',
nickname: '',
userFace: '',
partyMember: '',
topicContent: '',
issueId: '',
itemId: '',
area: '',
areaId: '',
street: '',
streetId: '',
community: '',
communityId: '',
grid: '',
gridId: '',
topicAddress: '',
topicLatitude: '',
topicLongitude: '',
groupName: '',
groupId: '',
state: '',
commentNum: '',
browseNum: '',
delFlag: '',
revision: '',
createdBy: '',
createdTime: '',
updatedBy: '',
updatedTime: ''
}
}
},
computed: {
dataRule () {
return {
userId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
nickname: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
userFace: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
partyMember: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicContent: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
issueId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
itemId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
area: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
areaId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
street: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
streetId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
community: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
communityId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
grid: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
gridId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicAddress: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicLatitude: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
topicLongitude: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
groupName: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
groupId: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
state: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
commentNum: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
browseNum: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
delFlag: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
revision: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
}
})
},
//
getInfo () {
this.$http.get(`/news/topic/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/news/topic/', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

67
src/views/modules/group/topic-close.vue

@ -0,0 +1,67 @@
<template>
<el-dialog :visible.sync="visible" :title="!dataForm.id ? $t('add') : $t('update')" :close-on-click-modal="false" :close-on-press-escape="false">
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmitHandle()" :label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
<el-form-item label="关闭原因" prop="processingOpinions">
<el-input v-model="dataForm.processingOpinions" type="textarea" placeholder="50字以内"></el-input>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary" @click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
processingOpinions: ''
}
}
},
computed: {
dataRule () {
return {
processingOpinions: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
})
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http['post']('/group/topic/close', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => {})
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

244
src/views/modules/group/topic-detail.vue

@ -0,0 +1,244 @@
<template>
<div class="project-handle">
<el-form :model="dataForm" ref="dataForm" style="width: 100%; height: 100%;">
<div class="project-detail">
<div class="project-detail-tip">话题详情</div>
<el-form label-position="right" label-width="120px">
<el-form-item label="话题内容:" prop="eventContent">
<div>{{dataForm.topicContent}}</div>
<el-image v-for="url in dataForm.images"
style="width: 100px; height: 100px; margin-right: 10px"
:key="url"
:src="url"
:preview-src-list="previewImgList"
@click="clickImg(url)">
</el-image>
</el-form-item>
<el-form-item label="地址:" prop="ownGrid">
<div>{{dataForm.topicAddress}}</div>
</el-form-item>
<el-form-item label="议题来源:" prop="createdTime">
<div>{{dataForm.groupName}}</div>
</el-form-item>
<el-form-item label="发言人:" prop="nickName">
<div>{{dataForm.nickname}}</div>
</el-form-item>
<el-form-item label="评论:">
<el-button type="primary" @click="innerVisible = true">点击查看评论</el-button>
</el-form-item>
</el-form>
</div>
<div style="width: 100%; text-align:center; float:left;">
<el-button size="medium" style="width: 95px" type="primary" @click="back">返回</el-button>
</div>
</el-form>
<el-dialog width="90%" title="评论" :visible.sync="innerVisible" append-to-body>
<el-table :data="commentsDTOs" border style="width: 100%;">
<el-table-column prop="user.userName" label="发言人" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentTime" label="发言时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="content" label="发言内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyComment.userName" label="被回复人" header-align="center" align="center"></el-table-column>
<el-table-column prop="replyComment.content" label="被回复内容" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="scope.row.shieldFlag === '0'" type="button" size="small" @click="deleteComment(scope.row.commentId)">屏蔽</el-button>
<el-button v-if="scope.row.shieldFlag === '1'" type="text" size="small">已屏蔽</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="limitVal"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandleNew"
@current-change="pageCurrentChangeHandleNew">
</el-pagination>
</el-dialog>
</div>
</template>
<script>
import 'element-ui/lib/theme-chalk/timeline.css'
import 'element-ui/lib/theme-chalk/timeline-item.css'
import 'element-ui/lib/theme-chalk/image.css'
export default {
data () {
return {
innerVisible: false,
dataForm: {
id: ''
},
order: '',
orderField: '',
pageIndex: 1,
limitVal: 10,
total: 0,
commentsDTOs: []
}
},
mounted () {
this.dataForm.id = this.$route.query.id
this.init()
},
methods: {
back () {
this.$parent.selectComponent = 'TopicList'
},
clickImg (url) {
this.previewImgList = []
this.previewImgList.push(url)
},
init () {
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
this.getCommentList()
}
})
},
//
getInfo () {
this.$http.get(`/group/topic/detail/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => {})
},
pageSizeChangeHandleNew (val) {
this.pageIndex = 1
this.limitVal = val
this.getCommentList()
},
pageCurrentChangeHandleNew (val) {
this.pageIndex = val
this.getCommentList()
},
getCommentList () {
this.$http.get('/group/topiccomment/comments', { params: { id: this.dataForm.id, order: this.order, orderField: this.orderField, page: this.pageIndex, limit: this.limitVal }
}).then(({ data: res }) => {
if (res.code !== 0) {
this.commentsDTOs = []
this.total = 0
return this.$message.error(res.msg)
}
this.commentsDTOs = res.data.list
this.total = res.data.total
}).catch(() => {})
},
deleteComment (val) {
this.$http['post'](
'/group/topiccomment/deleteComment', { commentIds: [val] }).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.getCommentList()
}
})
}).catch(() => {})
}
}
}
</script>
<style lang="scss">
.project-handle {
.el-timeline {
padding-left: 9px;
font-size: 13px;
}
}
.el-form-item__label {
font-weight: bold;
}
</style>
<style lang="scss" scoped>
.project-handle {
width: 100%;
height: calc(100vh - 120px);
background: #ffffff;
box-sizing: border-box;
padding: 10px;
.project-detail {
width: 100%;
height: 80%;
border: 2px solid #ccc;
box-sizing: border-box;
padding: 10px;
padding-top: 20px;
float:left;
margin-bottom: 1%;
position:relative;
.project-detail-tip {
position: absolute;
top: 0;
left:0;
width: 80px;
height: 30px;
line-height: 30px;
color: #ffffff;
background: #4ac38b;
text-align:center;
}
.el-form {
width: 58%;
height: 100%;
float:left;
overflow-y:auto;
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #fff;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #fff;
}
}
}
.project-progress {
width: 20%;
height: 100%;
float: right;
border: 2px solid #ccc;
box-sizing: border-box;
margin-left: 1%;
padding-top: 20px;
overflow-y:auto;
&::-webkit-scrollbar {
width: 5px;
height: 1px;
}
&::-webkit-scrollbar-thumb {
border-radius: 5px;
background: #aaa;
}
&::-webkit-scrollbar-track {
border-radius: 10px;
background: #ccc;
}
}
.handle-operation {
width: 79%;
height: 49%;
box-sizing: border-box;
border: 2px solid #ccc;
float:left;
}
}
</style>

236
src/views/modules/group/topic-list.vue

@ -0,0 +1,236 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__topic}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" placeholder="请选择" clearable @change="getCommunityList">
<el-option v-for="item in streetOptions" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId"
placeholder="请选择"
clearable
@change="getGridList">
<el-option v-for="item in communityOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable
placeholder="请选择">
<el-option v-for="item in gridOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="时间"
prop="startTime">
<el-date-picker v-model="dataForm.startTime"
type="date"
:picker-options="pickerBeginDateBefore"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="至"
label-width="25px"
prop="endTime">
<el-date-picker v-model="dataForm.endTime"
type="date"
:picker-options="pickerBeginDateAfter"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
placeholder="选择日期时间">
</el-date-picker>
</el-form-item>
<el-form-item label="群名">
<el-select v-model="dataForm.groupId" clearable
placeholder="请选择">
<el-option v-for="item in groupOptions"
:key="item.groupId"
:label="item.groupName"
:value="item.groupId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="关键词" prop="keyword">
<el-input v-model="dataForm.keyword" placeholder=""></el-input>
</el-form-item>
<el-form-item label="排序方式">
<el-select v-model="dataForm.orderType" clearable
placeholder="请选择">
<el-option v-for="item in orderTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
<el-form-item>
<el-button v-if="$hasPermission('epdc:topic:export')" type="primary" @click="exportHandle()">{{ $t('export') }}</el-button>
</el-form-item>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column label="排名" type="index" show-overflow-tooltip align="center" width="50"></el-table-column>
<el-table-column prop="nickname" label="发言人" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicContent" label="话题内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentNum" label="评论数" header-align="center" align="center"></el-table-column>
<el-table-column prop="browseNum" label="浏览数" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="look(scope.row.id)">{{ $t('look') }}</el-button>
<el-button v-if="scope.row.state !== 20" type="text" size="small" @click="close(scope.row.id)">{{ $t('close') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<close v-if="closeVisible" ref="close" @refreshDataList="getDataList"></close>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import Close from './topic-close'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/group/topic/page',
getDataListIsPage: true
},
closeVisible: false,
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
startTime: '',
endTime: '',
groupId: '',
keyword: '',
orderType: ''
},
pickerBeginDateBefore: {
disabledDate: (time) => {
let beginDateVal = this.dataForm.startTime
if (beginDateVal) {
return time.getTime() > new Date(beginDateVal).getTime()
}
}
},
pickerBeginDateAfter: {
disabledDate: (time) => {
let EndDateVal = this.dataForm.endTime
if (EndDateVal) {
return time.getTime() < new Date(EndDateVal).getTime()
}
}
},
streetOptions: [],
communityOptions: [],
gridOptions: [],
groupOptions: [],
orderTypeOptions: [{
id: '0',
name: '按发布时间排序'
}, {
id: '1',
name: '按浏览数排序'
}, {
id: '2',
name: '按评论数排序'
}]
}
},
components: {
Close
},
created: function () {
this.getStreetList()
this.getGroupList()
},
methods: {
close (id) {
this.closeVisible = true
this.$nextTick(() => {
this.$refs.close.dataForm.id = id
this.$refs.close.init()
})
},
look (id) {
this.$parent.selectComponent = 'TopicDetail'
this.$router.push({ path: '/group-topic', query: { id: id } })
},
getGroupList () {
this.$http.get('/group/group/groupList').then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.groupOptions = res.data
}).catch(() => { })
},
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => { })
},
getCommunityList () {
if (this.dataForm.streetId === '') {
this.communityOptions = []
this.gridOptions = []
this.dataForm.communityId = ''
this.dataForm.gridId = ''
return
}
this.dataForm.communityId = ''
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => { })
},
getGridList () {
if (this.dataForm.communityId === '') {
this.gridOptions = []
this.dataForm.gridId = ''
return
}
this.dataForm.gridId = ''
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => { })
}
}
}
</script>

98
src/views/modules/group/topic.vue

@ -1,94 +1,30 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-news__topic}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.id" placeholder="id" clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:topic:save')" type="primary" @click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('news:topic:delete')" type="danger" @click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="id" label="主键" header-align="center" align="center"></el-table-column>
<el-table-column prop="userId" label="用户ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="nickname" label="用户昵称" header-align="center" align="center"></el-table-column>
<el-table-column prop="userFace" label="用户头像" header-align="center" align="center"></el-table-column>
<el-table-column prop="partyMember" label="党员标识 0:否,1:是" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicContent" label="话题内容" header-align="center" align="center"></el-table-column>
<el-table-column prop="issueId" label="议题ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="itemId" label="项目ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="area" label="区" header-align="center" align="center"></el-table-column>
<el-table-column prop="areaId" label="区ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="street" label="街道" header-align="center" align="center"></el-table-column>
<el-table-column prop="streetId" label="街道ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="community" label="社区" header-align="center" align="center"></el-table-column>
<el-table-column prop="communityId" label="社区ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="grid" label="网格" header-align="center" align="center"></el-table-column>
<el-table-column prop="gridId" label="网格ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicAddress" label="话题地址" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicLatitude" label="话题位置纬度" header-align="center" align="center"></el-table-column>
<el-table-column prop="topicLongitude" label="话题位置经度" header-align="center" align="center"></el-table-column>
<el-table-column prop="groupName" label="友邻社群" header-align="center" align="center"></el-table-column>
<el-table-column prop="groupId" label="友邻社群ID" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="状态 0:讨论中,5:转议题待审核,10:转议题审核不通过,15:已转议题,20:已转项目,25:已关闭" header-align="center" align="center"></el-table-column>
<el-table-column prop="commentNum" label="评论数" header-align="center" align="center"></el-table-column>
<el-table-column prop="browseNum" label="浏览数" header-align="center" align="center"></el-table-column>
<el-table-column prop="delFlag" label="删除标记 0:未删除,1:已删除" header-align="center" align="center"></el-table-column>
<el-table-column prop="revision" label="乐观锁" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdBy" label="创建人" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="创建时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedBy" label="更新人" header-align="center" align="center"></el-table-column>
<el-table-column prop="updatedTime" label="更新时间" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('news:topic:update')" type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('news:topic:delete')" type="text" size="small" @click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
<keep-alive include="TopicList">
<component :is="selectComponent"></component>
</keep-alive>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './topic-add-or-update'
import TopicList from './topic-list'
import TopicDetail from './topic-detail'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/news/topic/page',
getDataListIsPage: true,
deleteURL: '/news/topic',
deleteIsBatch: true
},
dataForm: {
id: ''
}
selectComponent: TopicList
}
},
components: {
AddOrUpdate
TopicList,
TopicDetail
},
methods: {
init () {
this.selectComponent = TopicList
}
}
}
</script>
<style lang="scss" scoped>
</style>

376
src/views/modules/sys/app-menu-add-or-update.vue

@ -0,0 +1,376 @@
<template>
<el-dialog :visible.sync="visible"
:title="!dataForm.id ? $t('add') : $t('update')"
:close-on-click-modal="false"
:close-on-press-escape="false">
<el-form :model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmitHandle()"
label-width="120px">
<el-form-item prop="type"
:label="$t('menu.type')"
size="mini">
<el-radio-group v-model="dataForm.type"
:disabled="!!dataForm.id">
<el-radio :label="0">{{ $t('menu.type0') }}</el-radio>
<el-radio :label="1">{{ $t('menu.type1') }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="name"
:label="$t('menu.name')">
<el-input v-model="dataForm.name"
:placeholder="$t('menu.name')"></el-input>
</el-form-item>
<el-form-item v-if="dataForm.type === 0"
prop="menuCode"
:label="$t('menu.menuCode')">
<el-input v-model="dataForm.menuCode"
:placeholder="$t('menu.menuCode')"></el-input>
</el-form-item>
<el-form-item prop="parentName"
:label="$t('menu.parentName')"
class="menu-list">
<el-popover v-model="menuListVisible"
ref="menuListPopover"
placement="bottom-start"
trigger="click">
<el-tree :data="menuList"
:props="{ label: 'name', children: 'children' }"
node-key="id"
ref="menuListTree"
:highlight-current="true"
:expand-on-click-node="false"
accordion
@current-change="menuListTreeCurrentChangeHandle">
</el-tree>
</el-popover>
<el-input v-model="dataForm.parentName"
v-popover:menuListPopover
:readonly="true"
:placeholder="$t('menu.parentName')">
<i v-if="dataForm.pid !== '0'"
slot="suffix"
@click.stop="deptListTreeSetDefaultHandle()"
class="el-icon-circle-close el-input__icon"></i>
</el-input>
</el-form-item>
<el-form-item v-if="dataForm.type === 0"
prop="url"
:label="$t('menu.url')">
<el-input v-model="dataForm.url"
:placeholder="$t('menu.url')"></el-input>
</el-form-item>
<el-form-item prop="sort"
:label="$t('menu.sort')">
<el-input-number v-model="dataForm.sort"
controls-position="right"
:min="0"
:label="$t('menu.sort')"></el-input-number>
</el-form-item>
<el-form-item v-if="dataForm.type === 0"
label="菜单图标"
v-loading="loading"
prop="icon">
<el-upload class="avatar-uploader"
:action="uploadUrl"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload">
<img v-if="dataForm.icon"
:src="dataForm.icon"
class="avatar">
<i v-else
class="el-icon-plus avatar-uploader-icon"></i>
</el-upload>
</el-form-item>
<el-form-item label="子菜单模板"
prop="templateId">
<el-select v-model="dataForm.templateId"
clearable
placeholder="子菜单模板">
<el-option v-for="item in templates"
:key="item.id"
:label="item.templateName"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item v-if="dataForm.type === 1"
prop="permissions"
:label="$t('menu.permissions')">
<el-input v-model="dataForm.permissions"
:placeholder="$t('menu.permissionsTips')"></el-input>
</el-form-item>
<el-form-item v-for="(item, index) in dataForm.resourceList"
:key="item.key"
:prop="`resourceList.${index}.resourceUrl`"
:rules="{ required: true, message: $t('validate.required'), trigger: 'blur' }"
:label="index === 0 ? $t('menu.resource') : ''"
class="resource-list">
<el-row>
<el-col :span="22">
<el-input v-model="item.resourceUrl"
:placeholder="$t('menu.resourceUrl')">
<el-select v-model="item.resourceMethod"
slot="prepend"
:placeholder="$t('menu.resourceMethod')">
<el-option label="GET"
value="GET"></el-option>
<el-option label="POST"
value="POST"></el-option>
<el-option label="PUT"
value="PUT"></el-option>
<el-option label="DELETE"
value="DELETE"></el-option>
</el-select>
</el-input>
</el-col>
<el-col :span="2"
class="text-center">
<el-button @click="resourceDeleteHandle(item)"
size="small"
type="text">{{ $t('delete') }}</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item :label="dataForm.resourceList.length <= 0 ? $t('menu.resource') : ''">
<el-button @click="resourceAddHandle()"
class="aui-button--dashed w-percent-100">{{ $t('menu.resourceAddItem') }}</el-button>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary"
@click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import Cookies from 'js-cookie'
import debounce from 'lodash/debounce'
import { getIconList } from '@/utils'
export default {
data () {
return {
visible: false,
menuList: [],
menuListVisible: false,
iconList: [],
iconListVisible: false,
templates: [],
dataForm: {
id: '',
type: 0,
name: '',
pid: '0',
parentName: '',
url: '',
resourceList: [],
permissions: '',
sort: 0,
icon: '',
menuCode: '',
templateId: ''
},
uploadUrl: '',
loading: false
}
},
computed: {
dataRule () {
return {
name: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
parentName: [
{ required: true, message: this.$t('validate.required'), trigger: 'change' }
]
}
}
},
watch: {
'dataForm.type' (val) {
this.$refs['dataForm'].clearValidate()
}
},
methods: {
init () {
this.visible = true
this.uploadUrl = `${window.SITE_CONFIG['apiURL']}/oss/file/upload?token=${Cookies.get('token')}`
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
this.iconList = getIconList()
this.dataForm.parentName = this.$t('menu.parentNameDefault')
this.getTemplateList()
this.dataForm.resourceList = []
this.getMenuList().then(() => {
if (this.dataForm.id) {
this.getInfo()
}
})
})
},
//
getMenuList () {
return this.$http.get('/sys/appmenu/list?type=0').then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.menuList = res.data
}).catch(() => { })
},
//
getTemplateList () {
this.$http.get('/sys/appmenutemplate/list').then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.templates = res.data
}).catch(() => { })
},
//
getInfo () {
this.$http.get(`/sys/appmenu/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
if (this.dataForm.pid === '0') {
return this.deptListTreeSetDefaultHandle()
}
this.$refs.menuListTree.setCurrentKey(this.dataForm.pid)
}).catch(() => { })
},
// ,
deptListTreeSetDefaultHandle () {
this.dataForm.pid = '0'
this.dataForm.parentName = this.$t('menu.parentNameDefault')
},
// ,
menuListTreeCurrentChangeHandle (data) {
this.dataForm.pid = data.id
this.dataForm.parentName = data.name
this.menuListVisible = false
},
// ,
iconListCurrentChangeHandle (icon) {
this.dataForm.icon = icon
this.iconListVisible = false
},
// ,
resourceAddHandle () {
this.dataForm.resourceList.push({
key: new Date().getTime(),
resourceMethod: 'GET',
resourceUrl: ''
})
},
// ,
resourceDeleteHandle (resource) {
this.dataForm.resourceList = this.dataForm.resourceList.filter(item => item.key !== resource.key)
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/appmenu', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => { })
})
}, 1000, { 'leading': true, 'trailing': false }),
//
handleAvatarSuccess (res, file) {
this.loading = false
this.dataForm.icon = res.data.url
},
beforeAvatarUpload (file) {
this.loading = true
}
}
}
</script>
<style lang="scss">
.mod-sys__menu {
.resource-list {
.el-select .el-input__inner {
min-width: 110px;
text-align: center;
}
}
.menu-list,
.icon-list {
.el-input__inner,
.el-input__suffix {
cursor: pointer;
}
}
&-icon-popover {
width: 458px;
overflow: hidden;
}
&-icon-inner {
width: 478px;
max-height: 258px;
overflow-x: hidden;
overflow-y: auto;
}
&-icon-list {
width: 458px;
padding: 0;
margin: -8px 0 0 -8px;
> .el-button {
padding: 8px;
margin: 8px 0 0 8px;
> span {
display: inline-block;
vertical-align: middle;
width: 18px;
height: 18px;
font-size: 18px;
}
}
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
width: 378px;
height: 178px;
line-height: 178px;
text-align: center;
}
.avatar {
width: 300px;
height: 178px;
display: block;
}
}
</style>

104
src/views/modules/sys/app-menu.vue

@ -0,0 +1,104 @@
<template>
<el-card shadow="never"
class="aui-card--fill">
<div class="mod-sys__menu">
<el-form :inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()">
<el-form-item>
<el-button v-if="$hasPermission('sys:menu:save')"
type="primary"
@click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading"
:data="dataList"
border
style="width: 100%;">
<table-tree-column prop="name"
:label="$t('menu.name')"
header-align="center"
width="150"></table-tree-column>
<el-table-column prop="icon"
label="菜单图标"
header-align="center"
align="center">
<template slot-scope="scope">
<img :src="scope.row.icon"
width="40"
height="40" />
</template>
</el-table-column>
<el-table-column prop="type"
:label="$t('menu.type')"
header-align="center"
align="center">
<template slot-scope="scope">
<el-tag v-if="scope.row.type === 0"
size="small">{{ $t('menu.type0') }}</el-tag>
<el-tag v-else
size="small"
type="info">{{ $t('menu.type1') }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="sort"
:label="$t('menu.sort')"
header-align="center"
align="center"></el-table-column>
<!-- <el-table-column prop="url"
:label="$t('menu.url')"
header-align="center"
align="center"
width="150"
:show-overflow-tooltip="true"></el-table-column>
<el-table-column prop="permissions"
:label="$t('menu.permissions')"
header-align="center"
align="center"
width="150"
:show-overflow-tooltip="true"></el-table-column> -->
<el-table-column :label="$t('handle')"
fixed="right"
header-align="center"
align="center"
width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('sys:menu:update')"
type="text"
size="small"
@click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('sys:menu:delete')"
type="text"
size="small"
@click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import TableTreeColumn from '@/components/table-tree-column'
import AddOrUpdate from './app-menu-add-or-update'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/sys/appmenu/list',
deleteURL: '/sys/appmenu'
}
}
},
components: {
TableTreeColumn,
AddOrUpdate
}
}
</script>

186
src/views/modules/sys/appmenutemplate-add-or-update.vue

@ -0,0 +1,186 @@
<template>
<el-dialog :visible.sync="visible"
:title="!dataForm.id ? $t('add') : $t('update')"
:close-on-click-modal="false"
:close-on-press-escape="false">
<el-form :model="dataForm"
:rules="dataRule"
ref="dataForm"
@keyup.enter.native="dataFormSubmitHandle()"
:label-width="$i18n.locale === 'en-US' ? '120px' : '80px'">
<el-form-item label="是否渐变"
prop="gradationFlag">
<el-select v-model="dataForm.gradationFlag"
clearable
placeholder="请选择">
<el-option v-for="(item,index) in gradationFlagOptions"
:key="index"
:label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="背景颜色"
prop="backgroundColor"
v-if="!categoryVisible">
<el-input v-model="dataForm.backgroundColor"
placeholder="背景颜色(渐变色为0时使用)"></el-input>
</el-form-item>
<el-form-item label="开始色"
prop="startColor"
v-if="categoryVisible">
<el-input v-model="dataForm.startColor"
placeholder="开始色(渐变色为1时使用)"></el-input>
</el-form-item>
<el-form-item label="终止色"
prop="endColor"
v-if="categoryVisible">
<el-input v-model="dataForm.endColor"
placeholder="终止色(渐变色为1时使用)"></el-input>
</el-form-item>
<el-form-item label="标签颜色"
prop="lableColor">
<el-input v-model="dataForm.lableColor"
placeholder="标签颜色"></el-input>
</el-form-item>
<el-form-item label="模板编码"
prop="templateCode">
<el-input v-model="dataForm.templateCode"
placeholder="模板编码(tem-1,tem-2,tem-3)"></el-input>
</el-form-item>
<el-form-item label="模板名称"
prop="templateName">
<el-input v-model="dataForm.templateName"
placeholder="模板名称"></el-input>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">{{ $t('cancel') }}</el-button>
<el-button type="primary"
@click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
gradationFlag: '',
backgroundColor: '',
startColor: '',
endColor: '',
lableColor: '',
templateCode: '',
templateName: '',
revision: '',
createdBy: '',
createdTime: '',
updatedBy: '',
updatedTime: ''
},
gradationFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }],
categoryVisible: true
}
},
computed: {
dataRule () {
return {
gradationFlag: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
backgroundColor: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
startColor: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
endColor: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
lableColor: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
templateCode: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
templateName: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
revision: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
createdTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedBy: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
],
updatedTime: [
{ required: true, message: this.$t('validate.required'), trigger: 'blur' }
]
}
}
},
watch: {
'dataForm.gradationFlag': function (val) {
if (val === '0') {
this.categoryVisible = false
} else {
this.categoryVisible = true
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
}
})
},
//
getInfo () {
this.$http.get(`/sys/appmenutemplate/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => { })
},
//
dataFormSubmitHandle: debounce(function () {
this.$refs['dataForm'].validate((valid) => {
if (!valid) {
return false
}
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/appmenutemplate/', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.$message({
message: this.$t('prompt.success'),
type: 'success',
duration: 500,
onClose: () => {
this.visible = false
this.$emit('refreshDataList')
}
})
}).catch(() => { })
})
}, 1000, { 'leading': true, 'trailing': false })
}
}
</script>

126
src/views/modules/sys/appmenutemplate.vue

@ -0,0 +1,126 @@
<template>
<el-card shadow="never"
class="aui-card--fill">
<div class="mod-admin__appmenutemplate}">
<el-form :inline="true"
:model="dataForm"
@keyup.enter.native="getDataList()">
<el-form-item>
<el-input v-model="dataForm.templateName"
placeholder="模板名称"
clearable></el-input>
</el-form-item>
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('admin:appmenutemplate:save')"
type="primary"
@click="addOrUpdateHandle()">{{ $t('add') }}</el-button>
</el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('admin:appmenutemplate:delete')"
type="danger"
@click="deleteHandle()">{{ $t('deleteBatch') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading"
:data="dataList"
border
@selection-change="dataListSelectionChangeHandle"
style="width: 100%;">
<el-table-column type="selection"
header-align="center"
align="center"
width="50"></el-table-column>
<el-table-column prop="gradationFlag"
label="是否渐变色"
:formatter="formatGradationFlag"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="backgroundColor"
label="背景颜色"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="startColor"
label="开始色"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="endColor"
label="终止色"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="lableColor"
label="标签颜色"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="templateCode"
label="模板编码"
header-align="center"
align="center"></el-table-column>
<el-table-column prop="templateName"
label="模板名称"
header-align="center"
align="center"></el-table-column>
<el-table-column :label="$t('handle')"
fixed="right"
header-align="center"
align="center"
width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('admin:appmenutemplate:update')"
type="text"
size="small"
@click="addOrUpdateHandle(scope.row.id)">{{ $t('update') }}</el-button>
<el-button v-if="$hasPermission('admin:appmenutemplate:delete')"
type="text"
size="small"
@click="deleteHandle(scope.row.id)">{{ $t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination :current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './appmenutemplate-add-or-update'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/sys/appmenutemplate/page',
getDataListIsPage: true,
deleteURL: '/sys/appmenutemplate',
deleteIsBatch: true
},
dataForm: {
id: '',
templateName: ''
}
}
},
components: {
AddOrUpdate
},
methods: {
formatGradationFlag: function (row, column) {
return row.gradationFlag === '1' ? '是' : row.state === '0' ? '未知' : '否'
}
}
}
</script>

5
src/views/modules/sys/dept-add-or-update.vue

@ -46,7 +46,7 @@
</el-input>
</el-form-item>
<el-form-item label="机构类型"
prop="streetId">
prop="typeKey">
<el-select v-model="dataForm.typeKey"
@change="changeOrgType"
placeholder="街道类型">
@ -102,6 +102,9 @@ export default {
],
parentName: [
{ required: true, message: this.$t('validate.required'), trigger: 'change' }
],
typeKey: [
{ required: true, message: this.$t('validate.required'), trigger: 'change' }
]
}
}

36
src/views/modules/sys/role-add-or-update.vue

@ -29,7 +29,7 @@
:placeholder="$t('role.remark')"></el-input>
</el-form-item>
<el-row>
<el-col :span="12">
<el-col :span="8">
<el-form-item size="mini"
:label="$t('role.menuList')">
<el-tree :data="menuList"
@ -41,7 +41,7 @@
</el-tree>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col :span="8">
<el-form-item size="mini"
:label="$t('role.deptList')">
<el-tree :data="deptList"
@ -53,6 +53,18 @@
</el-tree>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item size="mini"
:label="$t('role.appMenuList')">
<el-tree :data="appMenuList"
:props="{ label: 'name', children: 'children' }"
node-key="id"
ref="appMenuListTree"
accordion
show-checkbox>
</el-tree>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template slot="footer">
@ -71,12 +83,14 @@ export default {
visible: false,
menuList: [],
deptList: [],
appMenuList: [],
roleTypeList: [],
dataForm: {
id: '',
name: '',
menuIdList: [],
deptIdList: [],
appMenuIdList: [],
remark: '',
typeKey: ''
}
@ -101,9 +115,11 @@ export default {
this.$refs['dataForm'].resetFields()
this.$refs.menuListTree.setCheckedKeys([])
this.$refs.deptListTree.setCheckedKeys([])
this.$refs.appMenuListTree.setCheckedKeys([])
Promise.all([
this.getMenuList(),
this.getDeptList()
this.getDeptList(),
this.getAppMenuList()
]).then(() => {
if (this.dataForm.id) {
this.getInfo()
@ -129,6 +145,15 @@ export default {
this.deptList = res.data
}).catch(() => { })
},
// App
getAppMenuList () {
return this.$http.get('/sys/appmenu/select').then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.appMenuList = res.data
}).catch(() => { })
},
//
getInfo () {
this.$http.get(`/sys/role/${this.dataForm.id}`).then(({ data: res }) => {
@ -141,6 +166,7 @@ export default {
}
this.dataForm.menuIdList.forEach(item => this.$refs.menuListTree.setChecked(item, true))
this.$refs.deptListTree.setCheckedKeys(this.dataForm.deptIdList)
this.dataForm.appMenuIdList.forEach(item => this.$refs.appMenuListTree.setChecked(item, true))
}).catch(() => { })
},
//
@ -154,6 +180,10 @@ export default {
...this.$refs.menuListTree.getHalfCheckedKeys()
]
this.dataForm.deptIdList = this.$refs.deptListTree.getCheckedKeys()
this.dataForm.appMenuIdList = [
...this.$refs.appMenuListTree.getCheckedKeys(),
...this.$refs.appMenuListTree.getHalfCheckedKeys()
]
this.$http[!this.dataForm.id ? 'post' : 'put']('/sys/role', this.dataForm).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)

97
src/views/modules/user/authenticate-history.vue

@ -0,0 +1,97 @@
<template>
<el-dialog
:visible.sync="visible"
title="认证历史记录"
:append-to-body="true"
:modal-append-to-body="false"
:close-on-click-modal="false"
:close-on-press-escape="false"
>
<el-table :data="dataList" border style="width: 100%;">
<el-table-column
prop="realName"
label="姓名"
header-align="center"
align="center"
></el-table-column>
<el-table-column
prop="mobile"
label="手机号"
header-align="center"
align="center"
></el-table-column>
<el-table-column
prop="address"
label="居住地址"
header-align="center"
align="center"
></el-table-column>
<el-table-column
prop="authenticatedFlag"
label="结果"
header-align="center"
align="center"
:formatter="formatterAuthenticatedFlag"
></el-table-column>
<el-table-column
prop="remark"
label="备注"
header-align="center"
align="center"
></el-table-column>
<el-table-column
prop="createdTime"
label="时间"
header-align="center"
align="center"
></el-table-column>
</el-table>
<template slot="footer">
<el-button @click="visible = false" type="primary">{{
$t("confirm")
}}</el-button>
</template>
</el-dialog>
</template>
<script>
export default {
data () {
return {
visible: false,
dataForm: {
userId: ''
},
dataList: []
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
if (this.dataForm.userId) {
this.getDataList()
}
})
},
//
getDataList () {
this.$http
.get(
`/app-user/userauthenticatehistory/listUserAuthenticateHistory/${this.dataForm.userId}`
)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataList = res.data
})
.catch(() => {})
},
//
formatterAuthenticatedFlag: function (row, column) {
return row.authenticatedFlag === '1' ? '通过' : row.authenticatedFlag === '0' ? '未通过' : ''
}
}
}
</script>

190
src/views/modules/user/fail-authentication.vue

@ -0,0 +1,190 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-epdc__user}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" clearable placeholder="请选择" @change="getCommunityList">
<el-option v-for="(item, index) in streetOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId" clearable placeholder="请选择" @change="getGridList">
<el-option v-for="(item,index) in communityOptions" :key="index" :label="item.name" :value="item.id"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable placeholder="请选择">
<el-option v-for="(item,index) in gridOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名"><el-input v-model="dataForm.realName" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="手机号"><el-input v-model="dataForm.mobile" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="身份证号"><el-input v-model="dataForm.identityNo" placeholder="请输入" clearable></el-input></el-form-item>
<div class="block">
<span class="demonstration">注册时间</span>&nbsp;&nbsp;
<el-date-picker @change='setRegistTime' v-model="time" value-format="yyyy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>&nbsp;
<el-form-item><el-button @click="getDataList()">{{ $t('query') }}</el-button></el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('epdc:user:export')" type="primary" @click="exportHandle()">{{ $t('export') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column label="序号" width="70px"><template slot-scope="scope">{{scope.$index+1}}</template></el-table-column>
<el-table-column prop="realName" label="真实姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" header-align="center" align="center"></el-table-column>
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="审核状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居住地址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="100">
<template slot-scope="scope"><el-button type="text" size="mini" @click="userDetailHandle(scope.row.id)">查看</el-button></template>
</el-table-column>
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" @current-change="pageCurrentChangeHandle"></el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<user-detail v-if="userDetailVisible" ref="userDetail" @refreshDataList="getDataList"></user-detail>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './user-add-or-update'
import UserDetail from './user-detail'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: 'app-user/user/page',
getDataListIsPage: true,
deleteURL: '/app-use/user',
deleteIsBatch: true,
exportURL: '/app-user/user/export'
},
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
realName: '',
mobile: '',
identityNo: '',
startTime: '',
endTime: '',
partyFlag: '',
state: '2'
},
userDetailVisible: false,
streetOptions: [],
communityOptions: [],
gridOptions: [],
time: '',
tabFlag: '2',
state: '未认证用户',
partyFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }]
}
},
created () {
this.getStreetList()
},
methods: {
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => {})
},
getCommunityList () {
this.communityOptions = this.gridOptions = []
this.dataForm.communityId = this.dataForm.gridId = null
if (this.dataForm.streetId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => {})
}
},
getGridList () {
this.gridOptions = []
this.dataForm.gridId = null
if (this.dataForm.communityId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => {})
}
},
setRegistTime () {
this.dataForm.startTime = this.time[0]
this.dataForm.endTime = this.time[1]
},
formatState: function (row, column) {
let state = row.state
if (state === '1') {
return '待审核'
} else if (state === '2') {
return '审核不通过'
} else if (state === '3') {
return '审核通过'
} else if (state === '0') {
return '已注册'
}
},
formatPartyFlag: function (row, column) {
return row.partyFlag === '1' ? '是' : row.state === '0' ? '未知' : '否'
},
//
getDataList () {
if (this.time === null) {
this.dataForm.startTime = ''
this.dataForm.endTime = ''
}
this.dataListLoading = true
this.$http.get(
this.mixinViewModuleOptions.getDataListURL,
{
params: {
order: this.order,
orderField: this.orderField,
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
...this.dataForm
}
}
).then(({ data: res }) => {
this.dataListLoading = false
if (res.code !== 0) {
this.dataList = []
this.total = 0
return this.$message.error(res.msg)
}
this.dataList = this.mixinViewModuleOptions.getDataListIsPage ? res.data.list : res.data
this.total = this.mixinViewModuleOptions.getDataListIsPage ? res.data.total : 0
}).catch(() => {
this.dataListLoading = false
})
},
userDetailHandle (userId) {
this.userDetailVisible = true
this.$nextTick(() => {
this.$refs.userDetail.dataForm.id = userId
this.$refs.userDetail.init()
})
}
},
components: {
AddOrUpdate,
UserDetail
}
}
</script>

69
src/views/modules/user/partyauthenticationfailed-add-or-update.vue

@ -0,0 +1,69 @@
<template>
<el-dialog :visible.sync="visible"
title="查看"
width="500px"
:close-on-click-modal="false"
:close-on-press-escape="false">
<el-form :model="dataForm" ref="dataForm" :label-width="$i18n.locale === 'en-US' ? '160px' : '160px'">
<el-form-item label="昵称:">
<span>{{dataForm.nickname}}</span>
</el-form-item>
<el-form-item label="手机号:">
<span>{{dataForm.mobile}}</span>
</el-form-item>
<el-form-item label="注册时间:">
<span>{{dataForm.registerTime}}</span>
</el-form-item>
<el-form-item label="最后登录时间:">
<span>{{dataForm.lastLoginTime}}</span>
</el-form-item>
<el-form-item label="最后登录IP:">
<span>{{dataForm.lastLoginIp}}</span>
</el-form-item>
</el-form>
<template slot="footer">
<el-button @click="visible = false">关闭</el-button>
</template>
</el-dialog>
</template>
<script>
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
nickname: '',
mobile: '',
registerTime: '',
lastLoginTime: '',
lastLoginIp: ''
}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
this.$refs['dataForm'].resetFields()
if (this.dataForm.id) {
this.getInfo()
}
})
},
//
getInfo () {
this.$http.get(`/app-user/user/${this.dataForm.id}`).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
}).catch(() => { })
}
}
}
</script>

91
src/views/modules/user/partyauthenticationfailed.vue

@ -0,0 +1,91 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-user__partyauthenticationfailed}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="姓名"><el-input v-model="dataForm.realName" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="手机号"><el-input v-model="dataForm.mobile" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="身份证号"><el-input v-model="dataForm.identityNo" placeholder="请输入" clearable></el-input></el-form-item>
<span class="demonstration">认证时间</span>&nbsp;&nbsp;
<el-date-picker @change='setRegistTime' v-model="time" value-format="yyyy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>&nbsp;
<el-form-item>
<el-button @click="getDataList()">{{ $t('query') }}</el-button>
</el-form-item>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column prop="realName" label="姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" header-align="center" align="center"></el-table-column>
<el-table-column prop="gridName" label="认证网格" header-align="center" align="center"></el-table-column>
<el-table-column prop="createdTime" label="认证时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居民住址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button v-if="$hasPermission('partyauthenticationfailed:view')" type="text" size="small" @click="addOrUpdateHandle(scope.row.userId)">{{ $t('look') }}</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination
:current-page="page"
:page-sizes="[10, 20, 50, 100]"
:page-size="limit"
:total="total"
layout="total, sizes, prev, pager, next, jumper"
@size-change="pageSizeChangeHandle"
@current-change="pageCurrentChangeHandle">
</el-pagination>
<!-- 查看 -->
<add-or-update v-if="addOrUpdateVisible"
ref="addOrUpdate"
@refreshDataList="getDataList"></add-or-update>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './partyauthenticationfailed-add-or-update'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: '/app-user/partyauthenticationfailed/page',
getDataListIsPage: true,
deleteURL: '/app-user/partyauthenticationfailed',
deleteIsBatch: true
},
dataForm: {
realName: '',
mobile: '',
identityNo: '',
startTime: '',
endTime: ''
},
time: ''
}
},
methods: {
setRegistTime () {
if (this.time === null) {
this.dataForm.startTime = ''
this.dataForm.endTime = ''
} else {
this.dataForm.startTime = this.time[0]
this.dataForm.endTime = this.time[1]
}
},
// /
addOrUpdateHandle (id) {
this.addOrUpdateVisible = true
this.$nextTick(() => {
this.$refs.addOrUpdate.dataForm.id = id
this.$refs.addOrUpdate.init()
})
}
},
components: {
AddOrUpdate
}
}
</script>

209
src/views/modules/user/pass-authentication.vue

@ -0,0 +1,209 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-epdc__user}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" clearable placeholder="请选择" @change="getCommunityList">
<el-option v-for="(item, index) in streetOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId" clearable placeholder="请选择" @change="getGridList">
<el-option v-for="(item,index) in communityOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable placeholder="请选择">
<el-option v-for="(item,index) in gridOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名"><el-input v-model="dataForm.realName" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="手机号"><el-input v-model="dataForm.mobile" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="身份证号"><el-input v-model="dataForm.identityNo" placeholder="请输入" clearable></el-input></el-form-item>
<div class="block">
<el-form-item label="是否是党员">
<el-select v-model="dataForm.partyFlag" clearable placeholder="请选择" >
<el-option v-for="(item,index) in partyFlagOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<span class="demonstration">注册时间</span>&nbsp;&nbsp;
<el-date-picker @change='setRegistTime' v-model="time" value-format="yyyy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>&nbsp;
<el-form-item><el-button @click="getDataList()">{{ $t('query') }}</el-button></el-form-item>
<el-form-item><el-button v-if="$hasPermission('epdc:user:export')" type="primary" @click="exportHandle()">{{ $t('export') }}</el-button></el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column label="序号" width="70px"><template slot-scope="scope"> {{scope.$index+1}} </template></el-table-column>
<el-table-column prop="realName" label="真实姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" header-align="center" align="center"></el-table-column>
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="partyFlag" label="是否党员" :formatter="formatPartyFlag" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="审核状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居住地址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="userGridHandle(scope.row.id)">管理网格</el-button>
<el-button type="text" size="small" @click="userDetailHandle(scope.row.id)">查看</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" @current-change="pageCurrentChangeHandle"></el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<user-detail v-if="userDetailVisible" ref="userDetail" @refreshDataList="getDataList"></user-detail>
<user-grid v-if="userGridVisible" ref="userGrid" @refreshDataList="getDataList"></user-grid>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './user-add-or-update'
import UserDetail from './user-detail'
import UserGrid from './user-grid'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: 'app-user/user/page',
getDataListIsPage: true,
deleteURL: '/app-use/user',
deleteIsBatch: true,
exportURL: '/app-user/user/export'
},
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
realName: '',
mobile: '',
identityNo: '',
startTime: '',
endTime: '',
partyFlag: '',
state: '3'
},
userDetailVisible: false,
userGridVisible: false,
streetOptions: [],
communityOptions: [],
gridOptions: [],
time: '',
tabFlag: '3',
state: '未认证用户',
partyFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }]
}
},
created () {
this.getStreetList()
},
methods: {
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => {})
},
getCommunityList () {
this.communityOptions = this.gridOptions = []
this.dataForm.communityId = this.dataForm.gridId = null
if (this.dataForm.streetId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => {})
}
},
getGridList () {
this.gridOptions = []
this.dataForm.gridId = null
if (this.dataForm.communityId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => {})
}
},
setRegistTime () {
this.dataForm.startTime = this.time[0]
this.dataForm.endTime = this.time[1]
},
formatState: function (row, column) {
let state = row.state
if (state === '1') {
return '待审核'
} else if (state === '2') {
return '审核不通过'
} else if (state === '3') {
return '审核通过'
} else if (state === '0') {
return '已注册'
}
},
formatPartyFlag: function (row, column) {
return row.partyFlag === '1' ? '是' : row.state === '0' ? '未知' : '否'
},
//
getDataList () {
if (this.time === null) {
this.dataForm.startTime = ''
this.dataForm.endTime = ''
}
this.dataListLoading = true
this.$http.get(
this.mixinViewModuleOptions.getDataListURL,
{
params: {
order: this.order,
orderField: this.orderField,
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
...this.dataForm
}
}
).then(({ data: res }) => {
this.dataListLoading = false
if (res.code !== 0) {
this.dataList = []
this.total = 0
return this.$message.error(res.msg)
}
this.dataList = this.mixinViewModuleOptions.getDataListIsPage ? res.data.list : res.data
this.total = this.mixinViewModuleOptions.getDataListIsPage ? res.data.total : 0
}).catch(() => {
this.dataListLoading = false
})
},
userDetailHandle (userId) {
this.userDetailVisible = true
this.$nextTick(() => {
this.$refs.userDetail.dataForm.id = userId
this.$refs.userDetail.init()
})
},
//
userGridHandle (userId) {
this.userGridVisible = true
this.$nextTick(() => {
this.$refs.userGrid.dataForm.id = userId
this.$refs.userGrid.init()
})
}
},
components: {
AddOrUpdate,
UserDetail,
UserGrid
}
}
</script>

190
src/views/modules/user/unauthorized.vue

@ -0,0 +1,190 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-epdc__user}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" clearable placeholder="请选择" @change="getCommunityList">
<el-option v-for="(item,index) in streetOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId" clearable placeholder="请选择" @change="getGridList">
<el-option v-for="(item,index) in communityOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable placeholder="请选择">
<el-option v-for="(item,index) in gridOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名"><el-input v-model="dataForm.realName" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="手机号"><el-input v-model="dataForm.mobile" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="身份证号"><el-input v-model="dataForm.identityNo" placeholder="请输入" clearable></el-input></el-form-item>
<div class="block">
<span class="demonstration">注册时间</span>&nbsp;&nbsp;
<el-date-picker @change='setRegistTime' v-model="time" value-format="yyyy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>&nbsp;
<el-form-item><el-button @click="getDataList()">{{ $t('query') }}</el-button></el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('epdc:user:export')" type="primary" @click="exportHandle()">{{ $t('export') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column label="序号" width="70px"><template slot-scope="scope">{{scope.$index+1}}</template></el-table-column>
<el-table-column prop="realName" label="真实姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" header-align="center" align="center"></el-table-column>
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="注册状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="加入网格时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="myGridName" label="所属网格(街道-社区-网格)" header-align="center" align="center"></el-table-column>
<!--<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="100">
<template slot-scope="scope"><el-button type="text" size="small" @click="userDetailHandle(scope.row.id)">查看</el-button></template>
</el-table-column> -->
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" @current-change="pageCurrentChangeHandle"></el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<user-detail v-if="userDetailVisible" ref="userDetail" @refreshDataList="getDataList"></user-detail>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './user-add-or-update'
import UserDetail from './user-detail'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: 'app-user/user/page',
getDataListIsPage: true,
deleteURL: '/app-use/user',
deleteIsBatch: true,
exportURL: '/app-user/user/export'
},
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
realName: '',
mobile: '',
identityNo: '',
startTime: '',
endTime: '',
partyFlag: '',
state: '0'
},
userDetailVisible: false,
streetOptions: [],
communityOptions: [],
gridOptions: [],
time: '',
tabFlag: '0',
state: '未认证用户',
partyFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }]
}
},
created () {
this.getStreetList()
},
methods: {
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => {})
},
getCommunityList () {
this.communityOptions = this.gridOptions = []
this.dataForm.communityId = this.dataForm.gridId = null
if (this.dataForm.streetId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => {})
}
},
getGridList () {
this.gridOptions = []
this.dataForm.gridId = null
if (this.dataForm.communityId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => {})
}
},
setRegistTime () {
this.dataForm.startTime = this.time[0]
this.dataForm.endTime = this.time[1]
},
formatState: function (row, column) {
let state = row.state
if (state === '1') {
return '待审核'
} else if (state === '2') {
return '审核不通过'
} else if (state === '3') {
return '审核通过'
} else if (state === '0') {
return '已注册'
}
},
formatPartyFlag: function (row, column) {
return row.partyFlag === '1' ? '是' : row.state === '0' ? '未知' : '否'
},
//
getDataList () {
if (this.time === null) {
this.dataForm.startTime = ''
this.dataForm.endTime = ''
}
this.dataListLoading = true
this.$http.get(
this.mixinViewModuleOptions.getDataListURL,
{
params: {
order: this.order,
orderField: this.orderField,
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
...this.dataForm
}
}
).then(({ data: res }) => {
this.dataListLoading = false
if (res.code !== 0) {
this.dataList = []
this.total = 0
return this.$message.error(res.msg)
}
this.dataList = this.mixinViewModuleOptions.getDataListIsPage ? res.data.list : res.data
this.total = this.mixinViewModuleOptions.getDataListIsPage ? res.data.total : 0
}).catch(() => {
this.dataListLoading = false
})
},
userDetailHandle (userId) {
this.userDetailVisible = true
this.$nextTick(() => {
this.$refs.userDetail.dataForm.id = userId
this.$refs.userDetail.init()
})
}
},
components: {
AddOrUpdate,
UserDetail
}
}
</script>

33
src/views/modules/user/user-add-or-update.vue

@ -1,6 +1,7 @@
<template>
<el-dialog :visible.sync="visible"
title="审核"
:modal-append-to-body='false'
:close-on-click-modal="false"
:close-on-press-escape="false">
<el-form :model="dataForm"
@ -17,14 +18,22 @@
<span>{{dataForm.mobile}}</span>
</el-form-item>
<el-form-item label="身份证号"
prop="identityNo">
prop="identityNo"
v-if="false">
<span>{{dataForm.identityNo}}</span>
</el-form-item>
<el-form-item label="认证历史"
prop="realName"
v-if="true">
<span>累计提交认证{{dataForm.totalSubmitNum}}&nbsp;&nbsp;&nbsp;通过{{dataForm.totalPassSubmitNum}},&nbsp;不通过{{dataForm.totalFailNum}}</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<el-button v-if="dataForm.totalSubmitNum>0" type="text" size="small" @click="userAuthenticateHistoryListHandle(dataForm.id)">查看详情</el-button>
</el-form-item>
<el-form-item label="居民住址"
prop="address">
<span>{{dataForm.address}}</span>
</el-form-item>
<el-form-item label="是否党员"
<!-- <el-form-item label="是否党员"
prop="partyFlag">
<template>
<el-radio v-model="dataForm.partyFlag"
@ -32,7 +41,7 @@
<el-radio v-model="dataForm.partyFlag"
label="0"></el-radio>
</template>
</el-form-item>
</el-form-item> -->
<!-- <el-form-item label="干部下沉">
<el-select v-model="dataForm.cadreFlag"
clearable
@ -91,11 +100,14 @@
<el-button type="primary"
@click="dataFormSubmitHandle()">{{ $t('confirm') }}</el-button>
</template>
<authenticate-history v-if="authenticateHistoryVisible" ref="authenticateHistory"></authenticate-history>
</el-dialog>
</template>
<script>
import debounce from 'lodash/debounce'
import AuthenticateHistory from './authenticate-history'
export default {
data () {
return {
@ -108,6 +120,7 @@ export default {
tagIds: [],
remark: ''
},
authenticateHistoryVisible: false,
cadreOptions: [{ cadreFlag: '1', cadreTitle: '是' }, { cadreFlag: '0', cadreTitle: '否' }],
tagOptions: [],
userGridList: []
@ -177,7 +190,8 @@ export default {
id: this.dataForm.id,
state: this.dataForm.state,
partyFlag: this.dataForm.partyFlag,
cadreFlag: this.dataForm.cadreFlag
cadreFlag: this.dataForm.cadreFlag,
remark: this.dataForm.remark
}
this.$http[!this.dataForm.id ? 'post' : 'post']('/app-user/user/audit/', postData).then(({ data: res }) => {
if (res.code !== 0) {
@ -203,7 +217,18 @@ export default {
return this.$message.error(res.msg)
}
}).catch(() => { })
},
//
userAuthenticateHistoryListHandle (userId) {
this.authenticateHistoryVisible = true
this.$nextTick(() => {
this.$refs.authenticateHistory.dataForm.userId = userId
this.$refs.authenticateHistory.init()
})
}
},
components: {
AuthenticateHistory
}
}
</script>

144
src/views/modules/user/user-grid.vue

@ -0,0 +1,144 @@
<template>
<el-dialog
:visible.sync="visible"
title="扫码网格"
:close-on-click-modal="false"
:close-on-press-escape="false">
<el-table :data="userGridList" style="width: 100%">
<el-table-column prop="street" label="街道"> </el-table-column>
<el-table-column prop="community" label="社区"> </el-table-column>
<el-table-column prop="grid" label="网格"> </el-table-column>
<el-table-column
v-if="false"
prop="leaderFlag"
label="是否为网格长"
:formatter="showLeaderFlagFormatter"
>
</el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="unbindGridHandle(scope.row.id,scope.row.userId)">解除</el-button>
</template>
</el-table-column>
</el-table>
<template slot="footer">
<el-button @click="visible = false" type="primary">{{
$t("confirm")
}}</el-button>
</template>
</el-dialog>
</template>
<script>
export default {
data () {
return {
visible: false,
dataForm: {
id: '',
partyFlag: '',
cadreFlag: '',
state: '',
tagIds: [],
remark: ''
},
partyFlagOptions: [
{ id: '0', name: '不是' },
{ id: '1', name: '是' }
],
cadreOptions: [
{ cadreFlag: '1', cadreTitle: '是' },
{ cadreFlag: '0', cadreTitle: '否' }
],
tagOptions: [],
userGridList: []
}
},
computed: {
dataRule () {
return {}
}
},
methods: {
init () {
this.visible = true
this.$nextTick(() => {
if (this.dataForm.id) {
this.getInfo()
}
})
this.getTagOptions()
},
getTagOptions () {
this.$http
.get(`/app-user/usertag/list`)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.tagOptions = res.data
})
.catch(() => {})
},
//
getInfo () {
this.$http
.get(`/app-user/user/${this.dataForm.id}`)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.dataForm = {
...this.dataForm,
...res.data
}
this.dataForm.tagIds = []
})
.catch(() => {})
this.$http
.get(`/app-user/usergrid/listUserGrid/${this.dataForm.id}`)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.userGridList = res.data
})
.catch(() => {})
},
showLeaderFlagFormatter (row, column, cellValue, index) {
console.log(cellValue)
if (cellValue === '1') {
return '是'
} else {
return '否'
}
},
unbindGridHandle (id) {
this.$confirm('确定解除网格关系?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$http
.get(`/app-user/usergrid/unbindGridHandle/` + id)
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.init()
})
.catch(() => {})
this.$message({
type: 'success',
message: '解绑成功!'
})
}).catch(() => {
this.$message({
type: 'info',
message: '取消解绑'
})
})
}
}
}
</script>

58
src/views/modules/user/user.vue

@ -3,6 +3,53 @@
<div class="mod-epdc__user}">
<template>
<el-tabs v-model="tabFlag" type="border-card" @tab-click="handleClick">
<el-tab-pane name="0">
<span slot="label"><i class="el-icon-date"></i> 未认证用户</span>
<template>
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" clearable placeholder="请选择" @change="getCommunityList">
<el-option v-for="(item,index) in streetOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId" clearable placeholder="请选择" @change="getGridList">
<el-option v-for="(item,index) in communityOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable placeholder="请选择">
<el-option v-for="(item,index) in gridOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名"><el-input v-model="dataForm.realName" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="手机号"><el-input v-model="dataForm.mobile" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="身份证号"><el-input v-model="dataForm.identityNo" placeholder="请输入" clearable></el-input></el-form-item>
<div class="block">
<span class="demonstration">注册时间</span>&nbsp;&nbsp;
<el-date-picker @change='setRegistTime' v-model="time" value-format="yyyy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>&nbsp;
<el-form-item><el-button @click="getDataList()">{{ $t('query') }}</el-button></el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('epdc:user:export')" type="primary" @click="exportHandle()">{{ $t('export') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column label="序号" width="70px"><template slot-scope="scope">{{scope.$index+1}}</template></el-table-column>
<el-table-column prop="realName" label="真实姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" header-align="center" align="center"></el-table-column>
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="注册状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="加入网格时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="myGridName" label="所属网格(街道-社区-网格)" header-align="center" align="center"></el-table-column>
<!--<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="100">
<template slot-scope="scope"><el-button type="text" size="small" @click="userDetailHandle(scope.row.id)">查看</el-button></template>
</el-table-column> -->
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" @current-change="pageCurrentChangeHandle"></el-pagination>
</template>
</el-tab-pane>
<el-tab-pane name="1">
<span slot="label"><i class="el-icon-date"></i> 待审核用户</span>
<template>
@ -42,6 +89,7 @@
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="注册状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居住地址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope"><el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">审核</el-button></template>
</el-table-column>
@ -92,6 +140,7 @@
<el-table-column prop="partyFlag" label="是否党员" :formatter="formatPartyFlag" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="审核状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居住地址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="100">
<template slot-scope="scope"><el-button type="text" size="small" @click="userDetailHandle(scope.row.id)">查看</el-button></template>
</el-table-column>
@ -138,6 +187,7 @@
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="审核状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居住地址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="100">
<template slot-scope="scope"><el-button type="text" size="mini" @click="userDetailHandle(scope.row.id)">查看</el-button></template>
</el-table-column>
@ -180,15 +230,15 @@ export default {
startTime: '',
endTime: '',
partyFlag: '',
state: '1'
state: '0'
},
userDetailVisible: false,
streetOptions: [],
communityOptions: [],
gridOptions: [],
time: '',
tabFlag: '1',
state: '待审核用户',
tabFlag: '0',
state: '未认证用户',
partyFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }]
}
},
@ -240,6 +290,8 @@ export default {
return '审核不通过'
} else if (state === '3') {
return '审核通过'
} else if (state === '0') {
return '已注册'
}
},
formatPartyFlag: function (row, column) {

190
src/views/modules/user/wait-authentication.vue

@ -0,0 +1,190 @@
<template>
<el-card shadow="never" class="aui-card--fill">
<div class="mod-epdc__user}">
<el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
<el-form-item label="街道">
<el-select v-model="dataForm.streetId" clearable placeholder="请选择" @change="getCommunityList">
<el-option v-for="(item,index) in streetOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="社区">
<el-select v-model="dataForm.communityId" clearable placeholder="请选择" @change="getGridList">
<el-option v-for="(item,index) in communityOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="网格">
<el-select v-model="dataForm.gridId" clearable placeholder="请选择">
<el-option v-for="(item,index) in gridOptions" :key="index" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名"><el-input v-model="dataForm.realName" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="手机号"><el-input v-model="dataForm.mobile" placeholder="请输入" clearable></el-input></el-form-item>
<el-form-item label="身份证号"><el-input v-model="dataForm.identityNo" placeholder="请输入" clearable></el-input></el-form-item>
<div class="block">
<span class="demonstration">注册时间</span>&nbsp;&nbsp;
<el-date-picker @change='setRegistTime' v-model="time" value-format="yyyy-MM-dd" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>&nbsp;
<el-form-item><el-button @click="getDataList()">{{ $t('query') }}</el-button></el-form-item>
<el-form-item>
<el-button v-if="$hasPermission('epdc:user:export')" type="primary" @click="exportHandle()">{{ $t('export') }}</el-button>
</el-form-item>
</div>
</el-form>
<el-table v-loading="dataListLoading" :data="dataList" border @selection-change="dataListSelectionChangeHandle" style="width: 100%;">
<el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
<el-table-column label="序号" width="70px"><template slot-scope="scope">{{scope.$index+1}}</template></el-table-column>
<el-table-column prop="realName" label="真实姓名" header-align="center" align="center"></el-table-column>
<el-table-column prop="mobile" label="手机号" header-align="center" align="center"></el-table-column>
<el-table-column prop="identityNo" label="身份证号" header-align="center" align="center"></el-table-column>
<el-table-column prop="state" label="注册状态" :formatter="formatState" header-align="center" align="center"></el-table-column>
<el-table-column prop="registerTime" label="注册时间" header-align="center" align="center"></el-table-column>
<el-table-column prop="address" label="居住地址" header-align="center" align="center"></el-table-column>
<el-table-column :label="$t('handle')" fixed="right" header-align="center" align="center" width="150">
<template slot-scope="scope"><el-button type="text" size="small" @click="addOrUpdateHandle(scope.row.id)">审核</el-button></template>
</el-table-column>
</el-table>
<el-pagination :current-page="page" :page-sizes="[10, 20, 50, 100]" :page-size="limit" :total="total" layout="total, sizes, prev, pager, next, jumper" @size-change="pageSizeChangeHandle" @current-change="pageCurrentChangeHandle"></el-pagination>
<!-- 弹窗, 新增 / 修改 -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
<user-detail v-if="userDetailVisible" ref="userDetail" @refreshDataList="getDataList"></user-detail>
</div>
</el-card>
</template>
<script>
import mixinViewModule from '@/mixins/view-module'
import AddOrUpdate from './user-add-or-update'
import UserDetail from './user-detail'
export default {
mixins: [mixinViewModule],
data () {
return {
mixinViewModuleOptions: {
getDataListURL: 'app-user/user/page',
getDataListIsPage: true,
deleteURL: '/app-use/user',
deleteIsBatch: true,
exportURL: '/app-user/user/export'
},
dataForm: {
id: '',
streetId: '',
communityId: '',
gridId: '',
realName: '',
mobile: '',
identityNo: '',
startTime: '',
endTime: '',
partyFlag: '',
state: '1'
},
userDetailVisible: false,
streetOptions: [],
communityOptions: [],
gridOptions: [],
time: '',
tabFlag: '1', //
state: '未认证用户',
partyFlagOptions: [{ id: '1', name: '是' }, { id: '0', name: '否' }]
}
},
created () {
this.getStreetList()
},
methods: {
getStreetList () {
this.$http.get(`/sys/dept/sublist/` + (localStorage.getItem('street') === null ? '1169154711480528897' : localStorage.getItem('street'))).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.streetOptions = res.data
}).catch(() => {})
},
getCommunityList () {
this.communityOptions = this.gridOptions = []
this.dataForm.communityId = this.dataForm.gridId = null
if (this.dataForm.streetId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.streetId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.communityOptions = res.data
}).catch(() => {})
}
},
getGridList () {
this.gridOptions = []
this.dataForm.gridId = null
if (this.dataForm.communityId) {
this.$http.get(`/sys/dept/sublist/` + this.dataForm.communityId).then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg)
}
this.gridOptions = res.data
}).catch(() => {})
}
},
setRegistTime () {
this.dataForm.startTime = this.time[0]
this.dataForm.endTime = this.time[1]
},
formatState: function (row, column) {
let state = row.state
if (state === '1') {
return '待审核'
} else if (state === '2') {
return '审核不通过'
} else if (state === '3') {
return '审核通过'
} else if (state === '0') {
return '已注册'
}
},
formatPartyFlag: function (row, column) {
return row.partyFlag === '1' ? '是' : row.state === '0' ? '未知' : '否'
},
//
getDataList () {
if (this.time === null) {
this.dataForm.startTime = ''
this.dataForm.endTime = ''
}
this.dataListLoading = true
this.$http.get(
this.mixinViewModuleOptions.getDataListURL,
{
params: {
order: this.order,
orderField: this.orderField,
page: this.mixinViewModuleOptions.getDataListIsPage ? this.page : null,
limit: this.mixinViewModuleOptions.getDataListIsPage ? this.limit : null,
...this.dataForm
}
}
).then(({ data: res }) => {
this.dataListLoading = false
if (res.code !== 0) {
this.dataList = []
this.total = 0
return this.$message.error(res.msg)
}
this.dataList = this.mixinViewModuleOptions.getDataListIsPage ? res.data.list : res.data
this.total = this.mixinViewModuleOptions.getDataListIsPage ? res.data.total : 0
}).catch(() => {
this.dataListLoading = false
})
},
userDetailHandle (userId) {
this.userDetailVisible = true
this.$nextTick(() => {
this.$refs.userDetail.dataForm.id = userId
this.$refs.userDetail.init()
})
}
},
components: {
AddOrUpdate,
UserDetail
}
}
</script>

13
src/views/pages/login.vue

@ -71,6 +71,9 @@
</el-form-item>
</el-form>
</div>
<div v-if="isHidden">
<p><a href="https://dl.google.com/tag/s/appguid%3D%7B8A69D345-D564-463C-AFF1-A69D9E530F96%7D%26iid%3D%7B0EBBEC46-30F5-946B-A54E-5628DFF12914%7D%26lang%3Den%26browser%3D4%26usagestats%3D1%26appname%3DGoogle%2520Chrome%26needsadmin%3Dprefers%26ap%3Dx64-stable-statsdef_1%26installdataindex%3Ddefaultbrowser/update2/installers/ChromeSetup.exe" target="_blank">点击此处下载谷歌浏览器</a></p>
</div>
<!-- <div class="login-footer">
<p><a href="http://www.elinkit.com.cn/"
target="_blank">{{ $t('login.copyright') }}</a>2020 © www.elinkit.com.cn</p>
@ -90,6 +93,7 @@ export default {
return {
i18nMessages: messages,
captchaPath: '',
isHidden: false,
dataForm: {
username: '',
password: '',
@ -115,8 +119,17 @@ export default {
},
created () {
this.getCaptcha()
this.myBrowser()
},
methods: {
myBrowser () {
var userAgent = navigator.userAgent
if (userAgent.indexOf('Chrome') > -1) {
this.isHidden = false
} else {
this.isHidden = true
}
},
//
getCaptcha () {
this.dataForm.uuid = getUUID()

Loading…
Cancel
Save