diff --git a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/guildhall/controller/GuildHallMeetingController.java b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/guildhall/controller/GuildHallMeetingController.java index ca030775..e00e073e 100644 --- a/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/guildhall/controller/GuildHallMeetingController.java +++ b/src/main/java/com/budwk/app/zhgh/democratic/teachercongress/guildhall/controller/GuildHallMeetingController.java @@ -128,6 +128,27 @@ public class GuildHallMeetingController { return Result.success(results); } + @At + @SaCheckPermission("h5.guildHall.metting") + @ApiOperation("H5会议详情") + public Result selectDetail(String meetingId) { + if (StrUtil.isBlank(meetingId)) { + return Result.error("缺少会议参数"); + } + GuildHallMeeting meeting = dao.fetch(GuildHallMeeting.class, meetingId); + if (meeting == null || DateUtil.compare(DateUtil.date(), meeting.getEndTime()) > 0) { + return Result.error("会议不存在或已结束"); + } + if (meeting.getGroupId() != null + && !activityBasicScopeService.isUserInGroup(meeting.getGroupId(), SecurityUtil.getUserId())) { + return Result.error("无权查看该会议"); + } + NutMap meetingMap = Lang.obj2nutmap(meeting); + GuildHall hall = dao.fetch(GuildHall.class, meeting.getHallId()); + meetingMap.put("address", hall == null ? null : hall.getAddress()); + return Result.success(meetingMap); + } + @At @SaCheckPermission("h5.guildHall.metting") @ApiOperation("H5进行中会议分页") diff --git a/src/main/resources/static/assets/mobile/img/democratic/teachercongress/meeting-dais.png b/src/main/resources/static/assets/mobile/img/democratic/teachercongress/meeting-dais.png index b9e88408..a3104e06 100644 Binary files a/src/main/resources/static/assets/mobile/img/democratic/teachercongress/meeting-dais.png and b/src/main/resources/static/assets/mobile/img/democratic/teachercongress/meeting-dais.png differ diff --git a/src/main/resources/static/assets/platform/plugins/panzoom/panzoom.min.js b/src/main/resources/static/assets/platform/plugins/panzoom/panzoom.min.js new file mode 100644 index 00000000..6bf074fd --- /dev/null +++ b/src/main/resources/static/assets/platform/plugins/panzoom/panzoom.min.js @@ -0,0 +1,16 @@ +/** +* Panzoom 4.6.2 for panning and zooming elements using CSS transforms +* Copyright Timmy Willison and other contributors +* https://github.com/timmywil/panzoom/blob/main/MIT-License.txt +*/ +((e,t)=>{"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Panzoom=t()})(this,function(){"undefined"!=typeof window&&(window.NodeList&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=Array.prototype.forEach),"function"!=typeof window.CustomEvent)&&(window.CustomEvent=function(e,t){t=t||{bubbles:!1,cancelable:!1,detail:null};var n=document.createEvent("CustomEvent");return n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail),n});let i="undefined"!=typeof document&&!!document.documentMode,a;let l=["webkit","moz","ms"],s={};function z(e){if(s[e])return s[e];var t=a=a||document.createElement("div").style;if(e in t)return s[e]=e;var n=e[0].toUpperCase()+e.slice(1);let o=l.length;for(;o--;){var r=""+l[o]+n;if(r in t)return s[e]=r}}function r(e,t){return parseFloat(t[z(e)])||0}function c(e,t,n=window.getComputedStyle(e)){var o="border"===t?"Width":"";return{left:r(t+"Left"+o,n),right:r(t+"Right"+o,n),top:r(t+"Top"+o,n),bottom:r(t+"Bottom"+o,n)}}function X(e,t,n){e.style[z(t)]=n}function Y(e){let t=e.parentNode;t&&1===t.nodeType||(t=document.documentElement);var n=window.getComputedStyle(e),o=window.getComputedStyle(t),r=e.getBoundingClientRect(),a=t.getBoundingClientRect();return{elem:{style:n,width:r.width,height:r.height,top:r.top,bottom:r.bottom,left:r.left,right:r.right,margin:c(e,"margin",n),border:c(e,"border",n)},parent:{style:o,width:a.width,height:a.height,top:a.top,bottom:a.bottom,left:a.left,right:a.right,padding:c(t,"padding",o),border:c(t,"border",o)}}}let C={down:"mousedown",move:"mousemove",up:"mouseup mouseleave"};function N(e,t,n,o){C[e].split(" ").forEach(e=>{t.addEventListener(e,n,o)})}function T(e,t,n){C[e].split(" ").forEach(e=>{t.removeEventListener(e,n)})}function $(e,t){let n=e.length;for(;n--;)if(e[n].pointerId===t.pointerId)return n;return-1}function L(e,t){let n;if(t.touches){n=0;for(var o of t.touches)o.pointerId=n++,L(e,o)}else-1<(n=$(e,t))&&e.splice(n,1),e.push(t)}function V(e){let t=(e=e.slice(0)).pop();for(var n;n=e.pop();)t={clientX:(n.clientX-t.clientX)/2+t.clientX,clientY:(n.clientY-t.clientY)/2+t.clientY};return t}function G(e){var t;return e.length<2?0:(t=e[0],e=e[1],Math.sqrt(Math.pow(Math.abs(e.clientX-t.clientX),2)+Math.pow(Math.abs(e.clientY-t.clientY),2)))}"undefined"!=typeof window&&("function"==typeof window.PointerEvent?C={down:"pointerdown",move:"pointermove",up:"pointerup pointerleave pointercancel"}:"function"==typeof window.TouchEvent&&(C={down:"touchstart",move:"touchmove",up:"touchend touchcancel"}));let I=/^http:[\w\.\/]+svg$/; +/** + * Panzoom for panning and zooming elements using CSS transforms + * https://github.com/timmywil/panzoom + * + * Copyright Timmy Willison and other contributors + * Released under the MIT license + * https://github.com/timmywil/panzoom/blob/main/MIT-License.txt + * + */ +let R={animate:!1,canvas:!1,cursor:"move",disablePan:!1,disableZoom:!1,disableXAxis:!1,disableYAxis:!1,duration:200,easing:"ease-in-out",exclude:[],excludeClass:"panzoom-exclude",handleStartEvent:e=>{e.preventDefault(),e.stopPropagation()},maxScale:4,minScale:.125,overflow:"hidden",panOnlyWhenZoomed:!1,pinchAndPan:!1,relative:!1,setTransform:function(e,{x:t,y:n,scale:o,isSVG:r},a){X(e,"transform",`scale(${o}) translate(${t}px, ${n}px)`),r&&i&&(o=window.getComputedStyle(e).getPropertyValue("transform"),e.setAttribute("transform",o))},startX:0,startY:0,startScale:1,step:.3,touchAction:"none"};function e(d,p){if(!d)throw new Error("Panzoom requires an element as an argument");if(1!==d.nodeType)throw new Error("Panzoom requires an element with a nodeType of 1");if(!(e=>{let t=e;for(;t&&t.parentNode;){if(t.parentNode===document)return 1;t=t.parentNode instanceof ShadowRoot?t.parentNode.host:t.parentNode}})(d))throw new Error("Panzoom should be called on elements that have been attached to the DOM");p=Object.assign(Object.assign({},R),p);e=d;let c=I.test(e.namespaceURI)&&"svg"!==e.nodeName.toLowerCase();var e;let n=d.parentNode;n.style.overflow=p.overflow,n.style.userSelect="none",n.style.touchAction=p.touchAction,(p.canvas?n:d).style.cursor=p.cursor,d.style.userSelect="none",d.style.touchAction=p.touchAction,X(d,"transformOrigin","string"==typeof p.origin?p.origin:c?"0 0":"50% 50%");let u=0,m=0,f=1,a=!1;function r(e,t,n){n.silent||(n=new CustomEvent(e,{detail:t}),d.dispatchEvent(n))}function l(t,n,e){let o={x:u,y:m,scale:f,isSVG:c,originalEvent:e};return requestAnimationFrame(()=>{var e;"boolean"==typeof n.animate&&(n.animate?(e=n,X(d,"transition",`${z("transform")} ${e.duration}ms `+e.easing)):X(d,"transition","none")),n.setTransform(d,o,n),r(t,o,n),r("panzoomchange",o,n)}),o}function s(e,t,n,o){var r,a,i,l,s=Object.assign(Object.assign({},p),o),c={x:u,y:m,opts:s};return(null!=o&&o.force||!(s.disablePan||s.panOnlyWhenZoomed&&f===s.startScale))&&(e=parseFloat(e),t=parseFloat(t),s.disableXAxis||(c.x=(s.relative?u:0)+e),s.disableYAxis||(c.y=(s.relative?m:0)+t),s.contain&&(e=((t=(e=(o=Y(d)).elem.width/f)*n)-e)/2,a=((r=(a=o.elem.height/f)*n)-a)/2,"inside"===s.contain?(i=(-o.elem.margin.left-o.parent.padding.left+e)/n,l=(o.parent.width-t-o.parent.padding.left-o.elem.margin.left-o.parent.border.left-o.parent.border.right+e)/n,c.x=Math.max(Math.min(c.x,l),i),l=(-o.elem.margin.top-o.parent.padding.top+a)/n,i=(o.parent.height-r-o.parent.padding.top-o.elem.margin.top-o.parent.border.top-o.parent.border.bottom+a)/n,c.y=Math.max(Math.min(c.y,i),l)):"outside"===s.contain&&(i=(-(t-o.parent.width)-o.parent.padding.left-o.parent.border.left-o.parent.border.right+e)/n,l=(e-o.parent.padding.left)/n,c.x=Math.max(Math.min(c.x,l),i),t=(-(r-o.parent.height)-o.parent.padding.top-o.parent.border.top-o.parent.border.bottom+a)/n,e=(a-o.parent.padding.top)/n,c.y=Math.max(Math.min(c.y,e),t))),s.roundPixels)&&(c.x=Math.round(c.x),c.y=Math.round(c.y)),c}function h(n,o){var r,a=Object.assign(Object.assign({},p),o),i={scale:f,opts:a};if(null!=o&&o.force||!a.disableZoom){let e=p.minScale,t=p.maxScale;a.contain&&(a=(o=Y(d)).elem.width/f,r=o.elem.height/f,1{i(p.startX,p.startY,{animate:!1,force:!0})});let y,b,w,x,O,E,S=[];function o(e){((t,n)=>{for(let e=t;null!=e;e=e.parentNode)if(o=e,r=n.excludeClass,1===o.nodeType&&-1<` ${o=o,(o.getAttribute("class")||"").trim()} `.indexOf(` ${r} `)||-1({x:u,y:m}),getScale:()=>f,getOptions:()=>{var e,t=p,n={};for(e in t)t.hasOwnProperty(e)&&(n[e]=t[e]);return n},handleDown:o,handleMove:M,handleUp:A,pan:i,reset:function(e){var e=Object.assign(Object.assign(Object.assign({},p),{animate:!0,force:!0}),e),t=(f=h(e.startScale,e).scale,s(e.startX,e.startY,f,e));return u=t.x,m=t.y,l("panzoomreset",e)},resetStyle:function(){n.style.overflow="",n.style.userSelect="",n.style.touchAction="",n.style.cursor="",d.style.cursor="",d.style.userSelect="",d.style.touchAction="",X(d,"transformOrigin","")},setOptions:function(e={}){for(var t in e)e.hasOwnProperty(t)&&(p[t]=e[t]);(e.hasOwnProperty("cursor")||e.hasOwnProperty("canvas"))&&(n.style.cursor=d.style.cursor="",(p.canvas?n:d).style.cursor=p.cursor),e.hasOwnProperty("overflow")&&(n.style.overflow=e.overflow),e.hasOwnProperty("touchAction")&&(n.style.touchAction=e.touchAction,d.style.touchAction=e.touchAction)},setStyle:(e,t)=>X(d,e,t),zoom:g,zoomIn:function(e){return t(!0,e)},zoomOut:function(e){return t(!1,e)},zoomToPoint:v,zoomWithWheel:function(e,t){e.preventDefault();var t=Object.assign(Object.assign(Object.assign({},p),t),{animate:!1}),n=(0===e.deltaY&&e.deltaX?e.deltaX:e.deltaY)<0?1:-1;return v(h(f*Math.exp(n*t.step/3),t).scale,e,t,e)}}}return e.defaultOptions=R,e}); \ No newline at end of file diff --git a/src/main/resources/views/platform/zhghh5/democratic/teachercongress/delegate/read/index.html b/src/main/resources/views/platform/zhghh5/democratic/teachercongress/delegate/read/index.html index 93e8400d..c4065cf0 100644 --- a/src/main/resources/views/platform/zhghh5/democratic/teachercongress/delegate/read/index.html +++ b/src/main/resources/views/platform/zhghh5/democratic/teachercongress/delegate/read/index.html @@ -18,12 +18,6 @@ layout("/layouts/platform_h5.html"){ background-color: #fff; } - .delegate-read-page .van-nav-bar__title { - color: #1f2937; - font-size: 16px; - font-weight: 600; - } - .delegate-read-page .van-nav-bar .van-icon, .delegate-read-page .van-nav-bar__text { color: #397fbd; @@ -179,6 +173,87 @@ layout("/layouts/platform_h5.html"){ margin-top: 0; } + .delegate-read-page-skeleton { + padding: 12px 12px 86px; + } + + .delegate-read-skeleton__block { + background: linear-gradient(90deg, #f2f3f5 25%, #e6e7e9 37%, #f2f3f5 63%); + background-size: 400% 100%; + animation: delegate-read-skeleton-loading 1.4s ease infinite; + } + + .delegate-read-skeleton__hero { + height: 134px; + border-radius: 10px; + } + + .delegate-read-skeleton__search { + height: 40px; + margin-top: 10px; + border-radius: 9px; + } + + .delegate-read-skeleton__filter { + height: 44px; + margin: 10px 0; + border-radius: 10px; + } + + .delegate-read-skeleton__item { + margin-bottom: 10px; + padding: 12px; + box-sizing: border-box; + border-radius: 9px; + background-color: #fff; + box-shadow: 0 3px 12px rgba(43, 73, 112, .06); + } + + .delegate-read-skeleton__item .van-skeleton { + padding: 0; + } + + .delegate-read-skeleton__item .van-skeleton__avatar { + width: 58px; + height: 58px; + } + + .delegate-read-skeleton__item .van-skeleton__content { + padding-top: 2px; + } + + .delegate-read-skeleton__item .van-skeleton__title { + width: 34%; + } + + .delegate-read-skeleton__actions { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1000; + display: flex; + gap: 10px; + padding: 10px 12px calc(10px + env(safe-area-inset-bottom)); + background-color: #fff; + border-top: 1px solid #edf1f6; + } + + .delegate-read-skeleton__action { + height: 44px; + flex: 1; + border-radius: 9px; + } + + @keyframes delegate-read-skeleton-loading { + 0% { + background-position: 100% 50%; + } + 100% { + background-position: 0 50%; + } + } + .delegate-read-list .table-list-container .table-list-item { margin-bottom: 10px; padding: 12px; @@ -368,7 +443,20 @@ layout("/layouts/platform_h5.html"){
-
+
+
+ +
+
+ +
+
+
+
+
+
+ +
代表阅览插画
@@ -415,11 +503,13 @@ layout("/layouts/platform_h5.html"){