Browse Source

微笑榆山-工作端-更换logo 初始化提交

master tav1.0.2
lihenian 5 years ago
parent
commit
4a96721579
  1. 13
      .gitignore
  2. 18
      api/certificationrequest.js
  3. 13
      api/checkpendingrequest.js
  4. 280
      api/clerkOnline.js
  5. 13
      api/comment.js
  6. 58
      api/common.js
  7. 13
      api/grademanagerequest.js
  8. 49
      api/issueDetail.js
  9. 46
      api/itemDetail.js
  10. 201
      api/monthlyReport.js
  11. 32
      api/myFootPrint.js
  12. 118
      api/noteIndex.js
  13. 8
      api/project.js
  14. 37
      api/projectprogress..js
  15. 8
      api/userManage.js
  16. 76
      api/weeklyIndex.js
  17. 28
      app.js
  18. 92
      app.json
  19. 211
      app.wxss
  20. 69
      components/comments/comments.js
  21. 3
      components/comments/comments.json
  22. 30
      components/comments/comments.wxml
  23. 110
      components/comments/comments.wxss
  24. 53
      components/event/eventDetail/eventDetail.js
  25. 4
      components/event/eventDetail/eventDetail.json
  26. 79
      components/event/eventDetail/eventDetail.wxml
  27. 128
      components/event/eventDetail/eventDetail.wxss
  28. 161
      components/event/handleSubmit/handleSubmit/handleSubmit.js
  29. 6
      components/event/handleSubmit/handleSubmit/handleSubmit.json
  30. 25
      components/event/handleSubmit/handleSubmit/handleSubmit.wxml
  31. 85
      components/event/handleSubmit/handleSubmit/handleSubmit.wxss
  32. 336
      components/event/handleSubmit/handleSubmitItem/handleSubmitItem.js
  33. 7
      components/event/handleSubmit/handleSubmitItem/handleSubmitItem.json
  34. 67
      components/event/handleSubmit/handleSubmitItem/handleSubmitItem.wxml
  35. 130
      components/event/handleSubmit/handleSubmitItem/handleSubmitItem.wxss
  36. 187
      components/event/handleSubmit/waitResponse/waitResponse.js
  37. 7
      components/event/handleSubmit/waitResponse/waitResponse.json
  38. 38
      components/event/handleSubmit/waitResponse/waitResponse.wxml
  39. 86
      components/event/handleSubmit/waitResponse/waitResponse.wxss
  40. 49
      components/event/issueProcessList/issueProcessList.js
  41. 7
      components/event/issueProcessList/issueProcessList.json
  42. 80
      components/event/issueProcessList/issueProcessList.wxml
  43. 141
      components/event/issueProcessList/issueProcessList.wxss
  44. 49
      components/event/itemProcessList/itemProcessList.js
  45. 7
      components/event/itemProcessList/itemProcessList.json
  46. 116
      components/event/itemProcessList/itemProcessList.wxml
  47. 145
      components/event/itemProcessList/itemProcessList.wxss
  48. 23
      components/icon/index.js
  49. 3
      components/icon/index.json
  50. 24
      components/icon/index.ts
  51. 7
      components/icon/index.wxml
  52. 52
      components/icon/index.wxss
  53. 14
      components/loadMore/loadMore.js
  54. 3
      components/loadMore/loadMore.json
  55. 12
      components/loadMore/loadMore.ts
  56. 9
      components/loadMore/loadMore.wxml
  57. 32
      components/loadMore/loadMore.wxss
  58. 46
      components/navbar/index.js
  59. 6
      components/navbar/index.json
  60. 60
      components/navbar/index.ts
  61. 12
      components/navbar/index.wxml
  62. 81
      components/navbar/index.wxss
  63. 15
      components/nodata/nodata.js
  64. 4
      components/nodata/nodata.json
  65. 30
      components/nodata/nodata.ts
  66. 5
      components/nodata/nodata.wxml
  67. 19
      components/nodata/nodata.wxss
  68. 86
      components/project/project.js
  69. 6
      components/project/project.json
  70. 60
      components/project/project.wxml
  71. 182
      components/project/project.wxss
  72. 8
      components/skeleton/subject/subject.js
  73. 3
      components/skeleton/subject/subject.json
  74. 13
      components/skeleton/subject/subject.wxml
  75. 81
      components/skeleton/subject/subject.wxss
  76. 8
      components/skeleton/userManage/userManage.js
  77. 3
      components/skeleton/userManage/userManage.json
  78. 18
      components/skeleton/userManage/userManage.wxml
  79. 39
      components/skeleton/userManage/userManage.wxss
  80. 107
      components/subject/subject.js
  81. 6
      components/subject/subject.json
  82. 97
      components/subject/subject.wxml
  83. 186
      components/subject/subject.wxss
  84. 117
      components/userManage/userManage.js
  85. 6
      components/userManage/userManage.json
  86. 43
      components/userManage/userManage.wxml
  87. 97
      components/userManage/userManage.wxss
  88. 1
      dist/accordion-group/index.js
  89. 6
      dist/accordion-group/index.json
  90. 3
      dist/accordion-group/index.wxml
  91. 1
      dist/accordion-group/index.wxss
  92. 1
      dist/accordion/index.js
  93. 3
      dist/accordion/index.json
  94. 18
      dist/accordion/index.wxml
  95. 1
      dist/accordion/index.wxss
  96. 1
      dist/actionsheet/index.js
  97. 6
      dist/actionsheet/index.json
  98. 41
      dist/actionsheet/index.wxml
  99. 1
      dist/actionsheet/index.wxss
  100. 1
      dist/alert/index.js

13
.gitignore

@ -0,0 +1,13 @@
*.class
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
/project.config.json
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
.idea/

18
api/certificationrequest.js

@ -0,0 +1,18 @@
var fly = require('../utils/request.js')
module.exports = {
getResidentDetail: getResidentDetail,
getPartyMemberDetail: getPartyMemberDetail,
authenticateHistory: authenticateHistory
}
// 居民用户详情
function getResidentDetail (params) {
return fly.get('work/user/swagger/residentDetail', params)
}
// 党员详情
function getPartyMemberDetail (params) {
return fly.get('work/user/swagger/partyMemberDetail', params)
}
//认证历史详情
function authenticateHistory (params) {
return fly.get('work/user/swagger/authenticateHistory', params)
}

13
api/checkpendingrequest.js

@ -0,0 +1,13 @@
var fly = require('../utils/request.js')
module.exports = {
getResidentDetail: getResidentDetail,
authenticateResident: authenticateResident
}
// 居民用户详情
function getResidentDetail (params) {
return fly.get('work/user/swagger/residentDetail', params)
}
// 认证
function authenticateResident (params) {
return fly.post('work/user/swagger/authenticateResident', params)
}

280
api/clerkOnline.js

@ -0,0 +1,280 @@
import request from '../utils/requestClerk'
/**
* 获得消息阅读情况列表
* noticeId 消息id
* readType 阅读类型0未读1已读
*/
export function getNoticeReadList({
noticeId,
readType
}) {
return request({
method: 'GET',
url: 'cloudAnalysis/masterGroup/getNoticeReadList',
options: {
noticeId,
readType
}
})
}
/**
* 获得群聊消息列表 话题通知置顶 时间优先
* pageIndex 0
* pageSize 10
* id 10
*/
export function getGridEvaList({
pageIndex,
pageSize,
id
}) {
return request({
method: 'GET',
url: 'cloudAnalysis/masterGroup/getGroupMessageList',
options: {
pageIndex,
pageSize,
id
}
})
}
/**
* 获得话题详情
*/
export function getTopicDetail(topicId) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/getTopicDetail/${topicId}`,
})
}
/**
* 查看群成员列表
*/
export function getMemberList() {
return request({
method: 'GET',
url: 'cloudAnalysis/masterGroup/getMemberList'
})
}
/**
* 通知详情
*/
export function getNoticeDetail(noticeId) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/getNoticeDetail/${noticeId}`,
})
}
/**
* 置顶通知置顶/取消
* noticeId 通知ID
* topType 操作类型1置顶2取消
*/
export function setTopNotice({
noticeId,
topType
}) {
return request({
method: 'GET',
url: 'cloudAnalysis/masterGroup/setTopNotice',
options: {
noticeId,
topType
}
})
}
/**
* 关闭通知
*/
export function closeNotice(noticeId) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/closeNotice/${noticeId}`,
})
}
/**
* 发布话题
* topicContent 话题内容
* images 图片
*/
export function topicSubmit({
topicContent,
images
}) {
return request({
method: 'POST',
url: 'cloudAnalysis/masterGroup/topicSubmit',
options: {
topicContent,
images
}
})
}
/**
* 发布通知
* noticeTitle 通知标题
* noticeContent 话题内容
* images 图片
*/
export function noticeSubmit({
noticeTitle,
noticeContent,
images
}) {
return request({
method: 'POST',
url: 'cloudAnalysis/masterGroup/noticeSubmit',
options: {
noticeTitle,
noticeContent,
images
}
})
}
/**
* 置顶话题置顶/取消
* topicId 话题id
* topType 操作类型1置顶2取消
*/
export function SetTopTopic({
topicId,
topType
}) {
return request({
method: 'GET',
url: 'cloudAnalysis/masterGroup/SetTopTopic',
options: {
topicId,
topType
}
})
}
/**
* 置顶话题置顶/取消
* topicId 话题id
*/
export function closeTopic(topicId) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/closeTopic/${topicId}`,
})
}
/**
* 表态话题/
* topicId 话题id
* attitude 表态 012取消赞3取消踩
*/
export function topicStatement({
topicId,
attitude
}) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/topicStatement`,
options: {
topicId,
attitude
}
})
}
/**
* 获取评论列表
* pageIndex 0
* pageSize 10
* topicId 话题id
* orderType 排序方式 0: 获取最新列表1: 获取最热列表
*/
export function getCommentList({
pageIndex,
pageSize,
topicId,
orderType
}) {
return request({
method: 'GET',
url: 'cloudAnalysis/masterGroup/getCommentList',
options: {
pageIndex,
pageSize,
topicId,
orderType
}
})
}
/**
* 表态评论/
* topicId 话题id
* attitude 表态 01
* commentId 表态 01
*/
export function commentStatement({
attitude,
commentId,
topicId
}) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/commentStatement`,
options: {
attitude,
topicId,
commentId
}
})
}
/**
* 提交评论
* topicId 话题id
* faCommentId 父评论ID
* content 评论内容
*/
export function commentSubmit({
topicId,
faCommentId,
content
}) {
return request({
method: 'POST',
url: `cloudAnalysis/masterGroup/commentSubmit`,
options: {
topicId,
faCommentId,
content
}
})
}
/**
* 判断是否更新头像
*/
export function checkUpdateAvatar() {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/checkUpdateAvatar`,
})
}
/**
* 更新头像
* avatar 头像地址
*/
export function updateAvatar({
avatar
}) {
return request({
method: 'GET',
url: `cloudAnalysis/masterGroup/updateAvatar`,
options: {
avatar
}
})
}

13
api/comment.js

@ -0,0 +1,13 @@
var fly = require('../utils/request.js')
module.exports = {
getCommentList: getCommentList,
getCommentReplyList:getCommentReplyList
}
//事件评论列表
function getCommentList(param) {
return fly.get('work/event/event/commentList', param)
}
//事件评论回复列表
function getCommentReplyList(param) {
return fly.get('work/event/event/commentReplyList', param)
}

58
api/common.js

@ -0,0 +1,58 @@
var fly = require('../utils/request.js')
module.exports = {
getToken: getToken,
login: login,
getIssueList: getIssueList,
getEventList: getEventList,
getItemNotice: getItemNotice,
indexPanel: indexPanel,
getIndexStatistics: getIndexStatistics,
logout,
checkUpdateAvatar,
updateAvatar
}
function getToken(wxCode) {
return fly.get('work/user/getToken', {
wxCode: wxCode
})
}
function indexPanel() {
return fly.get('work/user/indexPanel')
}
function getIndexStatistics(params) {
return fly.get('work/user/indexStatistics', params)
}
function login(params) {
return fly.post('work/user/login', params)
}
function getIssueList(params) {
return fly.get('work/event/issue/list', params)
}
function getEventList(params) {
return fly.get('work/event/event/list', params)
}
function getItemNotice(params) {
return fly.get('work/event/item/notice', params)
}
//退出登录
function logout() {
return fly.post('work/user/logout')
}
//判断是否更新头像
function checkUpdateAvatar() {
return fly.get('work/user/checkUpdateAvatar')
}
//更新头像
function updateAvatar(avatar) {
return fly.get('work/user/updateAvatar',{
avatar: avatar
})
}

13
api/grademanagerequest.js

@ -0,0 +1,13 @@
var fly = require('../utils/request.js')
module.exports = {
listGrid: listGrid,
removeGrid: removeGrid
}
// 网格管理
function listGrid (params) {
return fly.get('work/user/swagger/listGrid', params)
}
// 解绑网格
function removeGrid (params) {
return fly.post('work/user/swagger/removeGrid', params, '1')
}

49
api/issueDetail.js

@ -0,0 +1,49 @@
var fly = require('../utils/request.js')
module.exports = {
getEventDetail,
getIssueDetail,
getIssueProcessList,
postIssueHandleSubmit,
postIssueUpload,
getEvaluation,
getCategoryList,
postEventHandleSubmit
}
// 获取事件详情
function getEventDetail(id) {
return fly.get(`work/event/event/detail/${id}`)
}
// 获取议题详情
function getIssueDetail(id) {
return fly.get(`work/event/issue/detail/${id}`)
}
// 获取议题处理进度
function getIssueProcessList(issueId) {
return fly.get('work/event/issue/processList', {
issueId: issueId
})
}
// 获取满意度评价结果
function getEvaluation(itemId) {
return fly.get('work/event/item/evaluation', {
itemId: itemId
})
}
// 提交议题处理
function postIssueHandleSubmit(params) {
return fly.post('work/event/issue/handleSubmit', params)
}
// 上传图片
function postIssueUpload(params) {
return fly.post('events/issue/upload', params)
}
// 获取分类列表
function getCategoryList(params) {
return fly.get('events/issue/category/list', params, "1")
}
// 提交事件审核
function postEventHandleSubmit(params) {
return fly.post('work/event/event/review', params)
}

46
api/itemDetail.js

@ -0,0 +1,46 @@
var fly = require('../utils/request.js')
module.exports = {
getItemDetail,
getIssueProcessList,
getItemProcessList,
postItemHandleSubmit,
postUpload,
getItemWhistlingDept,
getItemEvaluationDept
}
// 获取议题详情
function getItemDetail(id) {
return fly.get(`work/event/item/detail/${id}`)
}
// 获取议题处理进度
function getIssueProcessList(issueId) {
return fly.get('work/event/issue/processList', {
issueId: issueId
})
}
// 提交项目处理
function postItemHandleSubmit(params) {
return fly.post('work/event/item/handleSubmit', params)
}
// 上传图片
function postUpload(params) {
return fly.post('events/issue/upload', params)
}
// 项目处理进度
function getItemProcessList(itemId) {
return fly.get('work/event/item/processList', {
itemId: itemId
})
}
// 获取可吹哨部门
function getItemWhistlingDept() {
return fly.get('work/event/item/whistlingDept')
}
// 获取满意度评价部门
function getItemEvaluationDept(itemId) {
return fly.get('work/event/item/evaluationDept', {
itemId: itemId
})
}

201
api/monthlyReport.js

@ -0,0 +1,201 @@
import request from '../utils/requestClerk'
export function getByLoginUser() {
return request({
method: 'GET',
// url: 'sys/user/deptOptions/getByLoginUser',
url:'sys/user/deptOptions/getDeptAuthByUser'
})
}
//月报列表
export function getMonthRecordList({
pageIndex,
pageSize
}) {
return request({
method: 'GET',
url: 'workRecord/month/getMonthRecordList',
options: {
pageIndex,
pageSize
}
})
}
//查看月报详情
export function getMonthRecordDetail(infoId) {
return request({
method: 'GET',
url: `workRecord/month/getMonthRecordDetail?infoId=${infoId}`,
})
}
//提交工作报告
export function submitMonthRecord({
content,
images
}) {
return request({
method: 'POST',
url: 'workRecord/month/submitMonthRecord',
options: {
content,
images
}
})
}
// 更新工作报告
export function updateMonthRecord({
infoId,
content,
images
}) {
return request({
method: 'POST',
url: 'workRecord/month/updateMonthRecord',
options: {
infoId,
content,
images
}
})
}
//提交优秀案例
export function submitMonthExcellentCase({
infoId,
content,
images
}) {
return request({
method: 'POST',
url: 'workRecord/month/submitMonthExcellentCase',
options: {
infoId,
content,
images
}
})
}
//更新优秀案例
export function updateMonthExcellentCase({
infoId,
content,
images
}) {
return request({
method: 'POST',
url: 'workRecord/month/updateMonthExcellentCase',
options: {
infoId,
content,
images
}
})
}
//提交示范网格
export function submitMonthExcellentGrid({infoId, content,deptId, deptName, allDeptIds,images}) {
return request({
method: 'POST',
url: 'workRecord/month/submitMonthExcellentGrid',
options: {
infoId,
content,
deptId,
deptName,
allDeptIds,
images
}
})
}
//更新示范网格
export function updateMonthExcellentGrid({infoId, content,deptId, deptName,allDeptIds, images}) {
return request({
method: 'POST',
url: 'workRecord/month/updateMonthExcellentGrid',
options: {
infoId,
content,
deptId,
deptName,
allDeptIds,
images
}
})
}
//提交优秀个人
export function submitMonthExcellentPerson({
infoId,
content,
name,
mobile,
partyFlag,
images
}) {
return request({
method: 'POST',
url: 'workRecord/month/submitMonthExcellentPerson',
options: {
infoId,
content,
name,
mobile,
partyFlag,
images
}
})
}
// 更新优秀个人
export function updateMonthExcellentPerson({
infoId,
content,
name,
mobile,
partyFlag,
images
}) {
return request({
method: 'POST',
url: 'workRecord/month/updateMonthExcellentPerson',
options: {
infoId,
content,
name,
mobile,
partyFlag,
images
}
})
}
//提交网格排名
export function submitMonthGridSort({
infoId,
sortList
}) {
return request({
method: 'POST',
url: 'workRecord/month/submitMonthGridSort',
options: {
infoId,
sortList
}
})
}
//更新网格排名
export function updateMonthGridSort({
infoId,
sortList
}) {
return request({
method: 'POST',
url: 'workRecord/month/updateMonthGridSort',
options: {
infoId,
sortList
}
})
}

32
api/myFootPrint.js

@ -0,0 +1,32 @@
import request from '../utils/requestClerk'
/**
* 获得随手记列表
* pageIndex 页码
* pageSize 页容量
*/
export function getDailyRecordList({
pageIndex,
pageSize
}) {
return request({
method: 'GET',
url: 'workRecord/daily/getDailyRecordList',
options: {
pageIndex,
pageSize
}
})
}
/**
* 获得随手记详情
* id
*/
export function getDailyRecordDetail(id) {
return request({
method: 'GET',
url: `/workRecord/daily/getDailyRecordDetail/${id}`,
})
}

118
api/noteIndex.js

@ -0,0 +1,118 @@
import request from '../utils/requestClerk'
// 获得网格
export function getGridAuthByUser() {
return request({
method: 'GET',
url: 'sys/user/deptOptions/getGridAuthByUser',
})
}
/**
* 获得随手记类型
*/
export function getDailyType() {
return request({
method: 'GET',
url: 'workRecord/resource/getDailyType',
})
}
/**
* 获得会议类型
*/
export function getMeetType(resourceId) {
return request({
method: 'GET',
url: `workRecord/resource/getMeetType?resourceId=${resourceId}`,
})
}
/**
* 提交随手记
* dailyType 随手记类型
* meetType 会议类型
* resourceId 资源ID
* meetDate 会议时间
* address 地址
* joinNum 参加人数
* content 内容
* images 图片
*
* imgUrl 原始图地址
* thumbnail 缩略图地址
*/
export function submitDailyRecord({dailyType,meetType,resourceId,meetDate,address,joinNum,content,images,joinList}) {
return request({
method: 'POST',
url: `workRecord/daily/submitDailyRecord`,
options: {
dailyType,
meetType,
resourceId,
meetDate,
address,
joinNum,
content,
images,joinList
}
})
}
/**
* 修改随手记
* id 随手记id
* dailyType 随手记类型
* meetType 会议类型
* resourceId 资源ID
* meetDate 会议时间
* address 地址
* joinNum 参加人数
* content 内容
* images 图片
*
* imgUrl 原始图地址
* thumbnail 缩略图地址
*/
export function updateDailyRecord({id,dailyType,meetType,resourceId,meetDate,address,joinNum,content,images,joinList}) {
return request({
method: 'POST',
url: `workRecord/daily/updateDailyRecord`,
options: {
id,
dailyType,
meetType,
resourceId,
meetDate,
address,
joinNum,
content,
images,
joinList
}
})
}
/**
* 获得随手记详情
*/
export function getDailyRecordDetail(id) {
return request({
method: 'GET',
url: `workRecord/daily/getDailyRecordDetail/${id}`,
})
}
/**
* 获得随手记详情
*/
export function getDailyRecordList({pageIndex,pageSize}) {
return request({
method: 'GET',
url: `workRecord/daily/getDailyRecordList`,
options: {
pageIndex,
pageSize,
}
})
}

8
api/project.js

@ -0,0 +1,8 @@
var fly = require('../utils/request.js')
module.exports = {
getItemList: getItemList
}
function getItemList(params) {
return fly.get('work/event/item/list', params)
}

37
api/projectprogress..js

@ -0,0 +1,37 @@
import request from '../utils/requestClerk'
/**
* 我的消息-获取列表
* pageIndex 页码
* pageSize 页容量
* timestamp 第一页查询发起时的时间
*/
export function listByUserId({
pageIndex,
pageSize,
timestamp
}) {
return request({
method: 'GET',
url: 'workRecord/resource/information/listByUserId',
options: {
pageIndex,
pageSize,
timestamp
}
})
}
/**
* 我的消息-标记已读
* informationId 消息ID
*/
export function read({
informationId
}) {
return request({
method: 'POST',
url: `workRecord/resource/information/read?informationId=${informationId}`
})
}

8
api/userManage.js

@ -0,0 +1,8 @@
var fly = require('../utils/request.js')
module.exports = {
getUserManagelist: getUserManagelist
}
//用户列表(已/待认证的居民/党员)
function getUserManagelist(listObj){
return fly.get('work/user/list', listObj)
}

76
api/weeklyIndex.js

@ -0,0 +1,76 @@
import request from '../utils/requestClerk'
/**
* 获得周报选项
*/
export function getweekRecordOptionList() {
return request({
method: 'GET',
url: 'workRecord/week/getweekRecordOptionList',
})
}
/**
* 提交周报
*/
export function submitWeekRocord({
content,
totalData,
images
}) {
return request({
method: 'POST',
url: 'workRecord/week/submitWeekRocord',
options: {
content,
totalData,
images
}
})
}
/**
* 获得周报列表
*/
export function getWeekRecordList({
pageIndex,
pageSize
}) {
return request({
method: 'GET',
url: 'workRecord/week/getWeekRecordList',
options: {
pageIndex,
pageSize,
}
})
}
/**
* 获得周报详情
*/
export function getWeekRecordDetail(infoId) {
return request({
method: 'GET',
url: `workRecord/week/getWeekRecordDetail/${infoId}`,
})
}
/**
* 更新周报
*/
export function updateWeekRocord({
id,
content,
totalData,
images
}) {
return request({
method: 'POST',
url: 'workRecord/week/updateWeekRocord',
options: {
id,
content,
totalData,
images
}
})
}

28
app.js

@ -0,0 +1,28 @@
App({
onLaunch: function () {
let menuButtonObject = wx.getMenuButtonBoundingClientRect();
wx.getSystemInfo({
success: res => {
//导航高度
let statusBarHeight = res.statusBarHeight,
navTop = menuButtonObject.top,
navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight)*2;
this.globalData.navHeight = navHeight;
this.globalData.navTop = navTop;
this.globalData.windowHeight = res.windowHeight;
},
fail(err) {
console.log(err);
}
})
},
globalData: {
deptDataScopeList: [],
currentDept: {},
pageSize:10
},
onPageNotFound (res) {
}
})

92
app.json

@ -0,0 +1,92 @@
{
"pages": [
"pages/index/index",
"pages/login/login",
"pages/comments/comments",
"pages/comments/commentsContent/commentsContent",
"pages/index/gridChange/gridChange",
"pages/index/projectProgress/projectProgress",
"pages/index/setUp/setUp",
"pages/subject/subject",
"pages/project/project",
"pages/project/projectDetail/projectDetail",
"pages/issueDetail/issueDetail",
"pages/user_moudle/certificationDetails/certificationDetails",
"pages/user_moudle/gridmanagement/gridmanagement",
"pages/user_moudle/user_moudle",
"pages/user_moudle/checkpending/checkpending",
"pages/user_moudle/certificationhistorydetails/certificationhistorydetails",
"pages/itemDetail/itemDetail",
"pages/user_moudle/userManageList/userManageList"
],
"subpackages": [
{
"root": "subpages/clerkOnline",
"name": "clerkOnline",
"pages": [
"pages/noticeDetail/noticeDetail",
"pages/readlist/readlist",
"pages/memberList/memberList",
"pages/myGroup/myGroup",
"pages/myTalk/myTalk",
"pages/remarkOrReply/remarkOrReply",
"pages/topicDetail/topicDetail"
]
},
{
"root": "subpages/noteIndex",
"name": "noteIndex",
"pages": [
"pages/noteIndex/noteIndex",
"pages/noteDetail/noteDetail"
]
},
{
"root": "subpages/myFootPrint",
"name": "myFootPrint",
"pages": [
"pages/myFootPrintIndex/myFootPrintIndex",
"pages/weekReport/weekReport"
]
},
{
"root": "subpages/weeklyReport",
"name": "weeklyReport",
"pages": [
"pages/weeklyReportIndex/weeklyReportIndex",
"pages/weeklyReportDetail/weeklyReportDetail"
]
},
{
"root": "subpages/monthlyReport",
"name": "monthlyReport",
"pages": [
"pages/monthlyIndex/monthlyIndex",
"pages/monthlyDetail/monthlyDetail"
]
}
],
"preloadRule": {
"pages/index/index": {
"network": "all",
"packages": [
"clerkOnline"
]
}
},
"window": {
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "微笑榆山",
"navigationBarTextStyle": "black"
},
"networkTimeout": {
"request": 60000
},
"permission": {
"scope.userLocation": {
"desc": "微笑榆山将获取您的位置信息"
}
},
"sitemapLocation": "sitemap.json"
}

211
app.wxss

@ -0,0 +1,211 @@
/**app.wxss**/
@import "./style/z.wxss";
page {
background: #f7f7f7;
}
.page-layout {
background: #ffffff;
}
.container {
margin: 20rpx;
}
.font-18 {
font-size: 36rpx;
}
.font-17 {
font-size: 34rpx;
}
.font-15 {
font-size: 30rpx;
}
.font-14 {
font-size: 28rpx;
}
.font-13 {
font-size: 26rpx;
}
.font-12 {
font-size: 24rpx;
}
.font-bold {
font-weight: bold;
}
.fl {
float: left;
}
.fr {
float: right;
}
.opacity50 {
opacity: 0.5;
}
.block-name {
font-size: 34rpx;
font-weight: bold;
display: flex;
width: 100%;
color: #333333;
padding: 20rpx 0 36rpx 0;
}
.block-main {
display: flex;
width: 100%;
}
/* 自定义按钮样式 */
.buttons {
font-size: 32rpx;
font-weight: bold;
margin: auto;
left: 0;
right: 0;
}
.btn-size-small {
width: 150rpx;
height: 60rpx;
}
.btn_label {
position: absolute;
color: #fff;
z-index: 99;
text-align: center;
}
.btn_label-small {
line-height: 60rpx;
font-size: 28rpx;
font-weight: normal;
}
.ic_btn {
/* position: fixed; */
}
.btn {
opacity: 0;
}
/*----end----*/
/* 用户相关 start*/
.common_title {
line-height: 90rpx;
height: 90rpx;
font-size: #333333;
font-family: PingFang-SC-Bold;
margin-left: 22rpx;
font-size: 30rpx;
}
.common_line_height {
line-height: 90rpx;
height: 90rpx;
}
.common_cell_group {
padding: 50rpx 0 30rpx 0;
}
/* 标准字体 */
.common_text {
font-size: 32rpx;
color: #333333;
}
/* 分割线 */
.common_divider {
background-color: #E7EEEE;
align-items: flex-end;
margin: 0 24rpx;
height: 1rpx;
}
/* 粗线 */
.common_thick_line {
background-color: #f6f8f8;
align-items: flex-end;
margin: 0 0;
height: 12rpx;
}
/* user模块 */
.wux-cell {
padding: 0 26rpx 0 22rpx !important;
}
.wux-cell__text {
height: 90rpx !important;
line-height: 90rpx !important;
font-size: 32rpx !important;
color: #909DA7 !important;
}
.wux-cell:after {
left: 0rpx !important;
}
.certification_details__text {
font-size: 32rpx;
color: #333333;
margin: 29rpx 22rpx 29rpx 22rpx;
}
/* 灰色提示字体 */
.common_defalt_font {
font-size: 32rpx;
color: #909DA7;
}
/* 修改框架里面字体 */
.wux-cell__ft {
text-align: right;
font-size: 32rpx !important;
color: #333333 !important;
}
/*----end----*/
/* 自定义navbar */
/* page {
height: 100%;
background-color: #f8f8f8;
color: #333;
-webkit-font-smoothing: antialiased;
font-family: 'PingFang SC',
Helvetica,
'STHeiti STXihei',
'Microsoft YaHei',
Tohoma,
Arial,
sans-serif;
} */
.view-page {
display: flex;
height: 100%;
flex-direction: column;
overflow: hidden;
}
.view-page .page-content {
flex: 1;
overflow-y: auto;
box-sizing: border-box;
}

69
components/comments/comments.js

@ -0,0 +1,69 @@
var api = require('../../api/comment.js')
const app = getApp()
Component({
properties: {
state: Number
},
data: {
list: [],
},
attached: function () {
},
lifetimes: {
attached: function () {
// this.getCommentList()
},
moved: function () { },
detached: function () { },
},
ready: function () {
},
pageLifetimes: {
// 组件所在页面的生命周期函数
show: function () { },
},
methods: {
getCommentList: function (searchData) {
wx.showLoading({
title: '加载中',
})
let that = this;
if (searchData.clear == 0){//数据清空
that.setData({
list: []
})
}
let orderType = 0;// 排序方式 0: 获取最新列表,1: 获取最热列表
if (searchData.currenttab == 'new'){
orderType = 0;
}else{
orderType = 1;
}
let params = {
"eventId": searchData.eventId,
"pageIndex": searchData.pageIndex,
"pageSize": app.globalData.pageSize,
"timestamp": searchData.date,
"orderType": orderType
}
api.getCommentList(params).then(function (res) {
if (res.code == 0){
that.setData({
list: that.data.list.concat(res.data)
})
}
wx.hideLoading()
})
},
toCommentsContent(options){
const commentId = options.currentTarget.dataset.commentid;
wx.navigateTo({
url: `../../pages/comments/commentsContent/commentsContent?commentId=${commentId}`
})
}
}
})

3
components/comments/comments.json

@ -0,0 +1,3 @@
{
"component": true
}

30
components/comments/comments.wxml

@ -0,0 +1,30 @@
<view class="layout" wx:for="{{list}}" wx:key="{{index}}">
<view class="subject-item">
<view class="wux-pull-left imgView">
<image src="{{item.userFace}}" />
</view>
<view class="wux-pull-left">
<view class="subject-title">
{{page}}{{item.userName}}
</view>
<view class="time">{{item.createdTime}}</view>
</view>
<view class="btn-size-small wux-pull-right">
<view class="wux-pull-left good">
<image class="wux-pull-left" src="/images/good.png" />
<view class="wux-pull-left goodfont">{{item.likeCount}}</view>
</view>
<view class="wux-pull-right bad">
<view class="wux-pull-right goodfont">{{item.unLikeCount}}</view>
<image class="wux-pull-right" src="/images/bad.png" />
</view>
</view>
</view>
<view class="btmbar">
<view class="halfwidth attitude">{{item.content}}</view>
</view>
<view class="_btmbar" data-commentId="{{item.id}}" wx:if="{{item.replyCount > 0}}" bindtap="toCommentsContent">
<view class="_halfwidth _attitude">{{item.replyCount}}条回复></view>
</view>
</view>
<view class="loadmore">上滑加载更多</view>

110
components/comments/comments.wxss

@ -0,0 +1,110 @@
@import '../../dist/styles/index.wxss';
.layout{
width: 100%;
padding-top: 8rpx;
/* display: flex; */
border-bottom: 12rpx solid #f6f8f8;
}
.subject-item{
width: 100%;
margin: 10px;
}
.subject-title{
padding-left: 15rpx;
font-size: 26rpx;
color: #333333;
overflow: hidden;
width: 445rpx;
white-space: nowrap;
text-overflow: ellipsis;
}
.time{
padding: 0 0 0 15rpx;
height: 25rpx;
line-height: 30rpx;
font-size: 20rpx;
color: #A5B0B9;
}
.loadmore{
width: 100%;
text-align: center;
height: 50px;
line-height: 50px;
background: #f6f8f8;
font-size:12px;
color: #999;
}
/* 自定义按钮样式 */
.btn-size-small{
width: 200rpx;
height: 60rpx;
margin-right: 40rpx;
}
.btn-size-small .good{
width: 50%;
height: 100%;
}
.btn-size-small .good image{
width: 26rpx;
height: 26rpx;
}
.btn-size-small .good .goodfont{
color: #A5B0B9;
font-size: 22rpx;
padding-left: 7rpx
}
.btn-size-small .bad{
width: 50%;
height: 100%;
}
.btn-size-small .bad image{
width: 26rpx;
height: 26rpx;
}
.btn-size-small .bad .goodfont{
color: #A5B0B9;
font-size: 22rpx;
padding-left: 7rpx
}
.imgView{
width: 56rpx;
height: 56rpx;
}
.imgView image{
width: 56rpx;
height: 56rpx;
}
.btmbar{
width: 100%;
display: inline-table;
line-height: 50rpx;
color: #333333;
padding: 10rpx 0 20rpx 30rpx;
}
.halfwidth{
width: 96%;
}
.attitude{
font-size: 36rpx;
}
._btmbar{
width: 100%;
display: inline-table;
font-size: 36rpx;
color: #3C6CFC;
padding: 0 0 20rpx 30rpx;
}
._halfwidth{
width: 96%;
}
._attitude{
font-size: 26rpx;
}

53
components/event/eventDetail/eventDetail.js

@ -0,0 +1,53 @@
// components/issueDetailComponent1/issueDetailComponent.js
Component({
/**
* 组件的属性列表
*/
properties: {
detailData: { // 属性名
type: Object,
value: {}
},
issueState: {
type: Number,
value: ""
},
itemState: {
type: Number,
value: ""
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
toComments(e) {
const eventId = this.data.detailData.eventId
wx.navigateTo({
url: `../../pages/comments/comments?eventId=${eventId}`
})
if (this.data.itemState == 1 || this.data.itemState == 2) {
wx.navigateTo({
url: `../../../pages/comments/comments?eventId=${eventId}`
})
}
},
//预览图片,放大预览
preview(event) {
let currentUrl = event.currentTarget.dataset.src
wx.previewImage({
current: currentUrl, // 当前显示图片的http链接
urls: this.data.detailData.images // 需要预览的图片http链接列表
})
}
}
})

4
components/event/eventDetail/eventDetail.json

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

79
components/event/eventDetail/eventDetail.wxml

@ -0,0 +1,79 @@
<!-- 议题详情 components/issueDetailComponent/issueDetailComponent.wxml -->
<!-- 议题详情 -->
<view class="bgfff paddingX24 marginB12">
<!-- 用户信息 -->
<view class="flex justify-start align-center">
<image class="head-image" src="{{detailData.avatar}}"></image>
<view class="head-view flex align-center flex-wrap">
<view class="head-view-name">{{detailData.nickname}}</view>
<view class="head-view-time">{{detailData.distributeTime}}</view>
</view>
</view>
<!-- 议题图片 -->
<view class="grit">
<block wx:for="{{detailData.images}}" wx:key="content-image {{index}}">
<image wx:if="{{detailData.images.length===1}}" class="content-image content-image1" data-src="{{item}}" bindtap="preview" src="{{item}}"></image>
<image wx:if="{{detailData.images.length===2}}" class="content-image content-image2" data-src="{{item}}" bindtap="preview" src="{{item}}"></image>
<image wx:if="{{detailData.images.length===3}}" class="content-image content-image3" data-src="{{item}}" bindtap="preview" src="{{item}}"></image>
</block>
</view>
<!-- 议题内容 -->
<view class="content-text">{{detailData.content}}</view>
<!-- 议题信息 -->
<view class="info">
<view class="info-box flex justify-space-between">
<view class="info-left">电话</view>
<view class="info-right">{{detailData.mobile}}</view>
</view>
<view class="info-box flex justify-space-between">
<view class="info-left">地址</view>
<view class="info-right">{{detailData.address}}</view>
</view>
<view class="info-box flex justify-space-between" wx:if="{{issueState == '1' || issueState == '3' || itemState == '0' || itemState == '1' || itemState == '2'}}">
<view class="info-left">分类</view>
<view class="info-right">{{detailData.categoryName}}</view>
</view>
<view class="info-box flex justify-space-between" wx:if="{{issueState == '2'}}">
<view class="info-left">状态</view>
<view class="info-right">已驳回</view>
</view>
</view>
</view>
<!-- 表达态度 -->
<view class="bgfff marginB12" wx:if="{{issueState == '1' || issueState == '3' || itemState == '0' ||itemState == '1' || itemState == '2'}}">
<view class="paddingX24 statement flex justify-space-between">
<view class="statement-num">表达态度({{detailData.statementNum}})</view>
<view class="statement-comment" wx:if="{{detailData.commentNum > 0}}" bindtap="toComments">查看评论 ></view>
</view>
<view class="flex justify-space-around state">
<view>
<view class="state-num">{{detailData.approveNum}}</view>
<view class="state-text">支持</view>
</view>
<view>
<view class="state-num">{{detailData.opposeNum}}</view>
<view class="state-text">反对</view>
</view>
<view>
<view class="state-num">{{detailData.commentNum}}</view>
<view class="state-text">评论</view>
</view>
<view>
<view class="state-num">{{detailData.browseNum}}</view>
<view class="state-text">阅读</view>
</view>
</view>
</view>
<!-- 处理意见 -->
<view class="bgfff paddingX24 marginB12" wx:if="{{issueState == '2'}}">
<view class="advice-title">处理意见</view>
<view class="advice-text">{{detailData.advice}}</view>
<!-- 处理意见图片 -->
<view class="grit">
<block wx:for="{{detailData.handleResidentImages}}" wx:key="advice-image {{index}}">
<image wx:if="{{detailData.handleResidentImages.length===1}}" class="content-image content-image1" src="{{item}}"></image>
<image wx:if="{{detailData.handleResidentImages.length===2}}" class="content-image content-image2" src="{{item}}"></image>
<image wx:if="{{detailData.handleResidentImages.length===3}}" class="content-image content-image3" src="{{item}}"></image>
</block>
</view>
</view>

128
components/event/eventDetail/eventDetail.wxss

@ -0,0 +1,128 @@
/* components/issueDetailComponent/issueDetailComponent.wxss */
@import "../../../style/z.wxss";
.head-view {
padding-left: 9rpx;
}
.head-view view {
width: 100%;
}
.head-view-name {
font-size: 26rpx;
color: #666666;
}
.head-view-time {
font-size: 20rpx;
color: #a5b0b9;
}
/* 议题图片 */
.grit {
display: grid;
grid-gap: 4rpx;
grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
}
.content-image {
width: auto;
border-radius: 16rpx;
/* background: #f7f7f7; */
margin-bottom: 18rpx;
}
.content-image1 {
height: 290rpx;
}
.content-image2 {
height: 200rpx;
}
.content-image3 {
height: 180rpx;
}
/* 议题内容 */
.content-text {
font-size: 36rpx;
color: #333333;
line-height: 54rpx;
padding-bottom: 24rpx;
}
/* 议题信息 */
.info {}
.info-box {
border-bottom: 1rpx solid #e7eeee;
padding: 18rpx 0;
}
.info-box:last-child {
border-bottom: none;
padding: 18rpx 0;
}
.info-left {
font-size: 32rpx;
color: #909da7;
line-height: 54rpx;
width: 170rpx;
}
.info-right {
font-size: 32rpx;
color: #333333;
line-height: 54rpx;
}
/* 表达态度 */
.statement {
border-bottom: 1rpx solid #e7eeee;
padding: 24rpx 0;
margin: 0 24rpx;
}
.statement-num {
font-size: 32rpx;
color: #909da7;
}
.statement-comment {
font-size: 28rpx;
color: #ffb400;
}
.state {
padding: 24rpx 0;
}
.state-num {
font-size: 32rpx;
color: #333333;
text-align: center;
}
.state-text {
font-size: 26rpx;
color: #909da7;
text-align: center;
}
/* 处理意见 */
.advice-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
}
.advice-text {
font-size: 32rpx;
color: #333333;
padding: 30rpx 0;
}

161
components/event/handleSubmit/handleSubmit/handleSubmit.js

@ -0,0 +1,161 @@
// components/handleSubmit/handleSubmit.js
import {
$wuxActionSheet
} from '../../../../dist/index'
import {
BASEURL
} from '../../../../utils/config'
// var global = require('./config.js')
Component({
/**
* 组件的属性列表
*/
properties: {
handleSubmitData: { // 属性名
type: Object,
value: {}
},
},
/**
* 组件的初始数据
*/
data: {
BASEURL: BASEURL(),
userTagKey: wx.getStorageSync('userTagKey'),
isBlock: true,
focus: false,//默认没获取焦点
viewData: ""
},
/**
* 组件的方法列表
*/
methods: {
// 处理操作
showActionSheet() {
let buttons = []
// 议题:回应、转项目、关闭
buttons = [{
text: '回应'
}, {
text: '转项目'
}, {
text: '关闭'
}]
const that = this
$wuxActionSheet().showSheet({
// titleText: '自定义操作',
buttons: buttons,
buttonClicked(index, item) {
let state = ""
const text = item.text
// 议题状态:1 回应,2 关闭,4 转项目
if (item.text === "回应") {
state = 1
} else if (item.text === "关闭") {
state = 2
} else if (item.text === "转项目") {
state = 4
}
const handleSubmitData = Object.assign(that.data.handleSubmitData, {
state: state,
text: text
})
that.setData({
handleSubmitData
})
return true
},
cancelText: '取消',
cancel() {},
})
},
// 填写意见
bindInputAdvice: function (e) {
const handleSubmitData = Object.assign(this.data.handleSubmitData, {
advice: e.detail.value
})
this.setData({
handleSubmitData,
isBlock: true,//失去焦点以后view隐藏
viewData: e.detail.value
})
},
// Textarea的显示层级太高导致遮挡,通过点击view代替Textarea显示
clickTextarea() {
this.setData({
isBlock: false,
focus: true
})
},
// 提交居民意见
bindFormSubmit() {
this.triggerEvent('bindFormSubmit', this.data.handleSubmitData) // 触发父组件事件
},
// 上传图片
onChange(e) {
// console.log('onChange', e)
const {
file
} = e.detail
if (file.status === 'uploading') {
this.setData({
progress: 0,
})
wx.showLoading()
} else if (file.status === 'done') {
this.setData({
imageUrl: file.url,
})
}
let images = []
e.detail.fileList.forEach((item, index, array) => {
if (item.res !== undefined) {
const imageUrl = JSON.parse(e.detail.fileList[index].res.data).data
images.push(imageUrl)
}
})
const handleSubmitData = Object.assign(this.data.handleSubmitData, {
images: images
})
this.setData({
handleSubmitData
})
},
onSuccess(e) {
// console.log('onSuccess', e)
},
onFail(e) {
// console.log('onFail', e)
},
// 上传完成
onComplete(e) {
// console.log('onComplete', e)
wx.hideLoading()
},
// 点击图片放大
onPreview(e) {
// console.log('onPreview', e)
const {
file,
fileList
} = e.detail
wx.previewImage({
current: file.url,
urls: fileList.map((n) => n.url),
})
}
}
})

6
components/event/handleSubmit/handleSubmit/handleSubmit.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"wux-upload": "../../../../dist/upload/index"
}
}

25
components/event/handleSubmit/handleSubmit/handleSubmit.wxml

@ -0,0 +1,25 @@
<!-- 议题处理components/handleSubmit/handleSubmit.wxml -->
<!-- 处理操作 -->
<view class="bgfff paddingX24 marginB12 flex justify-space-between handle" bindtap="showActionSheet">
<view class="handle-text">处理操作</view>
<view class="handle-more">
<text class="handle-more-text">{{handleSubmitData.text}}</text>
<text>></text>
</view>
</view>
<!-- 回复居民意见 -->
<view class="bgfff paddingX24 marginB12 advice">
<view class="advice-title">回复居民意见</view>
<view class="_textarea-view {{isBlock?'block':'none'}}" bindtap="clickTextarea" wx:if="{{viewData}}">
{{viewData}}</view>
<view class="textarea-view {{isBlock?'block':'none'}}" bindtap="clickTextarea" wx:else>请填写居民诉求的处理情况以及答复意见,向居民公开展示</view>
<textarea class="{{isBlock?'none':'block'}}" placeholder-class="place-holder" placeholder="请填写居民诉求的处理情况以及答复意见,向居民公开展示" bindblur="bindInputAdvice" maxlength="500" focus='{{focus}}' />
<view>
<wux-upload listType="picture-card" defaultFileList="{{ fileList }}" max="3" count="3" url="{{BASEURL}}group/topic/upload" bind:change="onChange" bind:success="onSuccess" bind:fail="onFail" bind:complete="onComplete" bind:preview="onPreview">
<image src="../../../../images/uploadImg3.png"></image>
</wux-upload>
</view>
</view>
<!-- 确定 -->
<view class="submit" bindtap="bindFormSubmit">确定</view>

85
components/event/handleSubmit/handleSubmit/handleSubmit.wxss

@ -0,0 +1,85 @@
/* components/handleSubmit/handleSubmit.wxss */
@import "../../../../style/z.wxss";
/* 处理操作 */
.handle {
padding-top: 24rpx;
padding-bottom: 24rpx;
}
.handle-text {
font-size: 30rpx;
font-weight: bold;
color: #333333;
}
.handle-more {
font-size: 34rpx;
color: #909da7;
}
.handle-more-text {
font-size: 32rpx;
color: #333333;
padding-right: 5rpx;
}
/* 回复居民意见 */
.advice-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
margin-bottom: 24rpx;
}
textarea {
width: 100%;
height: 200rpx;
font-size:32rpx;
color:rgba(51,51,51,1);
}
.block{
display: block;
}
.none{
display: none;
}
.place-holder{
font-size:32rpx;
color:rgba(144,157,167,1);
}
.textarea-view{
width: 100%;
height: 200rpx;
font-size:32rpx;
color:rgba(144,157,167,1);
line-height:37rpx;
}
._textarea-view{
width: 100%;
min-height: 200rpx;
height: auto;
font-size:32rpx;
color:rgba(51,51,51,1);
line-height:37rpx;
overflow-wrap: break-word
}
.wux-upload--picture-card .wux-upload__button {
padding: 0 !important;
}
.submit {
width: 650rpx;
background: #3c6cfc;
box-shadow: 0rpx 5rpx 16rpx 0rpx rgba(60, 108, 252, 0.36);
border-radius: 43rpx;
text-align: center;
font-size: 36rpx;
color: #ffffff;
margin: 88rpx auto;
padding: 24rpx;
}

336
components/event/handleSubmit/handleSubmitItem/handleSubmitItem.js

@ -0,0 +1,336 @@
// components/handleSubmit/handleSubmitItem.js
import {
$wuxActionSheet
} from '../../../../dist/index'
import {
BASEURL
} from '../../../../utils/config'
var api = require("../../../../api/itemDetail.js")
import {
$wuxToast
} from '../../../../dist/index'
Component({
/**
* 组件的属性列表
*/
properties: {
handleSubmitData: {
type: Object,
value: {}
},
itemId: {
type: String,
value: ""
}
},
/**
* 组件的初始数据
*/
data: {
BASEURL: BASEURL(),
// userTagKey: wx.getStorageSync('userTagKey'),
// userTagKey: "grid_party",
state: 0,
whistlingDeptList: [], // 可吹哨部门
evaluationDeptList: [], // 满意度评价部门
value: '1',
selectImage: "../../../../images/select.png",
selectNoImage: "../../../../images/selectNo.png",
isBlock: true,
focus: false,//默认没获取焦点
viewData: "",
_isBlock: true,
_focus: false,//默认没获取焦点
_viewData: ""
},
/**
* 组件的方法列表
*/
methods: {
// 处理操作
showActionSheet() {
// 用户标签key(district_party-区党委, district_dept-区直部门, street_party-街道党工委, street_dept-街道部门, community_party-社区党工委, grid_party-网格党支部)
// 处理结果:0 回应,1 吹哨,5 关闭,10 结案
let buttons = []
let userTagKey = wx.getStorageSync('userTagKey')
if (userTagKey === "grid_party") {
// 网格党支部:回应、吹哨、关闭、结案
buttons = [{
text: '回应'
}, {
text: '吹哨部门'
}, {
text: '关闭'
}, {
text: '结案'
}]
} else if (userTagKey === "street_party") {
// 街道党工委:回应、吹哨
buttons = [{
text: '回应'
}, {
text: '吹哨部门'
}]
} else if (userTagKey === "community_party" || userTagKey === "street_dept" || userTagKey === "district_dept" || userTagKey === "district_party") {
// 社区党工委、街道部门、区直部门、区党委:回应
buttons = [{
text: '回应'
}]
}
const that = this
$wuxActionSheet().showSheet({
// titleText: '自定义操作',
buttons: buttons,
buttonClicked(index, item) {
let state = ""
const text = item.text
// 项目状态:0 回应,1 吹哨,5 关闭,10 结案
if (item.text === "回应") {
state = 0
} else if (item.text === "吹哨部门") {
state = 1
that.getItemWhistlingDept() // 获取可吹哨部门
} else if (item.text === "关闭") {
state = 5
} else if (item.text === "结案") {
state = 10
that.getItemEvaluationDept() // 获取满意度评价部门
}
const handleSubmitData = Object.assign(that.data.handleSubmitData, {
state: state,
text: text
})
that.setData({
handleSubmitData,
state: state
})
return true
},
cancelText: '取消',
cancel() {},
})
},
// 回复居民意见
bindInputOutHandleAdvice: function (e) {
const handleSubmitData = Object.assign(this.data.handleSubmitData, {
outHandleAdvice: e.detail.value
})
this.setData({
handleSubmitData,
isBlock: true,
viewData: e.detail.value
})
},
// Textarea的显示层级太高导致遮挡,通过点击view代替Textarea显示
clickTextarea() {
this.setData({
isBlock: false,
focus: true
})
},
// 项目处理意见
bindInputHandleAdvice: function (e) {
const handleSubmitData = Object.assign(this.data.handleSubmitData, {
handleAdvice: e.detail.value
})
this.setData({
handleSubmitData,
_isBlock: true,
_viewData: e.detail.value
})
},
// Textarea的显示层级太高导致遮挡,通过点击view代替Textarea显示
_clickTextarea() {
this.setData({
_isBlock: false,
_focus: true
})
},
// 提交居民意见
bindFormSubmit() {
// 被吹哨部门
const deptResultDTOS = this.data.whistlingDeptList.filter(item => {
return item.selected === true
})
const handleSubmitData = Object.assign(this.data.handleSubmitData, {
deptResultDTOS: deptResultDTOS
})
this.setData({
handleSubmitData
})
if (this.data.handleSubmitData.state == "10"){//结案
if (this.data.evaluationDeptList.length > 0){//满意度评价有值
if (!this.data.handleSubmitData.evaluateDeptDTOS){ //没有选满意度
$wuxToast().show({
type: 'text',
duration: 3000,
color: '#fff',
text: '请选择满意度评价',
success: () => console.log('')
})
return false
}
}
}
this.triggerEvent('bindFormSubmit', this.data.handleSubmitData) // 触发父组件事件
},
// 上传图片
onChange(e) {
// console.log('onChange', e)
const {
file
} = e.detail
if (file.status === 'uploading') {
this.setData({
progress: 0,
})
wx.showLoading()
} else if (file.status === 'done') {
this.setData({
imageUrl: file.url,
})
}
let images = []
e.detail.fileList.forEach((item, index, array) => {
if (item.res !== undefined) {
const imageUrl = JSON.parse(e.detail.fileList[index].res.data).data
images.push(imageUrl)
}
})
let handleSubmitData = {}
if (e.currentTarget.dataset.type == "outHandleImages") {
// 回复居民意见
handleSubmitData = Object.assign(this.data.handleSubmitData, {
outHandleImages: images
})
} else if (e.currentTarget.dataset.type == "handleImages") {
// 项目处理意见
handleSubmitData = Object.assign(this.data.handleSubmitData, {
handleImages: images
})
}
this.setData({
handleSubmitData
})
},
// 上传完成
onComplete(e) {
// console.log('onComplete', e)
wx.hideLoading()
},
// 点击图片放大
onPreview(e) {
// console.log('onPreview', e)
const {
file,
fileList
} = e.detail
wx.previewImage({
current: file.url,
urls: fileList.map((n) => n.url),
})
},
// 获取可吹哨部门
getItemWhistlingDept() {
api.getItemWhistlingDept().then(res => {
console.log(res.data);
this.setData({
whistlingDeptList: res.data
})
});
},
// 获取满意度评价部门
getItemEvaluationDept() {
api.getItemEvaluationDept(this.data.itemId).then(res => {
console.log(res.data);
this.setData({
evaluationDeptList: res.data
// evaluationDeptList: [{
// deptId: 1,
// deptName: '九江社区党工委'
// },
// {
// deptId: 2,
// deptName: '九江街道党工委'
// }
// ]
})
});
},
// 改变吹哨部门
onChangeDeptResultDTOS(e) {
// console.log(e)
let temp = 'whistlingDeptList[' + e.currentTarget.dataset.index + '].selected'
this.setData({
[temp]: !e.currentTarget.dataset.item.selected
})
},
// 评价结果:0-不满意,1-基本满意,2-非常满意
showActionSheetEvaluate(e) {
const that = this
$wuxActionSheet().showSheet({
// titleText: '自定义操作',
buttons: [{
text: '非常满意'
},
{
text: '基本满意'
},
{
text: '不满意'
}
],
buttonClicked(index, item) {
let state = ""
const text = item.text
if (item.text === "非常满意") {
state = 2
} else if (item.text === "基本满意") {
state = 1
} else if (item.text === "不满意") {
state = 0
}
let temp = 'evaluationDeptList[' + e.currentTarget.dataset.index + '].evaluationLevel'
let tempName = 'evaluationDeptList[' + e.currentTarget.dataset.index + '].evaluationLevelName'
that.setData({
[temp]: state,
[tempName]: text
})
const handleSubmitData = Object.assign(that.data.handleSubmitData, {
evaluateDeptDTOS: that.data.evaluationDeptList
})
that.setData({
handleSubmitData
})
return true
},
cancelText: '取消',
cancel() {},
})
},
}
})

7
components/event/handleSubmit/handleSubmitItem/handleSubmitItem.json

@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"wux-upload": "../../../../dist/upload/index",
"wux-toast": "../../../../dist/toast/index"
}
}

67
components/event/handleSubmit/handleSubmitItem/handleSubmitItem.wxml

@ -0,0 +1,67 @@
<!-- 议题处理components/handleSubmit/handleSubmitItem.wxml -->
<!-- 处理操作 -->
<view class="bgfff paddingX24 marginB12">
<view class="flex justify-space-between handle" bindtap="showActionSheet">
<view class="handle-text">处理操作</view>
<view class="handle-more">
<text class="handle-more-text">{{handleSubmitData.text}}</text>
<text>></text>
</view>
</view>
<!-- 吹哨部门 -->
<view wx:if="{{state == '1'}}">
<block wx:for="{{whistlingDeptList}}" wx:key="whistlingDeptList {{index}}">
<view class="flex justify-start align-center dept-result-dtos" data-item="{{item}}" data-index="{{index}}" bindtap="onChangeDeptResultDTOS">
<image class="dept-result-dtos-image" src="{{item.selected ? selectImage : selectNoImage}}"></image>
<view>{{item.deptName}}</view>
</view>
</block>
</view>
</view>
<!-- 满意度评价 -->
<view class="bgfff paddingX24 marginB12" wx:if="{{state == '10'}}">
<view class="evaluate-title">满意度评价</view>
<block wx:for="{{evaluationDeptList}}" wx:key="evaluationDeptList {{index}}">
<view class="flex justify-space-between evaluate" data-item="{{item}}" data-index="{{index}}" bindtap="showActionSheetEvaluate">
<view class="evaluate-text">{{item.deptName}}</view>
<view class="evaluate-more">
<text class="evaluate-more-text">{{item.evaluationLevelName}}</text>
<text>></text>
</view>
</view>
</block>
</view>
<!-- 回复居民意见 -->
<view class="bgfff paddingX24 marginB12 advice">
<view class="advice-title">回复居民意见</view>
<view class="_textarea-view {{isBlock?'block':'none'}}" bindtap="clickTextarea" wx:if="{{viewData}}">
{{viewData}}</view>
<view class="textarea-view {{isBlock?'block':'none'}}" bindtap="clickTextarea" wx:else>请填写居民诉求的处理情况以及答复意见,向居民公开展示</view>
<textarea class="{{isBlock?'none':'block'}}" placeholder-class="place-holder" placeholder="请填写居民诉求的处理情况以及答复意见,向居民公开展示" bindblur="bindInputOutHandleAdvice" maxlength="500" focus='{{focus}}'/>
<view>
<wux-upload listType="picture-card" defaultFileList="{{ fileList }}" max="3" count="3" url="{{BASEURL}}group/topic/upload" bind:change="onChange" bind:complete="onComplete" bind:preview="onPreview" data-type="outHandleImages">
<image src="../../../../images/uploadImg3.png"></image>
</wux-upload>
</view>
</view>
<!-- 项目处理意见 -->
<view class="bgfff paddingX24 marginB12 advice">
<view class="advice-title">项目处理意见</view>
<view class="_textarea-view {{_isBlock?'block':'none'}}" bindtap="_clickTextarea" wx:if="{{_viewData}}">
{{_viewData}}</view>
<view class="textarea-view {{_isBlock?'block':'none'}}" bindtap="_clickTextarea" wx:else>请填写项目的实际办理情况(如自己处理、吹哨报 道、内部协调),便于相关部门了解项目的实际情况</view>
<textarea placeholder="请填写项目的实际办理情况(如自己处理、吹哨报 道、内部协调),便于相关部门了解项目的实际情况" class="{{_isBlock?'none':'block'}}" placeholder-class="place-holder" bindblur="bindInputHandleAdvice" maxlength="500" focus='{{_focus}}'/>
<view>
<wux-upload listType="picture-card" defaultFileList="{{ fileList }}" max="3" count="3" url="{{BASEURL}}group/topic/upload" bind:change="onChange" bind:complete="onComplete" bind:preview="onPreview" data-type="handleImages">
<image src="../../../../images/uploadImg3.png"></image>
</wux-upload>
</view>
</view>
<!-- 确定 -->
<view class="submit" bindtap="bindFormSubmit">确定</view>
<wux-toast id="wux-toast" />

130
components/event/handleSubmit/handleSubmitItem/handleSubmitItem.wxss

@ -0,0 +1,130 @@
/* components/handleSubmit/handleSubmitItem.wxss */
@import "../../../../style/z.wxss";
/* 处理操作 */
.handle {
padding-top: 24rpx;
padding-bottom: 24rpx;
}
.handle-text {
font-size: 30rpx;
font-weight: bold;
color: #333333;
}
.handle-more {
font-size: 34rpx;
color: #909da7;
}
.handle-more-text {
font-size: 32rpx;
color: #333333;
padding-right: 5rpx;
}
/* 吹哨部门 */
.dept-result-dtos {
border-top: 1rpx solid #e7eeee;
font-size: 32rpx;
color: #333333;
padding: 28rpx 0;
}
.dept-result-dtos-image {
width: 36rpx;
height: 36rpx;
padding-right: 20rpx;
}
/* 满意度评价 */
.evaluate-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
margin-bottom: 24rpx;
}
.evaluate {
padding-top: 24rpx;
padding-bottom: 24rpx;
}
.evaluate-text {
font-size: 30rpx;
font-weight: bold;
color: #333333;
}
.evaluate-more {
font-size: 34rpx;
color: #909da7;
}
.evaluate-more-text {
font-size: 32rpx;
color: #333333;
padding-right: 5rpx;
}
/* 回复居民意见 */
.advice-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
margin-bottom: 24rpx;
}
textarea {
width: 100%;
height: 200rpx;
font-size:32rpx;
color:rgba(51,51,51,1);
}
.block{
display: block;
}
.none{
display: none;
}
.place-holder{
font-size:32rpx;
color:rgba(144,157,167,1);
}
.textarea-view{
width: 100%;
height: 200rpx;
font-size:32rpx;
color:rgba(144,157,167,1);
line-height:37rpx;
}
._textarea-view{
width: 100%;
min-height: 200rpx;
height: auto;
font-size:32rpx;
color:rgba(51,51,51,1);
line-height:37rpx;
overflow-wrap: break-word
}
.wux-upload--picture-card .wux-upload__button {
padding: 0 !important;
}
.submit {
width: 650rpx;
background: #3c6cfc;
box-shadow: 0rpx 5rpx 16rpx 0rpx rgba(60, 108, 252, 0.36);
border-radius: 43rpx;
text-align: center;
font-size: 36rpx;
color: #ffffff;
margin: 88rpx auto;
padding: 24rpx;
}

187
components/event/handleSubmit/waitResponse/waitResponse.js

@ -0,0 +1,187 @@
// components/event/handleSubmit/waitResponse/waitResponse.js
import {
$wuxActionSheet
} from '../../../../dist/index'
import {
BASEURL
} from '../../../../utils/config'
// var global = require('./config.js')
Component({
/**
* 组件的属性列表
*/
properties: {
waitResponseData: { // 属性名
type: Object,
value: {}
},
optionsCascader:{
type:Array,
value: []
}
},
/**
* 组件的初始数据
*/
data: {
BASEURL: BASEURL(),
userTagKey: wx.getStorageSync('userTagKey'),
visibleCascader: false, //显示分类
isBlock:true,
focus: false,//默认没获取焦点
viewData:""
},
/**
* 组件的方法列表
*/
methods: {
// 审核操作
showActionSheetEvent() {
const that = this
let buttons = [{
text: '审核通过'
}, {
text: '驳回'
}]
$wuxActionSheet().showSheet({
// titleText: '自定义操作',
buttons: buttons,
buttonClicked(index, item) {
let state = ""
const text = item.text
if (item.text === "审核通过") {
state = 4
} else if (item.text === "驳回") {
state = 2
}
const waitResponseData = Object.assign(that.data.waitResponseData, {
eventState: state,
eventName: text
})
that.setData({
waitResponseData
})
return true
},
cancelText: '取消',
cancel() {},
})
},
// 打开选择分类
onOpenCascader() {
this.triggerEvent('onOpenCascader') // 触发父组件事件
},
// 填写意见
bindInputAdvice: function (e) {
this.setData({//失去焦点以后view隐藏
isBlock: true
})
const waitResponseData = Object.assign(this.data.waitResponseData, {
advice: e.detail.value
})
this.setData({
waitResponseData,
viewData: e.detail.value
})
},
// Textarea的显示层级太高导致遮挡,通过点击view代替Textarea显示
clickTextarea() {
this.setData({
isBlock: false,
focus: true
})
},
// 提交居民意见
bindFormSubmit() {
this.triggerEvent('bindFormSubmit', this.data.waitResponseData) // 触发父组件事件
},
// 上传图片
onChange(e) {
// console.log('onChange', e)
const {
file
} = e.detail
if (file.status === 'uploading') {
this.setData({
progress: 0,
})
wx.showLoading()
} else if (file.status === 'done') {
this.setData({
imageUrl: file.url,
})
}
let images = []
e.detail.fileList.forEach((item, index, array) => {
if (item.res !== undefined) {
const imageUrl = JSON.parse(e.detail.fileList[index].res.data).data
images.push(imageUrl)
}
})
const waitResponseData = Object.assign(this.data.waitResponseData, {
images: images
})
this.setData({
waitResponseData
})
},
onSuccess(e) {
// console.log('onSuccess', e)
},
onFail(e) {
// console.log('onFail', e)
},
// 上传完成
onComplete(e) {
// console.log('onComplete', e)
wx.hideLoading()
},
// 点击图片放大
onPreview(e) {
// console.log('onPreview', e)
const {
file,
fileList
} = e.detail
wx.previewImage({
current: file.url,
urls: fileList.map((n) => n.url),
})
},
// 打开选择分类
onOpenCascader() {
this.setData({
visibleCascader: true
})
},
// 关闭选择分类
onCloseCascader() {
this.setData({
visibleCascader: false
})
},
// 改变选择分类
onChangeCascader(e) {
// title1: e.detail.options.map((n) => n.label).join('/')
// console.log('onChangeCascader', e.detail)
const waitResponseData = Object.assign(this.data.waitResponseData, {
categoryId: e.detail.options[e.detail.options.length - 1].value, // 分类ID String
categoryName: e.detail.options[e.detail.options.length - 1].label, // 分类名称
})
this.setData({
waitResponseData
})
}
}
})

7
components/event/handleSubmit/waitResponse/waitResponse.json

@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"wux-upload": "../../../../dist/upload/index",
"wux-cascader": "../../../../dist/cascader/index"
}
}

38
components/event/handleSubmit/waitResponse/waitResponse.wxml

@ -0,0 +1,38 @@
<!-- components/event/handleSubmit/waitResponse/waitResponse.wxml -->
<!-- 审核操作 -->
<view class="bgfff paddingX24 marginB12 flex justify-space-between handle" bindtap="showActionSheetEvent">
<view class="handle-text">审核操作</view>
<view class="handle-more">
<text class="handle-more-text">{{waitResponseData.eventName}}</text>
<text>></text>
</view>
</view>
<!-- 选择分类 -->
<view wx:if="{{waitResponseData.eventState =='4'}}" class="bgfff paddingX24 marginB12 flex justify-space-between handle" bindtap="onOpenCascader">
<view class="handle-text">选择分类</view>
<view class="handle-more">
<text class="handle-more-text">{{waitResponseData.categoryName}}</text>
<text>></text>
</view>
</view>
<!-- 回复居民意见 -->
<view class="bgfff paddingX24 marginB12 advice">
<view class="advice-title">处理意见</view>
<view class="_textarea-view {{isBlock?'block':'none'}}" bindtap="clickTextarea" wx:if="{{viewData}}">
{{viewData}}</view>
<view class="textarea-view {{isBlock?'block':'none'}}" bindtap="clickTextarea" wx:else>请填写居民诉求的处理情况以及答复意见,向居民公开展示</view>
<textarea class="{{isBlock?'none':'block'}}" placeholder-class="place-holder" placeholder="请填写居民诉求的处理情况以及答复意见,向居民公开展示" bindblur="bindInputAdvice" maxlength="500" focus='{{focus}}' />
<view>
<wux-upload listType="picture-card" defaultFileList="{{ fileList }}" max="3" count="3" url="{{BASEURL}}group/topic/upload" bind:change="onChange" bind:success="onSuccess" bind:fail="onFail" bind:complete="onComplete" bind:preview="onPreview">
<image src="../../../../images/uploadImg3.png"></image>
</wux-upload>
</view>
</view>
<!-- 确定 -->
<view class="submit" bindtap="bindFormSubmit">确定</view>
<!-- 事件分类-待回应 -->
<wux-cascader visible="{{ visibleCascader }}" title="选择分类" options="{{ optionsCascader }}" bind:close="onCloseCascader" bind:change="onChangeCascader" />

86
components/event/handleSubmit/waitResponse/waitResponse.wxss

@ -0,0 +1,86 @@
/* components/event/handleSubmit/waitResponse/waitResponse.wxss */
@import "../../../../style/z.wxss";
/* 处理操作 */
.handle {
padding-top: 24rpx;
padding-bottom: 24rpx;
}
.handle-text {
font-size: 30rpx;
font-weight: bold;
color: #333333;
width: 190rpx;
}
.handle-more {
font-size: 34rpx;
color: #909da7;
}
.handle-more-text {
font-size: 32rpx;
color: #333333;
padding-right: 5rpx;
}
/* 回复居民意见 */
.advice-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
margin-bottom: 24rpx;
}
textarea {
width: 100%;
height: 200rpx;
font-size:32rpx;
color:rgba(51,51,51,1);
}
.block{
display: block;
}
.none{
display: none;
}
.place-holder{
font-size:32rpx;
color:rgba(144,157,167,1);
}
.textarea-view{
width: 100%;
height: 200rpx;
font-size:32rpx;
color:rgba(144,157,167,1);
line-height:37rpx;
}
._textarea-view{
width: 100%;
min-height: 200rpx;
height: auto;
font-size:32rpx;
color:rgba(51,51,51,1);
line-height:37rpx;
overflow-wrap: break-word
}
.wux-upload--picture-card .wux-upload__button {
padding: 0 !important;
}
.submit {
width: 650rpx;
background: #3c6cfc;
box-shadow: 0rpx 5rpx 16rpx 0rpx rgba(60, 108, 252, 0.36);
border-radius: 43rpx;
text-align: center;
font-size: 36rpx;
color: #ffffff;
margin: 88rpx auto;
padding: 24rpx;
}

49
components/event/issueProcessList/issueProcessList.js

@ -0,0 +1,49 @@
// components/processList/processList.js
Component({
/**
* 组件的属性列表
*/
properties: {
processList: {
type: Object,
value: {}
}
},
/**
* 组件的初始数据
*/
data: {
imgList: [],
isShow: false, //控制收起展开
},
/**
* 组件的方法列表
*/
methods: {
//预览图片,放大预览
preview(event) {
let currentUrl = event.currentTarget.dataset.src
let id = event.currentTarget.dataset.id
for (var i = 0; i < this.data.processList.length; i++) {
if (id == this.data.processList[i].id) {
this.setData({
imgList: this.data.processList[i].images
})
}
}
wx.previewImage({
current: currentUrl, // 当前显示图片的http链接=
urls: this.data.imgList // 需要预览的图片http链接列表
})
},
toChange: function () {
let that = this;
that.setData({
isShow: !that.data.isShow
})
}
}
})

7
components/event/issueProcessList/issueProcessList.json

@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"wux-timeline": "../../../dist/timeline/index",
"wux-timeline-item": "../../../dist/timeline-item/index"
}
}

80
components/event/issueProcessList/issueProcessList.wxml

@ -0,0 +1,80 @@
<!-- components/processList/processList.wxml -->
<!-- 处理进度 -->
<view class="bgfff paddingX24 marginB12">
<view class="process-title">处理进展</view>
<view class="process-list content {{isShow ? 'on' : ''}}">
<wux-timeline>
<wux-timeline-item custom wx:for="{{processList}}" wx:key="processList {{index}}">
<view slot="dot" class="process-icon" wx:if="{{!item.lastProcess}}"></view>
<view slot="dot" class="process-icon-1000" wx:if="{{item.lastProcess}}"></view>
<view>
<view class="process-box">
<view class="process-state">
【{{item.state === 0 ? "审核通过" : item.state === 1 ? "回应" : item.state === 2 ? "关闭" : item.state === 3 ? "转议题" : ""}}】
</view>
<view class="process-time">{{item.createdTime}}</view>
</view>
<view wx:if="{{item.state == '3'}}">
<view class="process-dept flex justify-start">
<view class="process-dept-left-160">来源社群</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.groupName}}
</view>
</view>
</view>
<view class="process-advice flex justify-start">
<view class="process-dept-left-160">处理人:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.handlerDept}}
</view>
</view>
</view>
<view class="process-advice flex justify-start">
<view class="process-dept-left-160">处理人电话:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.mobile}}
</view>
</view>
</view>
</view>
<view wx:else>
<view class="process-dept flex justify-start">
<view class="process-dept-left-160">处理部门:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.handlerDept}}
</view>
</view>
</view>
<view class="process-advice flex justify-start">
<view class="process-dept-left-160">处理意见:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.advice}}
</view>
</view>
</view>
</view>
<!-- 回应图片 -->
<view class="grit">
<block wx:for="{{item.images}}" wx:for-item="itemImages" wx:key="process-image {{index}}">
<image wx:if="{{item.images.length===1}}" class="content-image content-image1" data-id="{{item.id}}" data-src="{{itemImages}}" bindtap="preview" src="{{itemImages}}"></image>
<image wx:if="{{item.images.length===2}}" class="content-image content-image2" data-id="{{item.id}}" data-src="{{itemImages}}" bindtap="preview" src="{{itemImages}}"></image>
<image wx:if="{{item.images.length===3}}" class="content-image content-image3" data-id="{{item.id}}" data-src="{{itemImages}}" bindtap="preview" src="{{itemImages}}"></image>
</block>
</view>
</view>
</wux-timeline-item>
</wux-timeline>
</view>
<view class="border-bottom"></view>
<view class="last-title" wx:if= "{{isShow == false}}" bindtap="toChange">展开 ∨</view>
<view class="last-title" wx:else bindtap="toChange">收起 ∧</view>
</view>

141
components/event/issueProcessList/issueProcessList.wxss

@ -0,0 +1,141 @@
/* components/processList/processList.wxss */
@import "../../../style/z.wxss";
/* 处理进度 */
.process-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
}
.process-list {
color: #909da7;
padding-top: 50rpx;
}
.process-icon {
width: 20rpx;
height: 20rpx;
background: #3c6cfc;
border-radius: 50%;
margin-top: -16rpx;
}
.process-icon-1000 {
width: 20rpx;
height: 20rpx;
background: #C2CED8;
border-radius: 50%;
margin-top: -16rpx;
}
.process-box {
padding-top: 12rpx;
}
.process-state {
font-size: 26rpx;
margin-top: -24rpx;
margin-left: -10rpx;
}
.process-time {
font-size: 20rpx;
}
.process-dept {
font-size: 32rpx;
line-height: 48rpx;
}
.process-advice {
font-size: 32rpx;
}
.process-dept-left-160 {
width: 196rpx
}
.process-dept-right-160 {
width: calc(100% - 160rpx);
}
.process-dept-left-200 {
width: 200rpx
}
.process-dept-right-200 {
width: calc(100% - 200rpx);
}
.process-text-first {
color: #3c6cfc !important;
}
.process-text {
color: #333333;
/* overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
display: block; */
}
/* 回应图片 */
.grit {
display: grid;
grid-gap: 4rpx;
grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
}
.content-image {
width: auto;
border-radius: 16rpx;
/* background: #f7f7f7; */
margin-top: 18rpx;
}
.content-image1 {
height: 290rpx;
}
.content-image2 {
height: 200rpx;
}
.content-image3 {
height: 180rpx;
}
/* 折叠 */
.content{
overflow: hidden;
text-overflow: ellipsis;
text-overflow: -o-ellipsis-lastline;
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
padding: 50rpx 25rpx 0rpx 25rpx;
}
.on{
display: block;
text-overflow: clip;
overflow: visible;
}
.border-bottom{
width: 100%;
height: 4rpx;
background-color: #e7eeee;
margin-top: 10rpx;
}
.last-title{
height: 80rpx;
text-align: right;
font-size:28rpx;
font-weight:500;
line-height: 80rpx;
color:rgba(60,108,252,1);
}

49
components/event/itemProcessList/itemProcessList.js

@ -0,0 +1,49 @@
// components/event/itemProcessList/itemProcessList.js
Component({
/**
* 组件的属性列表
*/
properties: {
processList: {
type: Object,
value: {}
}
},
/**
* 组件的初始数据
*/
data: {
imgList:[],
isShow: false, //控制收起展开
},
/**
* 组件的方法列表
*/
methods: {
//预览图片,放大预览
preview(event) {
let currentUrl = event.currentTarget.dataset.src
let id = event.currentTarget.dataset.id
for (var i = 0; i < this.data.processList.length; i++) {
if (id == this.data.processList[i].id){
this.setData({
imgList: this.data.processList[i].images
})
}
}
wx.previewImage({
current: currentUrl, // 当前显示图片的http链接=
urls: this.data.imgList // 需要预览的图片http链接列表
})
},
toChange: function () {
let that = this;
that.setData({
isShow: !that.data.isShow
})
}
}
})

7
components/event/itemProcessList/itemProcessList.json

@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"wux-timeline": "../../../dist/timeline/index",
"wux-timeline-item": "../../../dist/timeline-item/index"
}
}

116
components/event/itemProcessList/itemProcessList.wxml

@ -0,0 +1,116 @@
<!-- components/event/itemProcessList/itemProcessList.wxml -->
<!-- 处理进度 -->
<view class="bgfff paddingX24 marginB12">
<view class="process-title">处理进展</view>
<view class="process-list content {{isShow ? 'on' : ''}}">
<wux-timeline>
<wux-timeline-item custom wx:for="{{processList}}" wx:key="processList {{index}}">
<!-- 项目 -->
<view slot="dot" class="process-icon" wx:if="{{item.itemDeptDTOS !== undefined}}">
<image class="process-icon-image" src="../../../images/item.png"></image>
</view>
<!-- 议题 -->
<view slot="dot" class="process-icon" wx:if="{{item.itemDeptDTOS === undefined && !item.lastProcess}}">
<image class="process-icon-image" src="../../../images/issue.png"></image>
</view>
<!-- 议题 最后一个为灰点 -->
<view slot="dot" class="process-icon-1000" wx:if="{{item.itemDeptDTOS === undefined && item.lastProcess}}"></view>
<view>
<view class="process-box">
<!-- 项目状态 0且吹哨部门为空-回应 0-回应,5-已关闭,10-已结案 -->
<view class="process-state" wx:if="{{item.itemDeptDTOS !== undefined && item.itemDeptDTOS.length === 0}}">
【{{item.state === 0 ? "回应" : item.state === 5 ? "已关闭" : item.state === 10 ? "已结案"
: item.state === 15 ? "上报网格化平台"
: item.state === 20 ? "网格化平台-受理"
: item.state === 25 ? "网格化平台-立案"
: item.state === 30 ? "网格化平台-派遣"
: item.state === 35 ? "网格化平台-中间再派"
: item.state === 40 ? "网格化平台-接单"
: item.state === 45 ? "网格化平台-处理"
: item.state === 50 ? "网格化平台-中间督办"
: item.state === 55 ? "网格化平台-催办"
: item.state === 60 ? "网格化平台-结案" : ""}}】
</view>
<!-- 项目状态 0且吹哨部门不为空-吹哨 -->
<view class="process-state" wx:if="{{item.itemDeptDTOS !== undefined && item.itemDeptDTOS.length !== 0}}">
【{{item.state === 0 ? "吹哨" : ""}}】
</view>
<!-- 议题状态 -->
<view class="process-state" wx:if="{{item.itemDeptDTOS === undefined}}">
【{{item.state === 0 ? "审核通过" : item.state === 1 ? "回应" : item.state === 2 ? "关闭" : item.state === 3 ? "转议题" : item.state === 100 ? "转项目" : ""}}】
</view>
<view class="process-time">{{item.createdTime}}</view>
</view>
<view wx:if="{{item.state == '3'}}">
<view class="process-dept flex justify-start">
<view class="process-dept-left-160">来源社群</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.groupName}}
</view>
</view>
</view>
<view class="process-advice flex justify-start">
<view class="process-dept-left-160">处理人:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.handlerDept}}
</view>
</view>
</view>
<view class="process-advice flex justify-start">
<view class="process-dept-left-160">处理人电话:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.mobile}}
</view>
</view>
</view>
</view>
<view wx:else>
<view class="process-dept flex justify-start">
<view class="process-dept-left-160">处理部门:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.handlerDept}}
</view>
</view>
</view>
<view class="process-dept flex justify-start" wx:if="{{item.itemDeptDTOS !== undefined && item.itemDeptDTOS.length !== 0}}">
<view class="process-dept-left-200">被吹哨部门:</view>
<view class="process-dept-right-200">
<block wx:for="{{item.itemDeptDTOS}}" wx:for-item="itemWhistlingDepts" wx:key="process-itemDeptDTOS {{index}}">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{itemWhistlingDepts.deptName}}
</view>
</block>
</view>
</view>
<view class="process-advice flex justify-start">
<view class="process-dept-left-160">处理意见:</view>
<view class="process-dept-right-160">
<view class="process-text {{item.firstProcess ? 'process-text-first' : ''}}">
{{item.advice}}
</view>
</view>
</view>
</view>
<!-- 回应图片 -->
<view class="grit">
<block wx:for="{{item.images}}" wx:for-item="itemImages" wx:key="process-image {{index}}">
<image wx:if="{{item.images.length===1}}" class="content-image content-image1" data-id="{{item.id}}" data-src="{{itemImages}}" bindtap="preview" src="{{itemImages}}"></image>
<image wx:if="{{item.images.length===2}}" class="content-image content-image2" data-id="{{item.id}}" data-src="{{itemImages}}" bindtap="preview" src="{{itemImages}}"></image>
<image wx:if="{{item.images.length===3}}" class="content-image content-image3" data-id="{{item.id}}" data-src="{{itemImages}}" bindtap="preview" src="{{itemImages}}"></image>
</block>
</view>
</view>
</wux-timeline-item>
</wux-timeline>
</view>
<view class="border-bottom"></view>
<view class="last-title" wx:if= "{{isShow == false}}" bindtap="toChange">展开 ∨</view>
<view class="last-title" wx:else bindtap="toChange">收起 ∧</view>
</view>

145
components/event/itemProcessList/itemProcessList.wxss

@ -0,0 +1,145 @@
/* components/event/itemProcessList/itemProcessList.wxss */
@import "../../../style/z.wxss";
/* 处理进度 */
.process-title {
font-size: 30rpx;
font-weight: bold;
color: #333333;
padding: 24rpx 0;
border-bottom: 1rpx solid #e7eeee;
}
.process-list {
color: #909da7;
padding-top: 50rpx;
}
.process-icon {
width: 46rpx;
height: 26rpx;
margin-top: -34rpx;
}
.process-icon-image {
width: 100%;
height: 100%;
}
.process-icon-1000 {
width: 20rpx;
height: 20rpx;
background: #C2CED8;
border-radius: 50%;
margin-top: -34rpx;
}
.process-box {
padding-top: 12rpx;
}
.process-state {
font-size: 26rpx;
margin-top: -24rpx;
margin-left: -10rpx;
}
.process-time {
font-size: 20rpx;
}
.process-dept {
font-size: 32rpx;
line-height: 48rpx;
}
.process-advice {
font-size: 32rpx;
}
.process-dept-left-160 {
width: 196rpx
}
.process-dept-right-160 {
width: calc(100% - 160rpx);
}
.process-dept-left-200 {
width: 200rpx
}
.process-dept-right-200 {
width: calc(100% - 200rpx);
}
.process-text-first {
color: #3c6cfc !important;
}
.process-text {
color: #333333;
/* overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 100%;
display: block; */
}
/* 回应图片 */
.grit {
display: grid;
grid-gap: 4rpx;
grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
}
.content-image {
width: auto;
border-radius: 16rpx;
/* background: #f7f7f7; */
margin-top: 18rpx;
}
.content-image1 {
height: 290rpx;
}
.content-image2 {
height: 200rpx;
}
.content-image3 {
height: 180rpx;
}
/* 折叠 */
.content{
overflow: hidden;
text-overflow: ellipsis;
text-overflow: -o-ellipsis-lastline;
display: -webkit-box;
-webkit-line-clamp: 4;
-webkit-box-orient: vertical;
padding: 50rpx 25rpx 0rpx 25rpx;
}
.on{
display: block;
text-overflow: clip;
overflow: visible;
}
.border-bottom{
width: 100%;
height: 4rpx;
background-color: #e7eeee;
margin-top: 10rpx;
}
.last-title{
height: 80rpx;
text-align: right;
font-size:28rpx;
font-weight:500;
line-height: 80rpx;
color:rgba(60,108,252,1);
}

23
components/icon/index.js

@ -0,0 +1,23 @@
"use strict";
Component({
options: {
addGlobalClass: true
},
externalClasses: ['custom-class'],
properties: {
info: null,
name: String,
size: String,
color: String,
block: {
type: Boolean,
value: false
}
},
methods: {
onClick: function () {
this.triggerEvent('click');
}
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxDQUFDO0lBQ04sT0FBTyxFQUFFO1FBQ1AsY0FBYyxFQUFFLElBQUk7S0FDckI7SUFFRCxlQUFlLEVBQUUsQ0FBQyxjQUFjLENBQUM7SUFFakMsVUFBVSxFQUFFO1FBQ1YsSUFBSSxFQUFFLElBQUk7UUFDVixJQUFJLEVBQUUsTUFBTTtRQUNaLElBQUksRUFBRSxNQUFNO1FBQ1osS0FBSyxFQUFFLE1BQU07UUFDYixLQUFLLEVBQUM7WUFDSixJQUFJLEVBQUMsT0FBTztZQUNaLEtBQUssRUFBQyxLQUFLO1NBQ1o7S0FDRjtJQUVELE9BQU8sRUFBRTtRQUNQLE9BQU87WUFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLENBQUM7S0FDRjtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIkNvbXBvbmVudCh7XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIGFkZEdsb2JhbENsYXNzOiB0cnVlXHJcbiAgICB9LFxyXG4gIFxyXG4gICAgZXh0ZXJuYWxDbGFzc2VzOiBbJ2N1c3RvbS1jbGFzcyddLFxyXG4gIFxyXG4gICAgcHJvcGVydGllczoge1xyXG4gICAgICBpbmZvOiBudWxsLFxyXG4gICAgICBuYW1lOiBTdHJpbmcsXHJcbiAgICAgIHNpemU6IFN0cmluZyxcclxuICAgICAgY29sb3I6IFN0cmluZyxcclxuICAgICAgYmxvY2s6e1xyXG4gICAgICAgIHR5cGU6Qm9vbGVhbixcclxuICAgICAgICB2YWx1ZTpmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gIFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICBvbkNsaWNrKCkge1xyXG4gICAgICAgIHRoaXMudHJpZ2dlckV2ZW50KCdjbGljaycpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7Il19

3
components/icon/index.json

@ -0,0 +1,3 @@
{
"component": true
}

24
components/icon/index.ts

@ -0,0 +1,24 @@
Component({
options: {
addGlobalClass: true
},
externalClasses: ['custom-class'],
properties: {
info: null,
name: String,
size: String,
color: String,
block:{
type:Boolean,
value:false
}
},
methods: {
onClick() {
this.triggerEvent('click');
}
}
});

7
components/icon/index.wxml

@ -0,0 +1,7 @@
<view
class=" custom-class ss-font ss-icon-{{ name }} "
style="{{ color ? 'color: ' + color : '' }}; {{ size ? 'font-size: ' + size : '' }}; {{ block ? 'display:block ' : '' }}"
bind:tap="onClick"
>
<view wx:if="{{ info !== null }}" class="ss-icon__info">{{ info }}</view>
</view>

52
components/icon/index.wxss

@ -0,0 +1,52 @@
/* @font-face {
font-family: 'ss-font';
src: url('https://www.52cxy.cn/wxapp/teacher/font/iconfont.eot');
src: url('https://www.52cxy.cn/wxapp/teacher/font/iconfont.woff') format('woff'),
url('https://www.52cxy.cn/wxapp/teacher/font/iconfont.ttf') format('truetype'),
url('https://www.52cxy.cn/wxapp/teacher/font/iconfont.svg') format('svg');
} */
@font-face {
font-family: 'ss-font'; /* project id 1360796 */
src: url('//at.alicdn.com/t/font_1360796_62vxgaud7d6.eot');
src: url('//at.alicdn.com/t/font_1360796_62vxgaud7d6.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_1360796_62vxgaud7d6.woff2') format('woff2'),
url('//at.alicdn.com/t/font_1360796_62vxgaud7d6.woff') format('woff'),
url('//at.alicdn.com/t/font_1360796_62vxgaud7d6.ttf') format('truetype'),
url('//at.alicdn.com/t/font_1360796_62vxgaud7d6.svg#ss-font') format('svg');
}
.ss-icon__info {
position: absolute;
right: 0;
top: -8px;
color: #fff;
font-size: 12px;
font-family: PingFang SC, Helvetica Neue, Arial, sans-serif;
text-align: center;
box-sizing: border-box;
padding: 0 3px;
min-width: 16px;
line-height: 14px;
border-radius: 16px;
background-color: #f44;
-webkit-transform: translateX(50%);
transform: translateX(50%);
-webkit-transform-origin: 100%;
transform-origin: 100%;
white-space: nowrap;
}
.ss-font {
font-family: "ss-font" !important;
display: inline-block;
font: normal normal normal 14px/1 ss-icon;
font-size: inherit;
text-rendering: auto;
position: relative;
}
.ss-icon-index:before {
content: "\e688";
}
.ss-icon-back:before {
content: "\e9c9";
}

14
components/loadMore/loadMore.js

@ -0,0 +1,14 @@
"use strict";
Component({
properties: {
loadType: {
type: String,
value: 'none'
},
loadVisible: {
type: Boolean,
value: false
}
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZE1vcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJsb2FkTW9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsU0FBUyxDQUFDO0lBQ1IsVUFBVSxFQUFFO1FBQ1YsUUFBUSxFQUFFO1lBQ1IsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsTUFBTTtTQUNkO1FBQ0QsV0FBVyxFQUFFO1lBQ1gsSUFBSSxFQUFFLE9BQU87WUFDYixLQUFLLEVBQUUsS0FBSztTQUNiO0tBQ0Y7Q0FDRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJDb21wb25lbnQoe1xuICBwcm9wZXJ0aWVzOiB7XG4gICAgbG9hZFR5cGU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIHZhbHVlOiAnbm9uZSdcbiAgICB9LFxuICAgIGxvYWRWaXNpYmxlOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgdmFsdWU6IGZhbHNlXG4gICAgfVxuICB9XG59KSJdfQ==

3
components/loadMore/loadMore.json

@ -0,0 +1,3 @@
{
"component": true
}

12
components/loadMore/loadMore.ts

@ -0,0 +1,12 @@
Component({
properties: {
loadType: {
type: String,
value: 'none'
},
loadVisible: {
type: Boolean,
value: false
}
}
})

9
components/loadMore/loadMore.wxml

@ -0,0 +1,9 @@
<view class="load-more" style="visibility: {{ loadVisible ? 'visible': 'hidden'}}">
<view class="more-data" wx:if="{{loadType === 'more'}}">
<image src="../../images/loading.gif" />
<view class="content">加载中...</view>
</view>
<view class="no-data" wx:elif="{{loadType === 'none'}}">
<view class="content">没有更多了~</view>
</view>
</view>

32
components/loadMore/loadMore.wxss

@ -0,0 +1,32 @@
.load-more {
width: 100%;
height: 100rpx;
}
.load-more .more-data {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.load-more .more-data image {
width: 35rpx;
height: 35rpx;
margin-right: 10rpx;
}
.load-more .more-data .content {
font-size: 28rpx;
color: #999;
}
.load-more .no-data {
width: 100%;
height: 100%;
text-align: center;
line-height: 100rpx;
}
.load-more .no-data .content {
font-size: 28rpx;
color: #999;
}

46
components/navbar/index.js

@ -0,0 +1,46 @@
"use strict";
var App = getApp();
Component({
options: {
addGlobalClass: true,
},
externalClasses: ['custom-class'],
properties: {
pageName: String,
showNav: {
type: Boolean,
value: true
},
bgColor: {
type: String,
value: '#fff'
},
iconColor: {
type: String,
value: '#000'
}
},
data: {},
lifetimes: {
attached: function () {
this.setData({
navHeight: App.globalData.navHeight,
navTop: App.globalData.navTop
});
}
},
methods: {
_navBack: function () {
wx.setStorageSync('isBackOpen', true);
wx.navigateBack({
delta: 1
});
},
_toIndex: function () {
wx.reLaunch({
url: '/pages/index/index'
});
},
}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsSUFBTSxHQUFHLEdBQUcsTUFBTSxFQUFFLENBQUM7QUFFckIsU0FBUyxDQUFDO0lBQ1IsT0FBTyxFQUFFO1FBQ1AsY0FBYyxFQUFFLElBQUk7S0FDckI7SUFDRCxlQUFlLEVBQUUsQ0FBQyxjQUFjLENBQUM7SUFJakMsVUFBVSxFQUFFO1FBQ1YsUUFBUSxFQUFDLE1BQU07UUFDZixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsT0FBTztZQUNiLEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRCxPQUFPLEVBQUM7WUFDTixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxNQUFNO1NBQ2Q7UUFDRCxTQUFTLEVBQUM7WUFDUixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRSxNQUFNO1NBQ2Q7S0FDRjtJQUtELElBQUksRUFBRSxFQUVMO0lBQ0QsU0FBUyxFQUFFO1FBQ1QsUUFBUSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDWCxTQUFTLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTO2dCQUNuQyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNO2FBQzlCLENBQUMsQ0FBQTtRQUNILENBQUM7S0FDSDtJQUlELE9BQU8sRUFBRTtRQUVQLFFBQVEsRUFBRTtZQUNSLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFBO1lBQ3JDLEVBQUUsQ0FBQyxZQUFZLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLENBQUM7YUFDVCxDQUFDLENBQUE7UUFDSixDQUFDO1FBRUQsUUFBUSxFQUFFO1lBQ1IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDVixHQUFHLEVBQUUsb0JBQW9CO2FBQzFCLENBQUMsQ0FBQTtRQUNKLENBQUM7S0FDRjtDQUNGLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNvbXBvbmVudHMvbmF2YmFyL2luZGV4LmpzXHJcbmNvbnN0IEFwcCA9IGdldEFwcCgpO1xyXG5cclxuQ29tcG9uZW50KHtcclxuICBvcHRpb25zOiB7XHJcbiAgICBhZGRHbG9iYWxDbGFzczogdHJ1ZSxcclxuICB9LFxyXG4gIGV4dGVybmFsQ2xhc3NlczogWydjdXN0b20tY2xhc3MnXSxcclxuICAvKipcclxuICAgKiDnu4Tku7bnmoTlsZ7mgKfliJfooahcclxuICAgKi9cclxuICBwcm9wZXJ0aWVzOiB7XHJcbiAgICBwYWdlTmFtZTpTdHJpbmcsXHJcbiAgICBzaG93TmF2OiB7XHJcbiAgICAgIHR5cGU6IEJvb2xlYW4sXHJcbiAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICB9LFxyXG4gICAgYmdDb2xvcjp7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgdmFsdWU6ICcjZmZmJ1xyXG4gICAgfSxcclxuICAgIGljb25Db2xvcjp7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgdmFsdWU6ICcjMDAwJ1xyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIOe7hOS7tueahOWIneWni+aVsOaNrlxyXG4gICAqL1xyXG4gIGRhdGE6IHtcclxuICAgXHJcbiAgfSxcclxuICBsaWZldGltZXM6IHtcclxuICAgIGF0dGFjaGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgbmF2SGVpZ2h0OiBBcHAuZ2xvYmFsRGF0YS5uYXZIZWlnaHQsXHJcbiAgICAgICAgbmF2VG9wOiBBcHAuZ2xvYmFsRGF0YS5uYXZUb3BcclxuICAgICAgfSlcclxuICAgICB9XHJcbiAgfSxcclxuICAvKipcclxuICAgKiDnu4Tku7bnmoTmlrnms5XliJfooahcclxuICAgKi9cclxuICBtZXRob2RzOiB7XHJcbiAgICAvL+WbnumAgFxyXG4gICAgX25hdkJhY2s6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgd3guc2V0U3RvcmFnZVN5bmMoJ2lzQmFja09wZW4nLCB0cnVlKVxyXG4gICAgICB3eC5uYXZpZ2F0ZUJhY2soe1xyXG4gICAgICAgIGRlbHRhOiAxXHJcbiAgICAgIH0pICAgICAgXHJcbiAgICB9LFxyXG4gICAgLy/lm57kuLvpobVcclxuICAgIF90b0luZGV4OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHd4LnJlTGF1bmNoKHtcclxuICAgICAgICB1cmw6ICcvcGFnZXMvaW5kZXgvaW5kZXgnXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gIH1cclxufSlcclxuIl19

6
components/navbar/index.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"ss-icon": "../icon/index"
}
}

60
components/navbar/index.ts

@ -0,0 +1,60 @@
// components/navbar/index.js
const App = getApp();
Component({
options: {
addGlobalClass: true,
},
externalClasses: ['custom-class'],
/**
*
*/
properties: {
pageName:String,
showNav: {
type: Boolean,
value: true
},
bgColor:{
type: String,
value: '#fff'
},
iconColor:{
type: String,
value: '#000'
}
},
/**
*
*/
data: {
},
lifetimes: {
attached: function () {
this.setData({
navHeight: App.globalData.navHeight,
navTop: App.globalData.navTop
})
}
},
/**
*
*/
methods: {
//回退
_navBack: function () {
wx.setStorageSync('isBackOpen', true)
wx.navigateBack({
delta: 1
})
},
//回主页
_toIndex: function () {
wx.reLaunch({
url: '/pages/index/index'
})
},
}
})

12
components/navbar/index.wxml

@ -0,0 +1,12 @@
<!--components/navbar/index.wxml-->
<view class="navbar custom-class nav-wrap" style='height:{{navHeight}}px;background-color:{{bgColor}}'>
<view wx:if="{{showNav}}" class="navbar-action-wrap navbar-action-group row item-center" style='top:{{navTop}}px;background-color:rgba(255,255,255,.6)'>
<ss-icon name="back" color="{{iconColor}}" size="15px" block="{{true}}" class="navbar-action_item" bind:click="_navBack"></ss-icon>
<view class="navImg navbar-action_item" bind:tap="_toIndex">
<image src="../../images/home.png"></image>
</view>
</view>
<view class='navbar-title' style='top:{{navTop}}px'>
{{pageName}}
</view>
</view>

81
components/navbar/index.wxss

@ -0,0 +1,81 @@
/* components/navbar/index.wxss */
.navbar {
width: 100%;
overflow: hidden;
position: relative;
top: 0;
left: 0;
z-index: 10;
flex-shrink: 0;
}
.navbar-title {
width: 100%;
box-sizing: border-box;
padding-left: 115px;
padding-right: 115px;
height: 32px;
line-height: 32px;
text-align: center;
position: absolute;
left: 0;
z-index: 10;
color: #333;
font-size: 32rpx;
font-weight:normal;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.navbar-action-wrap {
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
position: absolute;
left: 10px;
z-index: 11;
line-height: 1;
padding-top: 4px;
padding-bottom: 4px;
}
.navbar-action-group {
border: 1px solid #f0f0f0;
border-radius: 20px;
overflow: hidden;
}
.navbar-action_item {
padding: 3px 0;
color: #333;
}
.navbar-action-group .navbar-action_item {
border-right: 1px solid #f0f0f0;
padding: 3px 14px;
}
.navbar-action-group .last {
border-right: none;
}
.navImg{
width: 15px;
height: 15px;
}
.navImg image{
width: 100%;
height: 100%;
}
.nav-wrap{
position: fixed;
width: 100%;
top: 0;
background: #fff;
color: #000;
z-index: 9999999;
}

15
components/nodata/nodata.js

@ -0,0 +1,15 @@
"use strict";
Component({
properties: {
isShow: {
type: Boolean
},
top:{
type:Boolean,
value:false
}
},
data: {},
methods: {}
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibm9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxTQUFTLENBQUM7SUFJTixVQUFVLEVBQUU7UUFDUixNQUFNLEVBQUM7WUFDSCxJQUFJLEVBQUMsT0FBTztTQUNmO0tBQ0o7SUFLRCxJQUFJLEVBQUUsRUFFTDtJQUtELE9BQU8sRUFBRSxFQUVSO0NBQ0YsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gY29tcG9uZW50cy9ub2RhdGEvbm9kYXRhLmpzXHJcbkNvbXBvbmVudCh7XHJcbiAgICAvKipcclxuICAgICAqIOe7hOS7tueahOWxnuaAp+WIl+ihqFxyXG4gICAgICovXHJcbiAgICBwcm9wZXJ0aWVzOiB7XHJcbiAgICAgICAgaXNTaG93OntcclxuICAgICAgICAgICAgdHlwZTpCb29sZWFuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICBcclxuICAgIC8qKlxyXG4gICAgICog57uE5Lu255qE5Yid5aeL5pWw5o2uXHJcbiAgICAgKi9cclxuICAgIGRhdGE6IHtcclxuICBcclxuICAgIH0sXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIOe7hOS7tueahOaWueazleWIl+ihqFxyXG4gICAgICovXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgXHJcbiAgICB9XHJcbiAgfSlcclxuICAiXX0=

4
components/nodata/nodata.json

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

30
components/nodata/nodata.ts

@ -0,0 +1,30 @@
// components/nodata/nodata.js
Component({
/**
*
*/
properties: {
isShow:{
type:Boolean
},
top:{
type:Boolean,
value:false
}
},
/**
*
*/
data: {
},
/**
*
*/
methods: {
}
})

5
components/nodata/nodata.wxml

@ -0,0 +1,5 @@
<!--components/nodata/nodata.wxml-->
<view class="box" wx:if="{{isShow}}" style="margin-top:{{top?'400rpx':''}}">
<image src="../../images/nodata.png" class="image"/>
<text class="text">暂无数据~</text>
</view>

19
components/nodata/nodata.wxss

@ -0,0 +1,19 @@
/* components/nodata/nodata.wxss */
.box{
width: 100%;
height: auto;
box-sizing: border-box;
text-align: center;
margin-top: 100rpx;
}
.image{
width: 450rpx;
height: 240rpx;
}
.text{
width: 100%;
height: auto;
font-size: 28rpx;
color: #BCBCBC;
display: block;
}

86
components/project/project.js

@ -0,0 +1,86 @@
var api = require('../../api/project.js')
var utils = require('../../utils/util')
const app = getApp()
Component({
properties: {
state: Number
},
data: {
items: [],
showSkeleton: true
},
attached: function () {
},
lifetimes: {
attached: function () {},
moved: function () {},
detached: function () {},
},
ready: function () {
},
pageLifetimes: {
// 组件所在页面的生命周期函数
show: function () {},
},
methods: {
getItemList: function (page, index, clear) {
// wx.showLoading({
// title: '加载中',
// })
if (clear == 0) {//清空数据
this.setData({
items: []
})
}
let that = this
let itemState = 0
if (index == 1) {
itemState = 10
} else if (index == 2) {
itemState = 5
} else {}
let curGrid = wx.getStorageSync('currentGrid');
let deptId='';
if (curGrid !== undefined && curGrid !== 'undefined' && curGrid !== '') {
deptId = curGrid.deptId
}
let params = {
"deptId": deptId,
"pageIndex": page,
"pageSize": app.globalData.pageSize,
"timestamp": utils.formatTimeOpen(new Date(), '-', ':'),
"itemState": itemState
}
console.log("params:" + JSON.stringify(params))
api.getItemList(params).then(function (res) {
// wx.hideLoading()
console.log(res.data)
that.setData({
items: that.data.items.concat(res.data),
showSkeleton: false
})
})
},
toItemDetail(e) {
const id = e.currentTarget.dataset.id
const itemState = this.data.state
console.log('状态:'+itemState)
if (itemState == 0){
wx.navigateTo({
url: `../../pages/itemDetail/itemDetail?itemId=${id}&itemState=${itemState}`
})
} else {
wx.navigateTo({
url: `../../pages/project/projectDetail/projectDetail?itemId=${id}&itemState=${itemState}`
})
}
}
}
})

6
components/project/project.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"skeleton": "../skeleton/subject/subject"
}
}

60
components/project/project.wxml

@ -0,0 +1,60 @@
<block wx:if="{{showSkeleton}}">
<skeleton
wx:for="{{[1]}}"
wx:for-index="index"
wx:for-item="item"
wx:key="{{index}}">
</skeleton>
</block>
<block wx:if="{{!showSkeleton}}">
<view class="layout" wx:for="{{items}}" wx:key="{{index}}">
<view class="subject-item">
<view class="subject-title line-clamp">
{{item.itemContent}}
</view>
<view class="tags tag1">{{item.categoryName}}</view>
<view class="subject-user">
<view class="user-avatar">
<image src="{{item.avatar}}" />
</view>
<view class="user-name">
<view class="name">{{item.nickname}}</view>
<view class="time">{{item.createdTime}}</view>
</view>
</view>
<view class="comment">
【最新进展】<view class="line-clamp">{{item.latestProgress.advice}}</view>
<view class="addtime">{{item.latestProgress.createdTime}}</view>
</view>
<view class="btmbar">
<view class="halfwidth fl attitude">表达态度{{item.statementNum}}次</view>
<view class="halfwidth fr handle">
<view class="buttons btn-size-small" wx:if="{{state == '0'}}">
<view class="btn_label btn-size-small btn_label-small" bindtap="toItemDetail" data-id="{{item.id}}">
去处理
</view>
<image class="ic_btn btn-size-small" src="/images/btn.png"></image>
</view>
<view class="buttons btn-size-small" wx:elif="{{state == '1'}}">
<view class="btn_label btn-size-small btn_label-small" bindtap="toItemDetail" data-id="{{item.id}}">
已结案
</view>
<image class="ic_btn btn-size-small" src="/images/btn2.png"></image>
</view>
<view class="buttons btn-size-small" wx:elif="{{state == '2'}}">
<view class="btn_label btn-size-small btn_label-small ygb-color" bindtap="toItemDetail" data-id="{{item.id}}">
已关闭
</view>
<image class="ic_btn btn-size-small" src="/images/btn4.png"></image>
</view>
</view>
</view>
</view>
</view>
</block>
<view class="loadmore">上滑加载更多</view>

182
components/project/project.wxss

@ -0,0 +1,182 @@
.layout{
width: 100%;
display: flex;
/* flex-direction: column;
justify-content: space-between;
box-sizing: border-box; */
border-bottom: 6pt solid #f6f8f8;
}
.fl{
float: left;
}
.fr{
float: right;
}
.subject-item{
display: flex;
flex-direction: column;
width: 100%;
margin: 10px;
}
.subject-title{
width: 100%;
display: inline-table;
font-size: 36rpx;
color: #333333;
}
.tags{
float: left;
font-size:24rpx;
align-self: end;
display: inline-table;
border-radius: 4px;
height: 20px;
margin-right: 5px;
line-height: 20px;
padding: 0 12rpx 0 12rpx;
}
.tag1{
color: #ff9f00;
background: #fff0cf;
border: 1px solid #ffe1b8;
}
.tag2{
color: #3abfc5;
background: #d6f6f7;
border: 1px solid #a5ebee;
}
.tag3{
color: #a081f1;
background: #efe9ff;
border: 1px solid #ddd7f1;
}
.tag4{
color: #fa7f8a;
background: #ffe9f1;
border: 1px solid #f2d3de;
}
.subject-user{
width: 100%;
display: table;
padding: 20rpx 0;
}
.swiper-item-con{
height: 100%;
}
.user-avatar{
width: 46rpx;
height: 46rpx;
display: table;
float: left;
border-radius: 4px;
background: #eeeeee;
margin-right: 10px;
}
.user-avatar image{
display: table;
width: 46rpx;
height: 46rpx;
}
.user-name{
float: left;
height: 46rpx;
}
.user-name .name{
font-size: 24rpx;
color:#7A8C9A;
height: 25rpx;
line-height: 25rpx;
}
.user-name .time{
height: 25rpx;
line-height: 30rpx;
font-size: 20rpx;
color: #A5B0B9;
}
.comment{
width: calc(100% - 20px);
display: inline-table;
font-size: 30rpx;
color: #7A8C9A;
padding: 10px;
background: #F2F6F7;
border-radius: 8px;
}
.addtime{
width: 100%;
text-align: right;
font-size: 20rpx;
}
.btmbar{
width: 100%;
display: inline-table;
height: 50rpx;
line-height: 90rpx;
font-size: 36rpx;
color: #333333;
}
.halfwidth{
width: 46%;
}
.attitude{
font-size: 26rpx;
}
.handle{
margin-top: 20rpx;
width: 75px;
height: 30px;
}
.loadmore{
width: 100%;
text-align: center;
height: 50px;
line-height: 50px;
background: #f6f8f8;
font-size:12px;
color: #999;
}
/* 自定义按钮样式 */
.buttons {
font-size: 32rpx;
font-weight: bold;
margin: auto;
left: 0;
right: 0;
}
.btn-size-small{
width: 150rpx;
height: 60rpx;
}
.btn_label{
position: absolute;
color: #fff;
z-index: 99;
text-align: center;
}
.btn_label-small{
line-height: 60rpx;
font-size: 28rpx;
font-weight: normal;
}
.ic_btn {
/* position: fixed; */
}
.btn {
opacity: 0;
}
/*----end----*/
.ygb-color{
color: #909DA7
}
.line-clamp{
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
white-space: normal !important;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}

8
components/skeleton/subject/subject.js

@ -0,0 +1,8 @@
Component({
data: {
},
methods: {
}
})

3
components/skeleton/subject/subject.json

@ -0,0 +1,3 @@
{
"component": true
}

13
components/skeleton/subject/subject.wxml

@ -0,0 +1,13 @@
<view class="preload-issue-item">
<view class="header"></view>
<view class="content"></view>
<view class="image-list">
<view class="image-list-item"></view>
<view class="image-list-item"></view>
<view class="image-list-item"></view>
</view>
<view class="type"></view>
<view class="hot-remark"></view>
<view class="altitude"></view>
</view>

81
components/skeleton/subject/subject.wxss

@ -0,0 +1,81 @@
.preload-issue-item {
width: 100%;
background: #fff;
box-sizing: border-box;
border-radius: 16rpx;
padding: 0 24rpx;
overflow: hidden;
margin-bottom: 20rpx;
}
.preload-issue-item .header {
height: 52rpx;
margin-bottom: 10rpx;
margin-top: 20rpx;
border-radius: 8rpx;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
.preload-issue-item .content {
width: 100%;
height: 120rpx;
border-radius: 8rpx;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
.preload-issue-item .image-list {
display:grid;
grid-template-columns: repeat(auto-fit, minmax(214rpx, 1fr));
grid-gap: 10rpx;
height: 160rpx;
margin-top: 20rpx;
}
.preload-issue-item .image-list .image-list-item {
width: 100%;
height: 100%;
border-radius: 16rpx;
overflow: hidden;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
.preload-issue-item .type {
height: 20rpx;
margin-top: 10rpx;
margin-bottom: 10rpx;
border-radius: 2rpx;
width: 50%;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
.preload-issue-item .hot-remark {
width: 100%;
height: 120rpx;
border-radius: 8rpx;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
.preload-issue-item .altitude {
width:100%;
height: 30rpx;
margin: 10rpx 0;
border-radius: 2rpx;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
margin-bottom: 35rpx;
}
@keyframes loading {
0% {
background-position: 100% 50%
}
100% {
background-position: 0 50%
}
}

8
components/skeleton/userManage/userManage.js

@ -0,0 +1,8 @@
Component({
data: {
},
methods: {
}
})

3
components/skeleton/userManage/userManage.json

@ -0,0 +1,3 @@
{
"component": true
}

18
components/skeleton/userManage/userManage.wxml

@ -0,0 +1,18 @@
<view class="preload-issue-item">
<view class="header"></view>
<view class="content"></view>
<view class="content"></view>
<view class="content"></view>
<view class="content"></view>
<view class="content"></view>
<view class="content"></view>
<!-- <view class="image-list">
<view class="image-list-item"></view>
<view class="image-list-item"></view>
<view class="image-list-item"></view>
</view> -->
<!-- <view class="type"></view> -->
<!-- <view class="hot-remark"></view> -->
<!-- <view class="altitude"></view> -->
</view>

39
components/skeleton/userManage/userManage.wxss

@ -0,0 +1,39 @@
.preload-issue-item {
width: 100%;
background: #fff;
box-sizing: border-box;
border-radius: 16rpx;
padding: 0 24rpx;
overflow: hidden;
margin-bottom: 20rpx;
}
.preload-issue-item .header {
height: 52rpx;
margin-bottom: 10rpx;
margin-top: 20rpx;
border-radius: 8rpx;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
.preload-issue-item .content {
width: 100%;
height: 120rpx;
margin-top: 20rpx;
border-radius: 8rpx;
background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%);
animation: loading 1.4s ease infinite;
background-size: 400% 100%;
}
@keyframes loading {
0% {
background-position: 100% 50%
}
100% {
background-position: 0 50%
}
}

107
components/subject/subject.js

@ -0,0 +1,107 @@
var api = require('../../api/common.js')
const app = getApp()
Component({
properties: {
state: Number
},
data: {
items: [],
showSkeleton: true
},
attached: function () {},
ready: function () {
},
pageLifetimes: {
// 组件所在页面的生命周期函数
show: function () {},
},
methods: {
getIssueList(searchData) {
// wx.showLoading({
// title: '加载中',
// })
if (searchData.clear == 0){//清空数据
this.setData({
items: []
})
}
this.searchData = searchData
var orderType = "";
if (searchData.currenttab == "hot") {
orderType = "1"
} else {
orderType = "0"
}
let deptId = ''
let currentGrid = wx.getStorageSync('currentGrid')
console.log('currentGrid', currentGrid)
if (currentGrid !== undefined && currentGrid !== 'undefined' && currentGrid !== '') {
deptId = currentGrid.deptId
}
console.log('deptId', deptId)
// 0-待回应 1-待处理 2-已驳回 3-已关闭
const state = this.data.state
if (state == '0' || state == '2') {
let params = {
"deptId": deptId,
"pageIndex": searchData.indexPage,
"pageSize": app.globalData.pageSize,
"timestamp": searchData.date,
"state": state == '0' ? 0 : 2
}
this.getEventList(params)
} else if (state == '1' || state == '3') {
let params = {
"deptId": deptId,
"orderType": orderType,
"pageIndex": searchData.indexPage,
"pageSize": app.globalData.pageSize,
"timestamp": searchData.date,
"issueState": state == '1' ? 0 : 2
}
console.log(params)
api.getIssueList(params).then((res) => {
// wx.hideLoading()
console.log(res.data)
this.setData({
items: this.data.items.concat(res.data),
showSkeleton: false
})
})
}
},
getEventList(params) {
api.getEventList(params).then((res) => {
// wx.hideLoading()
console.log(res.data)
this.setData({
items: this.data.items.concat(res.data),
showSkeleton: false
})
})
},
toIssueDetail(e) {
const id = e.currentTarget.dataset.id
// 议题状态 0-待处理,2-已关闭
// 事件状态 0-待回应,2-已驳回
// 0-待回应 1-待处理 2-已驳回 3-已关闭
const issueState = this.data.state
wx.navigateTo({
url: `../../pages/issueDetail/issueDetail?issueId=${id}&issueState=${issueState}`
})
}
}
})

6
components/subject/subject.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"skeleton": "../skeleton/subject/subject"
}
}

97
components/subject/subject.wxml

@ -0,0 +1,97 @@
<block wx:if="{{showSkeleton}}">
<skeleton
wx:for="{{[1]}}"
wx:for-index="index"
wx:for-item="item"
wx:key="{{index}}">
</skeleton>
</block>
<block wx:if="{{!showSkeleton}}">
<view class="layout" wx:for="{{items}}" wx:key="{{index}}">
<view class="subject-item">
<view class="subject-title line-clamp" wx:if="{{state == '0' || state == '2'}}">
{{item.eventContent}}
</view>
<view class="subject-title line-clamp" wx:else>
{{item.issueContent}}
</view>
<view class="tags tag1" wx:if="{{state=='1'}}">{{item.categoryName}}</view>
<view wx:if="{{state == '0' || state == '2' || state == '3'}}">
<view class="subject-user halfwidth fl">
<view class="user-avatar">
<image src="{{item.userFace}}" />
</view>
<view class="user-name" wx:if="{{state == '0' || state == '2'}}">
<view class="name">{{item.nickName}}</view>
<view class="time">{{item.createdTime}}</view>
</view>
<view class="user-name" wx:else>
<view class="name">{{item.nickname}}</view>
<view class="time">{{item.distributeTime}}</view>
</view>
</view>
<view class="halfwidth fr handle">
<view class="buttons btn-size-small" wx:if="{{state == '0'}}">
<view class="btn_label btn-size-small btn_label-small" bindtap="toIssueDetail" data-id="{{item.id}}">
去审核
</view>
<image class="ic_btn btn-size-small" src="/images/btn3.png"></image>
</view>
<view class="buttons btn-size-small" wx:elif="{{state == '2'}}">
<view class="btn_label btn-size-small btn_label-small" bindtap="toIssueDetail" data-id="{{item.id}}">
已驳回
</view>
<image class="ic_btn btn-size-small" src="/images/relieve.png"></image>
</view>
<view class="buttons btn-size-small" wx:elif="{{state == '3'}}">
<view class="btn_label btn-size-small btn_label-small ygb-color" bindtap="toIssueDetail" data-id="{{item.id}}">
已关闭
</view>
<image class="ic_btn btn-size-small" src="/images/btn4.png"></image>
</view>
</view>
</view>
<view wx:else>
<view class="subject-user">
<view class="user-avatar">
<image src="{{item.userFace}}" />
</view>
<view class="user-name">
<view class="name">{{item.nickname}}</view>
<view class="time">{{item.distributeTime}}</view>
</view>
</view>
<view class="comment">
【最热评论】<view class="line-clamp">{{item.comment.content}}</view>
<view class="addtime">{{item.comment.createdTime}}</view>
</view>
<view class="btmbar">
<view class="halfwidth fl attitude">表达态度{{item.statementNum}}次</view>
<view class="halfwidth fr handle">
<view class="buttons btn-size-small">
<view class="btn_label btn-size-small btn_label-small" bindtap="toIssueDetail" data-id="{{item.id}}">
去处理
</view>
<image class="ic_btn btn-size-small" src="/images/btn.png"></image>
</view>
</view>
</view>
</view>
</view>
</view>
</block>
<view class="loadmore">上滑加载更多</view>

186
components/subject/subject.wxss

@ -0,0 +1,186 @@
.layout{
width: 100%;
display: flex;
/* flex-direction: column;
justify-content: space-between;
box-sizing: border-box; */
border-bottom: 6pt solid #f6f8f8;
}
.fl{
float: left;
}
.fr{
float: right;
}
.subject-item{
display: flex;
flex-direction: column;
width: 100%;
margin: 10px;
}
.subject-title{
width: 100%;
display: inline-table;
font-size: 36rpx;
color: #333333;
}
.tags{
float: left;
font-size:24rpx;
align-self: end;
display: inline-table;
border-radius: 4px;
height: 20px;
margin-right: 5px;
line-height: 20px;
padding: 0 12rpx 0 12rpx;
}
.tag1{
color: #ff9f00;
background: #fff0cf;
border: 1px solid #ffe1b8;
}
.tag2{
color: #3abfc5;
background: #d6f6f7;
border: 1px solid #a5ebee;
}
.tag3{
color: #a081f1;
background: #efe9ff;
border: 1px solid #ddd7f1;
}
.tag4{
color: #fa7f8a;
background: #ffe9f1;
border: 1px solid #f2d3de;
}
.subject-user{
width: 100%;
display: table;
padding: 20rpx 0;
}
.swiper-item-con{
height: 100%;
}
.user-avatar{
width: 46rpx;
height: 46rpx;
display: table;
float: left;
border-radius: 4px;
background: #eeeeee;
margin-right: 10px;
}
.user-avatar image{
display: table;
width: 46rpx;
height: 46rpx;
}
.user-name{
float: left;
height: 46rpx;
}
.user-name .name{
font-size: 24rpx;
color:#7A8C9A;
height: 25rpx;
line-height: 25rpx;
}
.user-name .time{
height: 25rpx;
line-height: 30rpx;
font-size: 20rpx;
color: #A5B0B9;
}
.comment{
width: calc(100% - 20px);
display: inline-table;
font-size: 30rpx;
color: #7A8C9A;
padding: 10px;
background: #F2F6F7;
border-radius: 8px;
}
.addtime{
width: 100%;
text-align: right;
font-size: 20rpx;
}
.btmbar{
width: 100%;
display: inline-table;
height: 50rpx;
line-height: 90rpx;
font-size: 36rpx;
color: #333333;
}
.halfwidth{
width: 46%;
}
.nameHalfwidth{
width: 70%;
}
._nameHalfwidth{
width: 22%;
}
.attitude{
font-size: 26rpx;
}
.handle{
margin-top: 20rpx;
width: 75px;
height: 30px;
}
.loadmore{
width: 100%;
text-align: center;
height: 50px;
line-height: 50px;
background: #f6f8f8;
font-size:12px;
color: #999;
}
/* 自定义按钮样式 */
.buttons {
font-size: 32rpx;
font-weight: bold;
margin: auto;
left: 0;
right: 0;
}
.btn-size-small{
width: 150rpx;
height: 60rpx;
}
.btn_label{
position: absolute;
color: #fff;
z-index: 99;
text-align: center;
}
.btn_label-small{
line-height: 60rpx;
font-size: 28rpx;
font-weight: normal;
}
.ic_btn {
/* position: fixed; */
}
.btn {
opacity: 0;
}
/*----end----*/
.line-clamp{
display: -webkit-box;
overflow: hidden;
text-overflow: ellipsis;
word-wrap: break-word;
white-space: normal !important;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.ygb-color{
color: #909DA7
}

117
components/userManage/userManage.js

@ -0,0 +1,117 @@
var api = require('../../api/userManage.js')
const app = getApp()
Component({
properties: {
state: Number
},
data: {
list: [],
showSkeleton: true
},
attached: function () {
},
lifetimes: {
attached: function () {
this.getUserManagelist()
},
moved: function () { },
detached: function () { },
},
ready: function () {
},
pageLifetimes: {
// 组件所在页面的生命周期函数
show: function () { },
},
methods: {
getUserManagelist: function (searchData) {
// setTimeout(() => {
// this.setData({
// showSkeleton: false
// })
// }, 5000)
// wx.showLoading({
// title: '加载中',
// })
let that = this
if (searchData) {
this.searchData = searchData
} else {
return;
}
console.log('清空:' + this.searchData.clear)
if (this.searchData.clear == 1) {
that.setData({
list: []
})
}
let authenticatedFlag = 0; //是否已认证 0否 1是
let partyFlag = 0;//是否党员,0否,1是
if (this.searchData.index == 0) {//待认证居民
authenticatedFlag = 0;
partyFlag = 0;
} else if (this.searchData.index == 1) {//认证居民
authenticatedFlag = 1;
partyFlag = 0;
} else if (this.searchData.index == 2) {//认证党员
authenticatedFlag = 1;
partyFlag = 1;
} else if (this.searchData.index == 3) {//党员认证失败
authenticatedFlag = 0;
partyFlag = 1;
}
let deptId = ''
let currentGrid = wx.getStorageSync('currentGrid')
console.log('currentGrid', currentGrid)
if (currentGrid !== undefined && currentGrid !== 'undefined' && currentGrid !== '') {
deptId = currentGrid.deptId
}
let params = {
"pageIndex": searchData.indexPage,
"pageSize": app.globalData.pageSize,
"timestamp": searchData.date,
"authenticatedFlag": authenticatedFlag,
"partyFlag": partyFlag,
"gridId": deptId
}
api.getUserManagelist(params).then(function (res) {
// wx.hideLoading()
console.log(that.data.list.concat(res.data))
that.setData({
list: that.data.list.concat(res.data),
showSkeleton: false
})
})
},
toUserWaItDetails (options) {
const userId = options.currentTarget.dataset.userid
// const partyFlag = 0;//非党员
if (this.searchData.index == 0) {//待认证居民
wx.navigateTo({
url: `../../../pages/user_moudle/checkpending/checkpending?userId=${userId}`//待认证
})
} else if (this.searchData.index == 1) {//认证居民
wx.navigateTo({
url: `../../../pages/user_moudle/certificationDetails/certificationDetails?userId=${userId}&partyFlag=0`
})
} else if (this.searchData.index == 2) {//认证党员
wx.navigateTo({
url: `../../../pages/user_moudle/certificationDetails/certificationDetails?userId=${userId}&partyFlag=1`
})
} else if (this.searchData.index == 3) {//党员认证失败
wx.navigateTo({
url: `../../../pages/user_moudle/certificationDetails/certificationDetails?userId=${userId}&partyFlag=1`
})
}
}
}
})

6
components/userManage/userManage.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"skeleton": "../skeleton/userManage/userManage"
}
}

43
components/userManage/userManage.wxml

@ -0,0 +1,43 @@
<block wx:if="{{showSkeleton}}">
<skeleton
wx:for="{{[1]}}"
wx:for-index="index"
wx:for-item="item"
wx:key="{{index}}">
</skeleton>
</block>
<block wx:if="{{!showSkeleton}}">
<view class="layout" wx:for="{{list}}" wx:key="{{index}}">
<view class="subject-item">
<view class="wux-pull-left imgView">
<image src="{{item.faceImg}}" />
</view>
<view class="wux-pull-left">
<view class="subject-title">{{item.nickname}}</view>
<view class="time">{{item.registerTime}}</view>
</view>
<view class="buttons btn-size-small wux-pull-right" wx:if="{{state=='0'}}">
<view class="btn_label btn-size-small btn_label-small" data-userId="{{item.userId}}" bindtap="toUserWaItDetails">
去认证
</view>
<image class="ic_btn btn-size-small" src="/images/btn.png"></image>
</view>
<view class="buttons btn-size-small wux-pull-right" wx:if="{{state=='1'}}">
<view class="btn_label btn-size-small btn_label-small" data-userId="{{item.userId}}" bindtap="toUserWaItDetails">
已认证
</view>
<image class="ic_btn btn-size-small" src="/images/btn2.png"></image>
</view>
<view class="buttons btn-size-small wux-pull-right" wx:if="{{state=='2'}}">
<view class="btn_label btn-size-small btn_label-small" data-userId="{{item.userId}}" bindtap="toUserWaItDetails">
已认证
</view>
<image class="ic_btn btn-size-small" src="/images/btn2.png"></image>
</view>
<view class="userManage_fail" wx:if="{{state=='3'}}">
<view data-userId="{{item.userId}}" bindtap="toUserWaItDetails">></view>
</view>
</view>
</view>
</block>
<view class="loadmore">上滑加载更多</view>

97
components/userManage/userManage.wxss

@ -0,0 +1,97 @@
@import '../../dist/styles/index.wxss';
.layout{
width: 100%;
display: flex;
/* flex-direction: column;
justify-content: space-between;
box-sizing: border-box; */
border-bottom: 1pt solid #f6f8f8;
}
.subject-item{
/* display: flex;
flex-direction: column; */
width: 100%;
margin: 10px;
}
.subject-title{
padding-left: 15rpx;
font-size: 32rpx;
color: #333333;
width: 460rpx;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.tag1{
color: #ff9f00;
background: #fff0cf;
border: 1px solid #ffe1b8;
}
/* .subject-user{
width: 100%;
display: table;
padding: 5rpx 0;
} */
/* .user-name{
float: left;
height: 46rpx;
} */
.time{
padding: 5rpx 0 0 15rpx;
height: 25rpx;
line-height: 30rpx;
font-size: 20rpx;
color: #A5B0B9;
}
.loadmore{
width: 100%;
text-align: center;
height: 50px;
line-height: 50px;
background: #f6f8f8;
font-size:12px;
color: #999;
}
/* 自定义按钮样式 */
.buttons {
font-size: 32rpx;
font-weight: bold;
padding: 8rpx 0 0 0;
/* margin: auto; */
/* left: 0;
right: 0; */
}
.btn-size-small{
width: 150rpx;
height: 60rpx;
}
.btn_label{
position: absolute;
color: #fff;
z-index: 99;
text-align: center;
}
.btn_label-small{
line-height: 60rpx;
font-size: 28rpx;
font-weight: normal;
}
.btn {
opacity: 0;
}
.imgView{
width: 80rpx;
height: 80rpx;
}
.imgView image{
width: 80rpx;
height: 80rpx;
}
.userManage_fail{
float: right;
width: 100rpx;
text-align: right;
font-size: 36rpx;
padding: 8rpx 0 0 0;
color: #999999;
}

1
dist/accordion-group/index.js

@ -0,0 +1 @@
"use strict";var _baseComponent=_interopRequireDefault(require("../helpers/baseComponent"));function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function _toConsumableArray(t){return _arrayWithoutHoles(t)||_iterableToArray(t)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function _iterableToArray(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function _arrayWithoutHoles(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e<t.length;e++)r[e]=t[e];return r}}(0,_baseComponent.default)({relations:{"../accordion/index":{type:"child",observer:function(){this.debounce(this.updated)}}},properties:{prefixCls:{type:String,value:"wux-accordion-group"},cellGroupPrefixCls:{type:String,value:"wux-cell-group"},defaultCurrent:{type:Array,value:[]},current:{type:Array,value:[],observer:function(t){this.data.controlled&&this.updated(t)}},controlled:{type:Boolean,value:!1},accordion:{type:Boolean,value:!1},title:{type:String,value:""},label:{type:String,value:""}},data:{activeKey:"",keys:[]},methods:{updated:function(t){var e=0<arguments.length&&void 0!==t?t:this.data.activeKey;this.data.activeKey!==e&&this.setData({activeKey:e}),this.changeCurrent(e)},changeCurrent:function(n){var i=this,t=this.getRelationNodes("../accordion/index");0<t.length&&t.forEach(function(t,e){var r=t.data.key||String(e),a=i.data.accordion?n[0]===r:-1!==n.indexOf(r);t.changeCurrent(a,r)}),this.data.keys.length!==t.length&&this.setData({keys:t.map(function(t){return t.data})})},emitEvent:function(t){this.triggerEvent("change",{key:t,keys:this.data.keys})},setActiveKey:function(t){this.data.controlled||this.updated(t),this.emitEvent(this.data.accordion?t[0]:t)},onClickItem:function(e){var t=_toConsumableArray(this.data.activeKey);t=this.data.accordion?t[0]===e?[]:[e]:-1!==t.indexOf(e)?t.filter(function(t){return t!==e}):[].concat(_toConsumableArray(t),[e]),this.setActiveKey(t)}},ready:function(){var t=this.data,e=t.defaultCurrent,r=t.current,a=t.controlled?r:e;this.updated(a)}});

6
dist/accordion-group/index.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"wux-cell-group": "../cell-group/index"
}
}

3
dist/accordion-group/index.wxml

@ -0,0 +1,3 @@
<wux-cell-group wux-class="{{ prefixCls }}" prefixCls="{{ cellGroupPrefixCls }}" title="{{ title }}" label="{{ label }}">
<slot></slot>
</wux-cell-group>

1
dist/accordion-group/index.wxss

@ -0,0 +1 @@
.wux-accordion-group{position:relative;border:none}

1
dist/accordion/index.js

@ -0,0 +1 @@
"use strict";var _baseComponent=_interopRequireDefault(require("../helpers/baseComponent")),_classNames2=_interopRequireDefault(require("../helpers/classNames"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}(0,_baseComponent.default)({relations:{"../accordion-group/index":{type:"parent"}},properties:{prefixCls:{type:String,value:"wux-accordion"},key:{type:String,value:""},thumb:{type:String,value:""},title:{type:String,value:""},content:{type:String,value:""},disabled:{type:Boolean,value:!1},showArrow:{type:Boolean,value:!0}},data:{current:!1,index:"0"},computed:{classes:["prefixCls, current, disabled",function(e,t,n){var r;return{wrap:(0,_classNames2.default)(e,(_defineProperty(r={},"".concat(e,"--current"),t),_defineProperty(r,"".concat(e,"--disabled"),n),r)),hd:"".concat(e,"__hd"),thumb:"".concat(e,"__thumb"),title:"".concat(e,"__title"),arrow:"".concat(e,"__arrow"),bd:"".concat(e,"__bd"),content:"".concat(e,"__content")}}]},methods:{changeCurrent:function(e,t){this.setData({current:e,index:t})},onTap:function(){var e=this.data,t=e.index,n=e.disabled,r=this.getRelationNodes("../accordion-group/index")[0];!n&&r&&r.onClickItem(t)}}});

3
dist/accordion/index.json

@ -0,0 +1,3 @@
{
"component": true
}

18
dist/accordion/index.wxml

@ -0,0 +1,18 @@
<view class="wux-class {{ classes.wrap }}">
<view class="{{ classes.hd }}" bindtap="onTap">
<block wx:if="{{ thumb }}">
<image class="{{ classes.thumb }}" src="{{ thumb }}" />
</block>
<block wx:if="{{ title }}">
<view class="{{ classes.title }}">{{ title }}</view>
</block>
<block wx:else>
<slot name="header"></slot>
</block>
<view class="{{ classes.arrow }}" wx:if="{{ showArrow }}"></view>
</view>
<view class="{{ classes.bd }}">
<view class="{{ classes.content }}" wx:if="{{ content }}">{{ content }}</view>
<slot></slot>
</view>
</view>

1
dist/accordion/index.wxss

@ -0,0 +1 @@
.wux-accordion__hd{position:relative;padding:20rpx 30rpx;color:#000;background-color:#fff;box-sizing:border-box;padding-left:30rpx;padding-right:60rpx;width:auto;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.wux-accordion__hd:after{content:" ";position:absolute;bottom:0;right:0;height:2rpx;border-bottom:2rpx solid #d9d9d9;color:#d9d9d9;transform-origin:0 100%;transform:scaleY(.5);left:0}.wux-accordion__thumb{display:block;width:40rpx;height:40rpx;margin-right:10rpx}.wux-accordion__arrow{position:absolute;display:block;top:30rpx;right:30rpx;width:30rpx;height:30rpx;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='16' height='26' viewBox='0 0 16 26' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M2 0L0 2l11.5 11L0 24l2 2 14-13z' fill='%23C7C7CC' fill-rule='evenodd'/%3E%3C/svg%3E");background-size:contain;background-repeat:no-repeat;background-position:50% 50%;transform:rotate(90deg);transition:transform .2s ease}.wux-accordion--current>.wux-accordion__hd>.wux-accordion__arrow{transform:rotate(270deg)}.wux-accordion__bd{display:none;overflow:hidden;background:#fff;font-size:30rpx;color:#333;position:relative;padding:30rpx}.wux-accordion__bd:after{content:" ";position:absolute;bottom:0;right:0;height:2rpx;border-bottom:2rpx solid #d9d9d9;color:#d9d9d9;transform-origin:0 100%;transform:scaleY(.5);left:0}.wux-accordion--current>.wux-accordion__bd{display:block}

1
dist/actionsheet/index.js

@ -0,0 +1 @@
"use strict";var _baseComponent=_interopRequireDefault(require("../helpers/baseComponent")),_classNames7=_interopRequireDefault(require("../helpers/classNames"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function ownKeys(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,r)}return n}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(n,!0).forEach(function(e){_defineProperty(t,e,n[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ownKeys(n).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))})}return t}function _defineProperty(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var defaults={prefixCls:"wux-actionsheet",theme:"ios",className:"",titleText:"",buttons:[],buttonClicked:function(){},cancelText:"取消",cancel:function(){}};(0,_baseComponent.default)({useFunc:!0,data:defaults,computed:{classes:["prefixCls, theme, buttons, cancelText",function(n,e,t,r){var o,c=(0,_classNames7.default)(n),a="".concat(n,"__popup"),s=(0,_classNames7.default)("".concat(n,"__content"),(_defineProperty(o={},"".concat(n,"__content--theme-").concat(e),e),_defineProperty(o,"".concat(n,"__content--has-cancel"),r),o)),i=(0,_classNames7.default)("".concat(n,"__group"),_defineProperty({},"".concat(n,"__group--options"),!0)),u="".concat(n,"__title"),d=(0,_classNames7.default)("".concat(n,"__button"),_defineProperty({},"".concat(n,"__button--destructive"),!0));return{wrap:c,popup:a,content:s,options:i,title:u,button:t.map(function(e){var t;return{wrap:(0,_classNames7.default)("".concat(n,"__button"),(_defineProperty(t={},"".concat(n,"__button--option"),!0),_defineProperty(t,"".concat(n,"__button--disabled"),e.disabled),_defineProperty(t,"".concat(e.className),e.className),t)),hover:e.hoverClass&&"default"!==e.hoverClass?e.hoverClass:"".concat(n,"__button--hover")}}),icon:"".concat(n,"__icon"),text:"".concat(n,"__text"),destructive:d,group:(0,_classNames7.default)("".concat(n,"__group"),_defineProperty({},"".concat(n,"__group--cancel"),!0)),cancel:(0,_classNames7.default)("".concat(n,"__button"),_defineProperty({},"".concat(n,"__button--cancel"),!0)),hover:"".concat(n,"__button--hover")}}]},methods:{showSheet:function(e){var t=0<arguments.length&&void 0!==e?e:{},n=this.$$mergeOptionsAndBindMethods(Object.assign({},defaults,t));return this.removed=!1,this.$$setData(_objectSpread({in:!0},n)),this.cancel.bind(this)},removeSheet:function(e){if(this.removed)return!1;this.removed=!0,this.$$setData({in:!1}),"function"==typeof e&&e(this.data.buttons)},buttonClicked:function(e){var t=e.currentTarget.dataset.index;!0===this.fns.buttonClicked(t,this.data.buttons[t])&&this.removeSheet()},destructiveButtonClicked:function(){!0===this.fns.destructiveButtonClicked()&&this.removeSheet()},cancel:function(){this.removeSheet(this.fns.cancel)},bindgetuserinfo:function(e){this.triggerEvent("getuserinfo",_objectSpread({},e.detail,{},e.currentTarget.dataset))},bindcontact:function(e){this.triggerEvent("contact",_objectSpread({},e.detail,{},e.currentTarget.dataset))},bindgetphonenumber:function(e){this.triggerEvent("getphonenumber",_objectSpread({},e.detail,{},e.currentTarget.dataset))},bindopensetting:function(e){this.triggerEvent("opensetting",_objectSpread({},e.detail,{},e.currentTarget.dataset))},onError:function(e){this.triggerEvent("error",_objectSpread({},e.detail,{},e.currentTarget.dataset))}}});

6
dist/actionsheet/index.json

@ -0,0 +1,6 @@
{
"component": true,
"usingComponents": {
"wux-popup": "../popup/index"
}
}

41
dist/actionsheet/index.wxml

@ -0,0 +1,41 @@
<wux-popup wux-content-class="{{ theme === 'ios' ? classes.popup : '' }}" position="bottom" visible="{{ in }}" safeArea="bottom" bind:close="cancel">
<view class="wux-class {{ classes.wrap }}">
<view class="{{ classes.content }}">
<view class="{{ classes.options }}">
<view class="{{ classes.title }}" wx:if="{{ titleText }}">{{ titleText }}</view>
<block wx:for="{{ buttons }}" wx:for-item="button" wx:key="index">
<button
class="{{ classes.button[index].wrap }}"
data-index="{{ index }}"
disabled="{{ button.disabled }}"
open-type="{{ button.openType }}"
hover-class="{{ !button.disabled ? classes.button[index].hover : 'none' }}"
hover-stop-propagation="{{ button.hoverStopPropagation }}"
hover-start-time="{{ button.hoverStartTime }}"
hover-stay-time="{{ button.hoverStayTime }}"
lang="{{ button.lang }}"
bindgetuserinfo="bindgetuserinfo"
session-from="{{ button.sessionFrom }}"
send-message-title="{{ button.sendMessageTitle }}"
send-message-path="{{ button.sendMessagePath }}"
send-message-img="{{ button.sendMessageImg }}"
show-message-card="{{ button.showMessageCard }}"
bindcontact="bindcontact"
bindgetphonenumber="bindgetphonenumber"
app-parameter="{{ button.appParameter }}"
binderror="onError"
bindopensetting="bindopensetting"
catchtap="buttonClicked"
>
<image class="{{ classes.icon }}" src="{{ button.icon }}" wx:if="{{ button.icon }}" />
<text class="{{ classes.text }}">{{ button.text }}</text>
</button>
</block>
<button class="{{ classes.destructive }}" wx:if="{{ destructiveText }}" catchtap="destructiveButtonClicked">{{ destructiveText }}</button>
</view>
<view class="{{ classes.group }}" wx:if="{{ cancelText }}">
<button class="{{ classes.cancel }}" hover-class="{{ classes.hover }}" catchtap="cancel">{{ cancelText }}</button>
</view>
</view>
</view>
</wux-popup>

1
dist/actionsheet/index.wxss

@ -0,0 +1 @@
.wux-actionsheet__popup{background-color:transparent}.wux-actionsheet__content{margin-left:16rpx;margin-right:16rpx;width:auto;overflow:hidden}.wux-actionsheet__content--theme-wx{margin-left:0;margin-right:0;margin-bottom:0}.wux-actionsheet__content--theme-wx .wux-actionsheet__group{border-radius:0;margin-bottom:12rpx}.wux-actionsheet__content--theme-wx .wux-actionsheet__group--options{background-color:#fff}.wux-actionsheet__content--theme-wx .wux-actionsheet__group--cancel{margin-bottom:0}.wux-actionsheet__content--theme-wx .wux-actionsheet__button{font-size:36rpx;color:#000}.wux-actionsheet__content--theme-wx .wux-actionsheet__button--cancel{font-weight:400}.wux-actionsheet__content--theme-wx.wux-actionsheet__content--has-cancel{background-color:#efeff4}.wux-actionsheet__group{margin-bottom:16rpx;border-radius:8rpx;background-color:#fff;overflow:hidden}.wux-actionsheet__group--options{background-color:#f1f2f3}.wux-actionsheet__title{padding:32rpx;color:#8f8f8f;text-align:center;font-size:26rpx}.wux-actionsheet__button{position:relative;display:block;margin:0;padding:0;min-width:104rpx;min-height:96rpx;vertical-align:top;text-align:center;text-overflow:ellipsis;cursor:pointer;width:100%;border-radius:0;background-color:transparent;color:#007aff;font-size:42rpx;line-height:96rpx;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.wux-actionsheet__button--hover{box-shadow:none;border-color:#d1d3d6;color:#007aff;background:#e4e5e7}.wux-actionsheet__button--destructive{color:#ff3b30!important}.wux-actionsheet__button--cancel{font-weight:500}.wux-actionsheet__button--disabled{opacity:.3!important}.wux-actionsheet__group .wux-actionsheet__button{border-top:none}.wux-actionsheet__group .wux-actionsheet__button:after{transform:none;transform-origin:none;border:none;border-radius:0;content:" ";position:absolute;left:0;top:0;right:0;height:2rpx;border-top:2rpx solid #d9d9d9;color:#d9d9d9;transform-origin:0 0;transform:scaleY(.5)}.wux-actionsheet__group .wux-actionsheet__button:first-child:last-child:after{border-width:0}.wux-actionsheet__icon{display:inline-block;width:48rpx;height:48rpx;margin-right:20rpx}

1
dist/alert/index.js

@ -0,0 +1 @@
"use strict";var _baseComponent=_interopRequireDefault(require("../helpers/baseComponent")),_classNames2=_interopRequireDefault(require("../helpers/classNames"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}function _defineProperty(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}(0,_baseComponent.default)({properties:{prefixCls:{type:String,value:"wux-alert"},classNames:{type:null,value:"wux-animate--fadeIn"},theme:{type:String,value:"balanced"},thumb:{type:String,value:""},title:{type:String,value:""},label:{type:String,value:""},closable:{type:Boolean,value:!1}},data:{visible:!0},computed:{classes:["prefixCls, theme",function(e,t){return{wrap:(0,_classNames2.default)(e,_defineProperty({},"".concat(e,"--").concat(t),t)),hd:"".concat(e,"__hd"),thumb:"".concat(e,"__thumb"),bd:"".concat(e,"__bd"),text:"".concat(e,"__text"),desc:"".concat(e,"__desc"),ft:"".concat(e,"__ft"),closable:"".concat(e,"__closable")}}]},methods:{onClose:function(){this.data.closable&&this.setData({visible:!1}),this.triggerEvent("click")},onClick:function(){this.triggerEvent("click")}}});

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save