Compare commits
10
Commits
c1c3669546
...
e558339dcc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e558339dcc | ||
|
|
72fb5eae10 | ||
|
|
c337ad1716 | ||
|
|
0f20f35e1e | ||
|
|
f50c7eba89 | ||
|
|
c1ce122a70 | ||
|
|
e4a1030d5a | ||
|
|
a9fc3d9690 | ||
|
|
a1dcad9e28 | ||
|
|
1c89f47958 |
@@ -1,164 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>io.v</groupId>
|
||||
<artifactId>mini</artifactId>
|
||||
<version>5.3.0</version>
|
||||
<description>java web development framework, base on budwk and nutz</description>
|
||||
<url>https://budwk.com</url>
|
||||
<developers>
|
||||
<developer>
|
||||
<id>wizzercn</id>
|
||||
<name>Wizzer</name>
|
||||
<email>wizzer@qq.com</email>
|
||||
<url>https://wizzer.cn</url>
|
||||
</developer>
|
||||
</developers>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.7.0</version>
|
||||
<configuration>
|
||||
<source>15</source>
|
||||
<target>15</target>
|
||||
<compilerArgs>--enable-preview</compilerArgs>
|
||||
<useIncrementalCompilation>false</useIncrementalCompilation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<encoding>UTF-8</encoding>
|
||||
<charset>UTF-8</charset>
|
||||
<docencoding>UTF-8</docencoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.0.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>compile</phase>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<attach>true</attach>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>2.22.0</version>
|
||||
<configuration>
|
||||
<skip>true</skip>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.nutz.boot</groupId>
|
||||
<artifactId>nutzboot-maven-plugin</artifactId>
|
||||
<version>${nutzboot.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>15</source>
|
||||
<target>15</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>nutz</id>
|
||||
<url>https://jfrog.nutz.cn/artifactory/libs-release</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
</snapshots>
|
||||
<id>nutz-snapshots</id>
|
||||
<url>https://jfrog.nutz.cn/artifactory/snapshots</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<updatePolicy>always</updatePolicy>
|
||||
</snapshots>
|
||||
<id>nutz-snapshots</id>
|
||||
<url>https://jfrog.nutz.cn/artifactory/snapshots</url>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.nutz</groupId>
|
||||
<artifactId>nutzboot-starter-test-junit4</artifactId>
|
||||
<version>2.4.2-SNAPSHOT</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.1</version>
|
||||
<scope>test</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>hamcrest-core</artifactId>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.nutz</groupId>
|
||||
<artifactId>nutzboot-parent</artifactId>
|
||||
<version>${nutzboot.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.xml.bind</groupId>
|
||||
<artifactId>jaxb-api</artifactId>
|
||||
<version>${jaxb-api.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
<properties>
|
||||
<jsoup.veision>1.11.2</jsoup.veision>
|
||||
<mysql-connector-java.version>8.0.16</mysql-connector-java.version>
|
||||
<easy-captcha.version>1.6.2</easy-captcha.version>
|
||||
<emoji-java.veision>4.0.0</emoji-java.veision>
|
||||
<jaxb-api.version>2.3.1</jaxb-api.version>
|
||||
<lombok.version>1.18.12</lombok.version>
|
||||
<slf4j.version>1.7.30</slf4j.version>
|
||||
<poi.version>4.1.2</poi.version>
|
||||
<v.version>1.0.1</v.version>
|
||||
<commons-lang3.version>3.8.1</commons-lang3.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<pinyin4j.veision>2.5.1</pinyin4j.veision>
|
||||
<nutzboot.version>2.4.2-SNAPSHOT</nutzboot.version>
|
||||
<logback.version>1.2.3</logback.version>
|
||||
<nutz.version>1.r.68-SNAPSHOT</nutz.version>
|
||||
<tencentcloud-sdk-java.version>4.0.11</tencentcloud-sdk-java.version>
|
||||
</properties>
|
||||
</project>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
</component>
|
||||
</module>
|
||||
@@ -0,0 +1,107 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
<project version="4" relativePaths="false">
|
||||
<component name="ProjectRootManager" version="2" assert-keyword="true" project-jdk-name="15." jdk-15="true" languageLevel="JDK_1_8"/>
|
||||
<component name="CodeStyleManager">
|
||||
<option name="USE_DEFAULT_CODE_STYLE_SCHEME" value="true"/>
|
||||
<option name="CODE_STYLE_SCHEME" value=""/>
|
||||
</component>
|
||||
<component name="libraryTable"/>
|
||||
<component name="CompilerConfiguration">
|
||||
<option name="DEFAULT_COMPILER" value="Javac"/>
|
||||
<option name="CLEAR_OUTPUT_DIRECTORY" value="false"/>
|
||||
<!--
|
||||
<wildcardResourcePatterns>
|
||||
<entry name="${wildcardResourcePattern}"/>
|
||||
</wildcardResourcePatterns>
|
||||
-->
|
||||
<wildcardResourcePatterns>
|
||||
<entry name="!?*.java"/>
|
||||
</wildcardResourcePatterns>
|
||||
</component>
|
||||
<component name="JavacSettings">
|
||||
<option name="DEBUGGING_INFO" value="true"/>
|
||||
<option name="GENERATE_NO_WARNINGS" value="false"/>
|
||||
<option name="DEPRECATION" value="true"/>
|
||||
<option name="ADDITIONAL_OPTIONS_STRING" value=""/>
|
||||
<option name="MAXIMUM_HEAP_SIZE" value="128"/>
|
||||
<option name="USE_GENERICS_COMPILER" value="false"/>
|
||||
</component>
|
||||
<component name="JikesSettings">
|
||||
<option name="DEBUGGING_INFO" value="true"/>
|
||||
<option name="DEPRECATION" value="true"/>
|
||||
<option name="GENERATE_NO_WARNINGS" value="false"/>
|
||||
<option name="GENERATE_MAKE_FILE_DEPENDENCIES" value="false"/>
|
||||
<option name="DO_FULL_DEPENDENCE_CHECK" value="false"/>
|
||||
<option name="IS_INCREMENTAL_MODE" value="false"/>
|
||||
<option name="IS_EMACS_ERRORS_MODE" value="true"/>
|
||||
<option name="ADDITIONAL_OPTIONS_STRING" value=""/>
|
||||
<option name="MAXIMUM_HEAP_SIZE" value="128"/>
|
||||
</component>
|
||||
<component name="AntConfiguration">
|
||||
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>
|
||||
<option name="FILTER_TARGETS" value="false"/>
|
||||
</component>
|
||||
<component name="JavadocGenerationManager">
|
||||
<option name="OUTPUT_DIRECTORY"/>
|
||||
<option name="OPTION_SCOPE" value="protected"/>
|
||||
<option name="OPTION_HIERARCHY" value="false"/>
|
||||
<option name="OPTION_NAVIGATOR" value="false"/>
|
||||
<option name="OPTION_INDEX" value="false"/>
|
||||
<option name="OPTION_SEPARATE_INDEX" value="false"/>
|
||||
<option name="OPTION_USE_1_1" value="false"/>
|
||||
<option name="OPTION_DOCUMENT_TAG_USE" value="false"/>
|
||||
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false"/>
|
||||
<option name="OPTION_DOCUMENT_TAG_VERSION" value="false"/>
|
||||
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="false"/>
|
||||
<option name="OPTION_DEPRECATED_LIST" value="false"/>
|
||||
<option name="OTHER_OPTIONS"/>
|
||||
<option name="HEAP_SIZE"/>
|
||||
<option name="OPEN_IN_BROWSER" value="false"/>
|
||||
</component>
|
||||
<component name="JUnitProjectSettings">
|
||||
<option name="TEST_RUNNER" value="UI"/>
|
||||
</component>
|
||||
<component name="EntryPointsManager">
|
||||
<entry_points/>
|
||||
</component>
|
||||
<component name="DataSourceManager"/>
|
||||
<component name="ExportToHTMLSettings">
|
||||
<option name="PRINT_LINE_NUMBERS" value="false"/>
|
||||
<option name="OPEN_IN_BROWSER" value="false"/>
|
||||
<option name="OUTPUT_DIRECTORY"/>
|
||||
</component>
|
||||
<component name="ImportConfiguration">
|
||||
<option name="VENDOR"/>
|
||||
<option name="RELEASE_TAG"/>
|
||||
<option name="LOG_MESSAGE"/>
|
||||
<option name="CHECKOUT_AFTER_IMPORT" value="true"/>
|
||||
</component>
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<!-- module filepath="$$PROJECT_DIR$$/${pom.artifactId}.iml"/ -->
|
||||
<module filepath="$PROJECT_DIR$/mini.iml"/>
|
||||
</modules>
|
||||
</component>
|
||||
<UsedPathMacros>
|
||||
<!--<macro name="cargo"></macro>-->
|
||||
</UsedPathMacros>
|
||||
</project>
|
||||
@@ -0,0 +1,418 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one
|
||||
or more contributor license agreements. See the NOTICE file
|
||||
distributed with this work for additional information
|
||||
regarding copyright ownership. The ASF licenses this file
|
||||
to you under the Apache License, Version 2.0 (the
|
||||
"License"); you may not use this file except in compliance
|
||||
with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing,
|
||||
software distributed under the License is distributed on an
|
||||
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
KIND, either express or implied. See the License for the
|
||||
specific language governing permissions and limitations
|
||||
under the License.
|
||||
-->
|
||||
<project version="4" relativePaths="false">
|
||||
<component name="LvcsProjectConfiguration">
|
||||
<option name="ADD_LABEL_ON_PROJECT_OPEN" value="true"/>
|
||||
<option name="ADD_LABEL_ON_PROJECT_COMPILATION" value="true"/>
|
||||
<option name="ADD_LABEL_ON_FILE_PACKAGE_COMPILATION" value="true"/>
|
||||
<option name="ADD_LABEL_ON_PROJECT_MAKE" value="true"/>
|
||||
<option name="ADD_LABEL_ON_RUNNING" value="true"/>
|
||||
<option name="ADD_LABEL_ON_DEBUGGING" value="true"/>
|
||||
<option name="ADD_LABEL_ON_UNIT_TEST_PASSED" value="true"/>
|
||||
<option name="ADD_LABEL_ON_UNIT_TEST_FAILED" value="true"/>
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="MemberChooser.copyJavadoc" value="false"/>
|
||||
<property name="GoToClass.includeLibraries" value="false"/>
|
||||
<property name="MemberChooser.showClasses" value="true"/>
|
||||
<property name="MemberChooser.sorted" value="false"/>
|
||||
<property name="GoToFile.includeJavaFiles" value="false"/>
|
||||
<property name="GoToClass.toSaveIncludeLibraries" value="false"/>
|
||||
</component>
|
||||
<component name="ToolWindowManager">
|
||||
<frame x="-4" y="-4" width="1032" height="746" extended-state="6"/>
|
||||
<editor active="false"/>
|
||||
<layout>
|
||||
<window_info id="CVS" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>
|
||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="7"/>
|
||||
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="0"/>
|
||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="1"/>
|
||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>
|
||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>
|
||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="6"/>
|
||||
<window_info id="Aspects" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="-1"/>
|
||||
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="1"/>
|
||||
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="2"/>
|
||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>
|
||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.4" order="4"/>
|
||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="sliding" type="sliding" visible="false" weight="0.4" order="0"/>
|
||||
<window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="2"/>
|
||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.33" order="0"/>
|
||||
<window_info id="EJB" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="3"/>
|
||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="docked" type="docked" visible="false" weight="0.25" order="5"/>
|
||||
</layout>
|
||||
</component>
|
||||
<component name="ErrorTreeViewConfiguration">
|
||||
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>
|
||||
<option name="HIDE_WARNINGS" value="false"/>
|
||||
</component>
|
||||
<component name="StructureViewFactory">
|
||||
<option name="SORT_MODE" value="0"/>
|
||||
<option name="GROUP_INHERITED" value="true"/>
|
||||
<option name="AUTOSCROLL_MODE" value="true"/>
|
||||
<option name="SHOW_FIELDS" value="true"/>
|
||||
<option name="AUTOSCROLL_FROM_SOURCE" value="false"/>
|
||||
<option name="GROUP_GETTERS_AND_SETTERS" value="true"/>
|
||||
<option name="SHOW_INHERITED" value="false"/>
|
||||
<option name="HIDE_NOT_PUBLIC" value="false"/>
|
||||
</component>
|
||||
<component name="ProjectViewSettings">
|
||||
<navigator currentView="ProjectPane" flattenPackages="false" showMembers="false" showStructure="false" autoscrollToSource="false" splitterProportion="0.5"/>
|
||||
<view id="ProjectPane">
|
||||
<expanded_node type="directory" url="file://$PROJECT_DIR$"/>
|
||||
</view>
|
||||
<view id="SourcepathPane"/>
|
||||
<view id="ClasspathPane"/>
|
||||
</component>
|
||||
<component name="Commander">
|
||||
<leftPanel view="Project"/>
|
||||
<rightPanel view="Project"/>
|
||||
<splitter proportion="0.5"/>
|
||||
</component>
|
||||
<component name="AspectsView"/>
|
||||
<component name="SelectInManager"/>
|
||||
<component name="HierarchyBrowserManager">
|
||||
<option name="SHOW_PACKAGES" value="false"/>
|
||||
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false"/>
|
||||
<option name="SORT_ALPHABETICALLY" value="false"/>
|
||||
</component>
|
||||
<component name="TodoView" selected-index="0">
|
||||
<todo-panel id="selected-file">
|
||||
<are-packages-shown value="false"/>
|
||||
<flatten-packages value="false"/>
|
||||
<is-autoscroll-to-source value="true"/>
|
||||
</todo-panel>
|
||||
<todo-panel id="all">
|
||||
<are-packages-shown value="true"/>
|
||||
<flatten-packages value="false"/>
|
||||
<is-autoscroll-to-source value="true"/>
|
||||
</todo-panel>
|
||||
</component>
|
||||
<component name="editorManager"/>
|
||||
<component name="editorHistoryManager"/>
|
||||
<component name="DaemonCodeAnalyzer">
|
||||
<disable_hints/>
|
||||
</component>
|
||||
<component name="InspectionManager">
|
||||
<option name="AUTOSCROLL_TO_SOURCE" value="false"/>
|
||||
<option name="SPLITTER_PROPORTION" value="0.5"/>
|
||||
<profile name="Default"/>
|
||||
</component>
|
||||
<component name="BookmarkManager"/>
|
||||
<component name="DebuggerManager">
|
||||
<line_breakpoints/>
|
||||
<exception_breakpoints>
|
||||
<breakpoint_any>
|
||||
<option name="NOTIFY_CAUGHT" value="true"/>
|
||||
<option name="NOTIFY_UNCAUGHT" value="true"/>
|
||||
<option name="ENABLED" value="false"/>
|
||||
<option name="SUSPEND_VM" value="true"/>
|
||||
<option name="COUNT_FILTER_ENABLED" value="false"/>
|
||||
<option name="COUNT_FILTER" value="0"/>
|
||||
<option name="CONDITION_ENABLED" value="false"/>
|
||||
<option name="CONDITION"/>
|
||||
<option name="LOG_ENABLED" value="false"/>
|
||||
<option name="LOG_EXPRESSION_ENABLED" value="false"/>
|
||||
<option name="LOG_MESSAGE"/>
|
||||
<option name="CLASS_FILTERS_ENABLED" value="false"/>
|
||||
<option name="INVERSE_CLASS_FILLTERS" value="false"/>
|
||||
<option name="SUSPEND_POLICY" value="SuspendAll"/>
|
||||
</breakpoint_any>
|
||||
</exception_breakpoints>
|
||||
<field_breakpoints/>
|
||||
<method_breakpoints/>
|
||||
</component>
|
||||
<component name="DebuggerSettings">
|
||||
<option name="TRACING_FILTERS_ENABLED" value="true"/>
|
||||
<option name="TOSTRING_CLASSES_ENABLED" value="false"/>
|
||||
<option name="VALUE_LOOKUP_DELAY" value="700"/>
|
||||
<option name="DEBUGGER_TRANSPORT" value="0"/>
|
||||
<option name="FORCE_CLASSIC_VM" value="true"/>
|
||||
<option name="HIDE_DEBUGGER_ON_PROCESS_TERMINATION" value="false"/>
|
||||
<option name="SKIP_SYNTHETIC_METHODS" value="true"/>
|
||||
<option name="SKIP_CONSTRUCTORS" value="false"/>
|
||||
<option name="STEP_THREAD_SUSPEND_POLICY" value="SuspendThread"/>
|
||||
<default_breakpoint_settings>
|
||||
<option name="NOTIFY_CAUGHT" value="true"/>
|
||||
<option name="NOTIFY_UNCAUGHT" value="true"/>
|
||||
<option name="WATCH_MODIFICATION" value="true"/>
|
||||
<option name="WATCH_ACCESS" value="true"/>
|
||||
<option name="WATCH_ENTRY" value="true"/>
|
||||
<option name="WATCH_EXIT" value="true"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
<option name="SUSPEND_VM" value="true"/>
|
||||
<option name="COUNT_FILTER_ENABLED" value="false"/>
|
||||
<option name="COUNT_FILTER" value="0"/>
|
||||
<option name="CONDITION_ENABLED" value="false"/>
|
||||
<option name="CONDITION"/>
|
||||
<option name="LOG_ENABLED" value="false"/>
|
||||
<option name="LOG_EXPRESSION_ENABLED" value="false"/>
|
||||
<option name="LOG_MESSAGE"/>
|
||||
<option name="CLASS_FILTERS_ENABLED" value="false"/>
|
||||
<option name="INVERSE_CLASS_FILLTERS" value="false"/>
|
||||
<option name="SUSPEND_POLICY" value="SuspendAll"/>
|
||||
</default_breakpoint_settings>
|
||||
<filter>
|
||||
<option name="PATTERN" value="com.sun.*"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
</filter>
|
||||
<filter>
|
||||
<option name="PATTERN" value="java.*"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
</filter>
|
||||
<filter>
|
||||
<option name="PATTERN" value="javax.*"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
</filter>
|
||||
<filter>
|
||||
<option name="PATTERN" value="org.omg.*"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
</filter>
|
||||
<filter>
|
||||
<option name="PATTERN" value="sun.*"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
</filter>
|
||||
<filter>
|
||||
<option name="PATTERN" value="junit.*"/>
|
||||
<option name="ENABLED" value="true"/>
|
||||
</filter>
|
||||
</component>
|
||||
<component name="CompilerWorkspaceConfiguration">
|
||||
<option name="COMPILE_IN_BACKGROUND" value="false"/>
|
||||
<option name="AUTO_SHOW_ERRORS_IN_EDITOR" value="true"/>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<activeType name="Application"/>
|
||||
<configuration selected="false" default="true" type="Applet" factoryName="Applet">
|
||||
<module name=""/>
|
||||
<option name="MAIN_CLASS_NAME"/>
|
||||
<option name="HTML_FILE_NAME"/>
|
||||
<option name="HTML_USED" value="false"/>
|
||||
<option name="WIDTH" value="400"/>
|
||||
<option name="HEIGHT" value="300"/>
|
||||
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy"/>
|
||||
<option name="VM_PARAMETERS"/>
|
||||
</configuration>
|
||||
<configuration selected="false" default="true" type="Remote" factoryName="Remote">
|
||||
<option name="USE_SOCKET_TRANSPORT" value="true"/>
|
||||
<option name="SERVER_MODE" value="false"/>
|
||||
<option name="SHMEM_ADDRESS" value="javadebug"/>
|
||||
<option name="HOST" value="localhost"/>
|
||||
<option name="PORT" value="5005"/>
|
||||
</configuration>
|
||||
<configuration selected="false" default="true" type="Application" factoryName="Application">
|
||||
<option name="MAIN_CLASS_NAME"/>
|
||||
<option name="VM_PARAMETERS"/>
|
||||
<option name="PROGRAM_PARAMETERS"/>
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>
|
||||
<module name=""/>
|
||||
</configuration>
|
||||
<configuration selected="false" default="true" type="JUnit" factoryName="JUnit">
|
||||
<module name=""/>
|
||||
<option name="PACKAGE_NAME"/>
|
||||
<option name="MAIN_CLASS_NAME"/>
|
||||
<option name="METHOD_NAME"/>
|
||||
<option name="TEST_OBJECT" value="class"/>
|
||||
<option name="VM_PARAMETERS"/>
|
||||
<option name="PARAMETERS"/>
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$"/>
|
||||
<option name="ADDITIONAL_CLASS_PATH"/>
|
||||
<option name="TEST_SEARCH_SCOPE">
|
||||
<value defaultName="wholeProject"/>
|
||||
</option>
|
||||
</configuration>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="ACTIVE_VCS_NAME" value=""/>
|
||||
<option name="STATE" value="0"/>
|
||||
</component>
|
||||
<component name="VssConfiguration">
|
||||
<CheckoutOptions>
|
||||
<option name="COMMENT" value=""/>
|
||||
<option name="DO_NOT_GET_LATEST_VERSION" value="false"/>
|
||||
<option name="REPLACE_WRITABLE" value="false"/>
|
||||
<option name="RECURSIVE" value="false"/>
|
||||
</CheckoutOptions>
|
||||
<CheckinOptions>
|
||||
<option name="COMMENT" value=""/>
|
||||
<option name="KEEP_CHECKED_OUT" value="false"/>
|
||||
<option name="RECURSIVE" value="false"/>
|
||||
</CheckinOptions>
|
||||
<AddOptions>
|
||||
<option name="COMMENT" value=""/>
|
||||
<option name="STORE_ONLY_LATEST_VERSION" value="false"/>
|
||||
<option name="CHECK_OUT_IMMEDIATELY" value="false"/>
|
||||
<option name="FILE_TYPE" value="0"/>
|
||||
</AddOptions>
|
||||
<UndocheckoutOptions>
|
||||
<option name="MAKE_WRITABLE" value="false"/>
|
||||
<option name="REPLACE_LOCAL_COPY" value="0"/>
|
||||
<option name="RECURSIVE" value="false"/>
|
||||
</UndocheckoutOptions>
|
||||
<DiffOptions>
|
||||
<option name="IGNORE_WHITE_SPACE" value="false"/>
|
||||
<option name="IGNORE_CASE" value="false"/>
|
||||
</DiffOptions>
|
||||
<GetOptions>
|
||||
<option name="REPLACE_WRITABLE" value="0"/>
|
||||
<option name="MAKE_WRITABLE" value="false"/>
|
||||
<option name="RECURSIVE" value="false"/>
|
||||
</GetOptions>
|
||||
<option name="CLIENT_PATH" value=""/>
|
||||
<option name="SRCSAFEINI_PATH" value=""/>
|
||||
<option name="USER_NAME" value=""/>
|
||||
<option name="PWD" value=""/>
|
||||
<option name="SHOW_CHECKOUT_OPTIONS" value="true"/>
|
||||
<option name="SHOW_ADD_OPTIONS" value="true"/>
|
||||
<option name="SHOW_UNDOCHECKOUT_OPTIONS" value="true"/>
|
||||
<option name="SHOW_DIFF_OPTIONS" value="true"/>
|
||||
<option name="SHOW_GET_OPTIONS" value="true"/>
|
||||
<option name="USE_EXTERNAL_DIFF" value="false"/>
|
||||
<option name="EXTERNAL_DIFF_PATH" value=""/>
|
||||
<option name="REUSE_LAST_COMMENT" value="false"/>
|
||||
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
|
||||
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
|
||||
<option name="LAST_COMMIT_MESSAGE" value=""/>
|
||||
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
|
||||
</component>
|
||||
<component name="CheckinPanelState"/>
|
||||
<component name="WebViewSettings">
|
||||
<webview flattenPackages="false" showMembers="false" autoscrollToSource="false"/>
|
||||
</component>
|
||||
<component name="EjbViewSettings">
|
||||
<EjbView showMembers="false" autoscrollToSource="false"/>
|
||||
</component>
|
||||
<component name="AppServerRunManager"/>
|
||||
<component name="StarteamConfiguration">
|
||||
<option name="SERVER" value=""/>
|
||||
<option name="PORT" value="49201"/>
|
||||
<option name="USER" value=""/>
|
||||
<option name="PASSWORD" value=""/>
|
||||
<option name="PROJECT" value=""/>
|
||||
<option name="VIEW" value=""/>
|
||||
<option name="ALTERNATIVE_WORKING_PATH" value=""/>
|
||||
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
|
||||
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
|
||||
<option name="LAST_COMMIT_MESSAGE" value=""/>
|
||||
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
|
||||
</component>
|
||||
<component name="Cvs2Configuration">
|
||||
<option name="ON_FILE_ADDING" value="0"/>
|
||||
<option name="ON_FILE_REMOVING" value="0"/>
|
||||
<option name="PRUNE_EMPTY_DIRECTORIES" value="true"/>
|
||||
<option name="SHOW_UPDATE_OPTIONS" value="true"/>
|
||||
<option name="SHOW_ADD_OPTIONS" value="true"/>
|
||||
<option name="SHOW_REMOVE_OPTIONS" value="true"/>
|
||||
<option name="MERGING_MODE" value="0"/>
|
||||
<option name="MERGE_WITH_BRANCH1_NAME" value="HEAD"/>
|
||||
<option name="MERGE_WITH_BRANCH2_NAME" value="HEAD"/>
|
||||
<option name="RESET_STICKY" value="false"/>
|
||||
<option name="CREATE_NEW_DIRECTORIES" value="true"/>
|
||||
<option name="DEFAULT_TEXT_FILE_SUBSTITUTION" value="kv"/>
|
||||
<option name="PROCESS_UNKNOWN_FILES" value="false"/>
|
||||
<option name="PROCESS_DELETED_FILES" value="false"/>
|
||||
<option name="SHOW_EDIT_DIALOG" value="true"/>
|
||||
<option name="RESERVED_EDIT" value="false"/>
|
||||
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6"/>
|
||||
<option name="SHOW_CHECKOUT_OPTIONS" value="true"/>
|
||||
<option name="CHECKOUT_DATE_OR_REVISION_SETTINGS">
|
||||
<value>
|
||||
<option name="BRANCH" value=""/>
|
||||
<option name="DATE" value=""/>
|
||||
<option name="USE_BRANCH" value="false"/>
|
||||
<option name="USE_DATE" value="false"/>
|
||||
</value>
|
||||
</option>
|
||||
<option name="UPDATE_DATE_OR_REVISION_SETTINGS">
|
||||
<value>
|
||||
<option name="BRANCH" value=""/>
|
||||
<option name="DATE" value=""/>
|
||||
<option name="USE_BRANCH" value="false"/>
|
||||
<option name="USE_DATE" value="false"/>
|
||||
</value>
|
||||
</option>
|
||||
<option name="SHOW_CHANGES_REVISION_SETTINGS">
|
||||
<value>
|
||||
<option name="BRANCH" value=""/>
|
||||
<option name="DATE" value=""/>
|
||||
<option name="USE_BRANCH" value="false"/>
|
||||
<option name="USE_DATE" value="false"/>
|
||||
</value>
|
||||
</option>
|
||||
<option name="SHOW_OUTPUT" value="false"/>
|
||||
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false"/>
|
||||
<option name="UPDATE_GROUP_BY_PACKAGES" value="false"/>
|
||||
<option name="ADD_WATCH_INDEX" value="0"/>
|
||||
<option name="REMOVE_WATCH_INDEX" value="0"/>
|
||||
<option name="UPDATE_KEYWORD_SUBSTITUTION"/>
|
||||
<option name="MAKE_NEW_FILES_READONLY" value="false"/>
|
||||
<option name="SHOW_CORRUPTED_PROJECT_FILES" value="0"/>
|
||||
<option name="TAG_AFTER_FILE_COMMIT" value="false"/>
|
||||
<option name="TAG_AFTER_FILE_COMMIT_NAME" value=""/>
|
||||
<option name="TAG_AFTER_PROJECT_COMMIT" value="false"/>
|
||||
<option name="TAG_AFTER_PROJECT_COMMIT_NAME" value=""/>
|
||||
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
|
||||
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
|
||||
<option name="FORCE_NON_EMPTY_COMMENT" value="false"/>
|
||||
<option name="LAST_COMMIT_MESSAGE" value=""/>
|
||||
<option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>
|
||||
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
|
||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>
|
||||
<option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>
|
||||
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>
|
||||
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>
|
||||
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>
|
||||
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/>
|
||||
</component>
|
||||
<component name="CvsTabbedWindow"/>
|
||||
<component name="SvnConfiguration">
|
||||
<option name="USER" value=""/>
|
||||
<option name="PASSWORD" value=""/>
|
||||
<option name="AUTO_ADD_FILES" value="0"/>
|
||||
<option name="AUTO_DEL_FILES" value="0"/>
|
||||
</component>
|
||||
<component name="PerforceConfiguration">
|
||||
<option name="PORT" value="magic:1666"/>
|
||||
<option name="USER" value=""/>
|
||||
<option name="PASSWORD" value=""/>
|
||||
<option name="CLIENT" value=""/>
|
||||
<option name="TRACE" value="false"/>
|
||||
<option name="PERFORCE_STATUS" value="true"/>
|
||||
<option name="CHANGELIST_OPTION" value="false"/>
|
||||
<option name="SYSTEMROOT" value=""/>
|
||||
<option name="P4_EXECUTABLE" value="p4"/>
|
||||
<option name="SHOW_BRANCH_HISTORY" value="false"/>
|
||||
<option name="GENERATE_COMMENT" value="false"/>
|
||||
<option name="SYNC_OPTION" value="Sync"/>
|
||||
<option name="PUT_FOCUS_INTO_COMMENT" value="false"/>
|
||||
<option name="SHOW_CHECKIN_OPTIONS" value="true"/>
|
||||
<option name="FORCE_NON_EMPTY_COMMENT" value="true"/>
|
||||
<option name="LAST_COMMIT_MESSAGE" value=""/>
|
||||
<option name="SAVE_LAST_COMMIT_MESSAGE" value="true"/>
|
||||
<option name="CHECKIN_DIALOG_SPLITTER_PROPORTION" value="0.8"/>
|
||||
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false"/>
|
||||
<option name="OPTIMIZE_IMPORTS_BEFORE_FILE_COMMIT" value="false"/>
|
||||
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false"/>
|
||||
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false"/>
|
||||
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8"/>
|
||||
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5"/>
|
||||
</component>
|
||||
</project>
|
||||
+3
-1
@@ -16,6 +16,7 @@ import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.entity.Record;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
@@ -197,7 +198,8 @@ public class ActivityUnionYearSummaryController {
|
||||
SELECT sur.stid FROM sys_user_role sur
|
||||
$condition
|
||||
""");
|
||||
sql.setCondition(Cnd.NEW().and("sur.userId", "=", ShiroUtil.getPrincipalProperty("id")).and("sur.roleId", "=", Roles.CLUB_FZR));
|
||||
sql.setCondition(Cnd.NEW().and("sur.userId", "=", ShiroUtil.getPrincipalProperty("id"))
|
||||
.and(new Static("sur.roleId IN (SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR + "' OR code = '" + Roles.CLUB_JBR_CODE + "')")));
|
||||
List<Record> list = baseService.list(sql);
|
||||
List<String> stids = list.stream().map(x -> x.getString("stid")).collect(Collectors.toList());
|
||||
return stids;
|
||||
|
||||
@@ -31,6 +31,8 @@ public interface Roles {
|
||||
*/
|
||||
String CLUB_FZR = "c17d7a777dd24d36b4b268037b959faf";
|
||||
|
||||
String CLUB_JBR_CODE = "xhjbr";
|
||||
|
||||
/**
|
||||
* 代表团团长
|
||||
*/
|
||||
|
||||
@@ -14,6 +14,7 @@ import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Lang;
|
||||
@@ -96,7 +97,8 @@ public class Vi {
|
||||
* @return 当前登录用户的所负责的社团id
|
||||
*/
|
||||
public String getClubId() {
|
||||
Sys_user_role userRole = sysUserRoleService.fetch(Cnd.where("userId", "=", ShiroUtil.getPrincipalProperty("id")).and("roleId", "=", Roles.CLUB_FZR));
|
||||
Sys_user_role userRole = sysUserRoleService.fetch(Cnd.where("userId", "=", ShiroUtil.getPrincipalProperty("id"))
|
||||
.and(new Static("roleId IN " + getClubManageRoleSql())));
|
||||
return userRole == null ? "" : userRole.getStid();
|
||||
}
|
||||
|
||||
@@ -104,7 +106,13 @@ public class Vi {
|
||||
* @return 当前登录用户管理的协会社团
|
||||
*/
|
||||
public String getMangeClubStr() {
|
||||
return "(SELECT sur.stid FROM sys_user_role sur WHERE sur.userId = '" + ShiroUtil.getPrincipalProperty("id") + "' and sur.roleId = '" + Roles.CLUB_FZR + "')";
|
||||
return "(SELECT sur.stid FROM sys_user_role sur WHERE sur.userId = '" + ShiroUtil.getPrincipalProperty("id")
|
||||
+ "' AND sur.roleId IN " + getClubManageRoleSql() + ")";
|
||||
}
|
||||
|
||||
// 协会社团管理角色范围:会长和经办人保持相同的数据权限。
|
||||
private String getClubManageRoleSql() {
|
||||
return "(SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR + "' OR code = '" + Roles.CLUB_JBR_CODE + "')";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package io.v.nutz.base.utils;
|
||||
|
||||
import okhttp3.*;
|
||||
import org.nutz.http.Header;
|
||||
import org.nutz.http.Http;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
@@ -31,10 +30,10 @@ public class WxHttpUtil {
|
||||
@Inject
|
||||
private WxTokenUtil wxTokenUtil;
|
||||
|
||||
private final OkHttpClient okHttpClient = new OkHttpClient();
|
||||
private final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
||||
private final MediaType formData = MediaType.parse("multipart/form-data");
|
||||
private final NutMap jsonHeader = NutMap.NEW().setv("Content-Type", "application/json");
|
||||
// private final OkHttpClient okHttpClient = new OkHttpClient();
|
||||
// private final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
|
||||
// private final MediaType formData = MediaType.parse("multipart/form-data");
|
||||
// private final NutMap jsonHeader = NutMap.NEW().setv("Content-Type", "application/json");
|
||||
|
||||
|
||||
public String env = "unionpal-0ge58oan8d6fa30e";
|
||||
@@ -63,22 +62,24 @@ public class WxHttpUtil {
|
||||
Map<String, String> reqBody = new HashMap<>();
|
||||
reqBody.put("env", this.env);
|
||||
reqBody.put("query", query);
|
||||
Header header = Header.create(jsonHeader);
|
||||
org.nutz.http.Response response = Http.post3(queryUrl, Json.toJson(reqBody), header, 200000);
|
||||
return Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
|
||||
// Header header = Header.create(jsonHeader);
|
||||
// org.nutz.http.Response response = Http.post3(queryUrl, Json.toJson(reqBody), header, 200000);
|
||||
// return Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
|
||||
return null;
|
||||
}
|
||||
|
||||
public NutMap getCloudResult(String queryUrl, String name, Map<String, Object> reqBody) throws IOException {
|
||||
String url = queryUrl.replace("ACCESS_TOKEN", wxTokenUtil.getWeAppAccesstoken())
|
||||
.replace("ENV", this.env).replace("FUNCTION_NAME", name);
|
||||
RequestBody b = RequestBody.create(Json.toJson(reqBody), JSON);
|
||||
Request request = new Request.Builder()
|
||||
.url(url)
|
||||
.post(b)
|
||||
.build();
|
||||
Call call = okHttpClient.newCall(request);
|
||||
Response response = call.execute();
|
||||
return Json.fromJson(NutMap.class, Objects.requireNonNull(response.body()).string());
|
||||
// String url = queryUrl.replace("ACCESS_TOKEN", wxTokenUtil.getWeAppAccesstoken())
|
||||
// .replace("ENV", this.env).replace("FUNCTION_NAME", name);
|
||||
// RequestBody b = RequestBody.create(Json.toJson(reqBody), JSON);
|
||||
// Request request = new Request.Builder()
|
||||
// .url(url)
|
||||
// .post(b)
|
||||
// .build();
|
||||
// Call call = okHttpClient.newCall(request);
|
||||
// Response response = call.execute();
|
||||
// return Json.fromJson(NutMap.class, Objects.requireNonNull(response.body()).string());
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,25 +90,26 @@ public class WxHttpUtil {
|
||||
* @throws IOException
|
||||
*/
|
||||
public String getWxFileUrl(String fileid) throws IOException {
|
||||
String url = this.downloadUrl.replace("ACCESS_TOKEN", wxTokenUtil.getWeAppAccesstoken());
|
||||
Map mf = new HashMap<String, String>();
|
||||
mf.put("fileid", fileid);
|
||||
mf.put("max_age", 7200);
|
||||
ArrayList<Map> fm = new ArrayList<>();
|
||||
fm.add(mf);
|
||||
Map reqbody = new HashMap<String, String>();
|
||||
reqbody.put("env", this.env);
|
||||
reqbody.put("file_list", fm);
|
||||
Header header = Header.create(jsonHeader);
|
||||
org.nutz.http.Response response = Http.post3(url, Json.toJson(reqbody), header, 200000);
|
||||
NutMap map = Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
|
||||
if (map.getInt("errcode") == 0 && map.getString("errmsg").equals("ok")) {
|
||||
NutMap res = map.getAsList("file_list", NutMap.class).get(0);
|
||||
return res.getString("download_url");
|
||||
} else {
|
||||
log.error(map.getString("errmsg"));
|
||||
return null;
|
||||
}
|
||||
// String url = this.downloadUrl.replace("ACCESS_TOKEN", wxTokenUtil.getWeAppAccesstoken());
|
||||
// Map mf = new HashMap<String, String>();
|
||||
// mf.put("fileid", fileid);
|
||||
// mf.put("max_age", 7200);
|
||||
// ArrayList<Map> fm = new ArrayList<>();
|
||||
// fm.add(mf);
|
||||
// Map reqbody = new HashMap<String, String>();
|
||||
// reqbody.put("env", this.env);
|
||||
// reqbody.put("file_list", fm);
|
||||
// Header header = Header.create(jsonHeader);
|
||||
// org.nutz.http.Response response = Http.post3(url, Json.toJson(reqbody), header, 200000);
|
||||
// NutMap map = Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
|
||||
// if (map.getInt("errcode") == 0 && map.getString("errmsg").equals("ok")) {
|
||||
// NutMap res = map.getAsList("file_list", NutMap.class).get(0);
|
||||
// return res.getString("download_url");
|
||||
// } else {
|
||||
// log.error(map.getString("errmsg"));
|
||||
// return null;
|
||||
// }
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -122,14 +124,15 @@ public class WxHttpUtil {
|
||||
* @return
|
||||
*/
|
||||
public NutMap getUploadFile(String wxfilePath) throws Exception {
|
||||
String Url = this.uploadUrl.replace("ACCESS_TOKEN", wxTokenUtil.getWeAppAccesstoken());
|
||||
Map reqbody = new HashMap<String, String>();
|
||||
reqbody.put("env", this.env);
|
||||
reqbody.put("path", wxfilePath);
|
||||
Header header = Header.create(jsonHeader);
|
||||
org.nutz.http.Response response = Http.post3(Url, Json.toJson(reqbody), header, 200000);
|
||||
NutMap map = Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
|
||||
return map;
|
||||
// String Url = this.uploadUrl.replace("ACCESS_TOKEN", wxTokenUtil.getWeAppAccesstoken());
|
||||
// Map reqbody = new HashMap<String, String>();
|
||||
// reqbody.put("env", this.env);
|
||||
// reqbody.put("path", wxfilePath);
|
||||
// Header header = Header.create(jsonHeader);
|
||||
// org.nutz.http.Response response = Http.post3(Url, Json.toJson(reqbody), header, 200000);
|
||||
// NutMap map = Json.fromJson(NutMap.class, new InputStreamReader(response.getStream()));
|
||||
// return map;
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@@ -141,28 +144,29 @@ public class WxHttpUtil {
|
||||
* @throws Exception
|
||||
*/
|
||||
public String uploadFile(NutMap map, TempFile file, String wxfilePath) throws Exception {
|
||||
String url = map.getString("url");
|
||||
String token = map.getString("token");
|
||||
String authorization = map.getString("authorization");
|
||||
String file_id = map.getString("file_id");
|
||||
String cos_file_id = map.getString("cos_file_id");
|
||||
RequestBody fb = RequestBody.create(file.getFile(), formData);
|
||||
RequestBody b = new MultipartBody.Builder()
|
||||
.setType(MultipartBody.FORM)
|
||||
.addFormDataPart("key", wxfilePath)
|
||||
.addFormDataPart("Signature", authorization)
|
||||
.addFormDataPart("x-cos-security-token", token)
|
||||
.addFormDataPart("x-cos-meta-fileid", cos_file_id)
|
||||
.addFormDataPart("file", "filename", fb)
|
||||
.build();
|
||||
|
||||
Request request = new Request.Builder()
|
||||
.url(url)
|
||||
.post(b)
|
||||
.build();
|
||||
Call call = okHttpClient.newCall(request);
|
||||
Response response = call.execute();
|
||||
//没有返回的内容 。。。怎么判断是否成功 难道去查?
|
||||
return file_id;
|
||||
// String url = map.getString("url");
|
||||
// String token = map.getString("token");
|
||||
// String authorization = map.getString("authorization");
|
||||
// String file_id = map.getString("file_id");
|
||||
// String cos_file_id = map.getString("cos_file_id");
|
||||
// RequestBody fb = RequestBody.create(file.getFile(), formData);
|
||||
// RequestBody b = new MultipartBody.Builder()
|
||||
// .setType(MultipartBody.FORM)
|
||||
// .addFormDataPart("key", wxfilePath)
|
||||
// .addFormDataPart("Signature", authorization)
|
||||
// .addFormDataPart("x-cos-security-token", token)
|
||||
// .addFormDataPart("x-cos-meta-fileid", cos_file_id)
|
||||
// .addFormDataPart("file", "filename", fb)
|
||||
// .build();
|
||||
//
|
||||
// Request request = new Request.Builder()
|
||||
// .url(url)
|
||||
// .post(b)
|
||||
// .build();
|
||||
// Call call = okHttpClient.newCall(request);
|
||||
// Response response = call.execute();
|
||||
// //没有返回的内容 。。。怎么判断是否成功 难道去查?
|
||||
// return file_id;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
package io.v.nutz.clubPreAudit.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.modules.models.Audit;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.clubPreAudit.models.ClubPreAudit;
|
||||
import io.v.nutz.sys.models.Sys_club;
|
||||
import io.v.nutz.sys.models.Sys_club_user;
|
||||
import io.v.nutz.util.ShiroUtil;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
/**
|
||||
* @ClassName clubPreAuditManageController
|
||||
* @Description 我的预审管理
|
||||
* @Version 1.0
|
||||
* @Author zhf
|
||||
* @Date 2025/4/9 下午2:04
|
||||
*/
|
||||
@At("/platform/clubPreAudit/manage")
|
||||
@Ok("json:full")
|
||||
@IocBean
|
||||
public class clubPreAuditManageController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/clubPreAudit/manage.html")
|
||||
@RequiresPermissions("clubPreAudit.manage")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("clubPreAudit.manage")
|
||||
public Object pageData(PageForm pageForm, String year, String notes) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT * FROM `club_pre_audit` $condition
|
||||
""");
|
||||
cnd.andEX("YEAR(applyDate)", "=", year);
|
||||
cnd.andEX("unionId", "=", Vi.getUnionId());
|
||||
cnd.desc("applyDate").desc("opAt");
|
||||
if (StrUtil.isNotEmpty(notes)) {
|
||||
cnd.andEX("notes", "like", "%" + notes + "%");
|
||||
}
|
||||
if (StrUtil.isAllNotEmpty(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("clubPreAudit.manage")
|
||||
public Object doDelete(String id) {
|
||||
baseService.dao().delete(ClubPreAudit.class, id);
|
||||
return null;
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("clubPreAudit.manage")
|
||||
public Object doSubmit(@Param("preAudit") ClubPreAudit preAudit, Boolean flag) {
|
||||
preAudit.setUserId(ShiroUtil.getUserId());
|
||||
preAudit.setUnitId(ShiroUtil.getUnitId());
|
||||
preAudit.setUnionId(Vi.getUnionId());
|
||||
|
||||
// 获取用户所属协会
|
||||
Sys_club_user clubUser = baseService.dao().fetch(Sys_club_user.class, Cnd.where("userid", "=", ShiroUtil.getUserId()).and("isNormal", "=", true));
|
||||
if (clubUser != null) {
|
||||
Sys_club club = baseService.dao().fetch(Sys_club.class, clubUser.getClubid());
|
||||
if (club != null) {
|
||||
preAudit.setClubId(club.getId());
|
||||
preAudit.setClubName(club.getName());
|
||||
}
|
||||
}
|
||||
|
||||
preAudit.setAuditState(flag ? 1 : 0);
|
||||
baseService.insertOrUpdate(preAudit);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
public Object findOne(String id) {
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT * FROM `club_pre_audit` WHERE id=@id
|
||||
""")
|
||||
.setParam("id", id);
|
||||
sql.setCallback(Sqls.callback.map());
|
||||
baseService.dao().execute(sql);
|
||||
NutMap info = (NutMap) sql.getResult();
|
||||
info.put("auditInfo", baseService.dao().fetch(Audit.class, Cnd.where("id", "=", info.getString("auditId"))));
|
||||
return info;
|
||||
}
|
||||
|
||||
@At("/getUserClub")
|
||||
@ViReturn
|
||||
public Object getUserClub() {
|
||||
NutMap result = new NutMap();
|
||||
// 获取用户所属协会
|
||||
Sys_club_user clubUser = baseService.dao().fetch(Sys_club_user.class, Cnd.where("userid", "=", ShiroUtil.getUserId()).and("isNormal", "=", true));
|
||||
if (clubUser != null) {
|
||||
Sys_club club = baseService.dao().fetch(Sys_club.class, clubUser.getClubid());
|
||||
if (club != null) {
|
||||
result.put("clubId", club.getId());
|
||||
result.put("clubName", club.getName());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@At("/getClubs")
|
||||
@ViReturn
|
||||
public Object getClubs() {
|
||||
// 获取所有协会列表
|
||||
return baseService.dao().query(Sys_club.class, Cnd.where("isjs", "=", false));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package io.v.nutz.clubPreAudit.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.util.ShiroUtil;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
/**
|
||||
* @ClassName clubPreAuditQueryController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2025/4/10 上午9:13
|
||||
*/
|
||||
@At("/platform/clubPreAudit/query")
|
||||
@Ok("json:full")
|
||||
@IocBean
|
||||
public class clubPreAuditQueryController {
|
||||
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/clubPreAudit/query.html")
|
||||
@RequiresPermissions("clubPreAudit.query")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("clubPreAudit.manage")
|
||||
public Object pageData(PageForm pageForm, String startDate, String endDate, String notes, String unitId, String unionId, String clubId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT * FROM `club_pre_audit` $condition
|
||||
""");
|
||||
cnd.andEX("applyDate", ">=", startDate);
|
||||
cnd.andEX("applyDate", "<=", endDate);
|
||||
cnd.andEX("auditState", ">=", 3);
|
||||
cnd.andEX("unitId", "=", unitId);
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
if (StrUtil.isNotEmpty(clubId)) {
|
||||
cnd.andEX("clubId", "=", clubId);
|
||||
}
|
||||
if (StrUtil.isNotEmpty(notes)) {
|
||||
cnd.andEX("notes", "like", "%" + notes + "%");
|
||||
}
|
||||
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (StrUtil.isAllNotEmpty(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
}else{
|
||||
cnd.desc("applyDate").desc("opAt");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package io.v.nutz.clubPreAudit.controller;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.modules.models.Audit;
|
||||
import io.v.nutz.modules.models.PageForm;
|
||||
import io.v.nutz.clubPreAudit.models.ClubPreAudit;
|
||||
import io.v.nutz.util.ShiroUtil;
|
||||
import io.v.nutz.web.commons.slog.annotation.SLog;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.dao.Chain;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
|
||||
/**
|
||||
* @ClassName clubPreAuditSchoolController
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2025/4/9 下午4:46
|
||||
*/
|
||||
@At("/platform/clubPreAudit/audit")
|
||||
@Ok("json:full")
|
||||
@IocBean
|
||||
public class clubPreAuditSchoolController {
|
||||
@Inject
|
||||
private BaseService baseService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/clubPreAudit/audit.html")
|
||||
@RequiresPermissions("clubPreAudit.audit")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("clubPreAudit.audit")
|
||||
public Object pageData(PageForm pageForm, String year, String notes, Integer auditState, String unitId, String unionId, String clubId) {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
Sql sql = Sqls.create("""
|
||||
SELECT * FROM `club_pre_audit` $condition
|
||||
""");
|
||||
cnd.andEX("YEAR(applyDate)", "=", year);
|
||||
cnd.andEX("unitId", "=", unitId);
|
||||
cnd.andEX("unionId", "=", unionId);
|
||||
if (StrUtil.isNotEmpty(clubId)) {
|
||||
cnd.andEX("clubId", "=", clubId);
|
||||
}
|
||||
if (auditState != 0) {
|
||||
cnd.andEX("auditState", auditState == 1 ? ">" : "=", 1);
|
||||
} else {
|
||||
cnd.andEX("auditState", ">=", 1);
|
||||
}
|
||||
if (StrUtil.isNotEmpty(notes)) {
|
||||
cnd.andEX("notes", "like", "%" + notes + "%");
|
||||
}
|
||||
|
||||
if (StrUtil.isAllNotEmpty(pageForm.getSearchName(), pageForm.getSearchKeyword())) {
|
||||
cnd.and(Cnd.likeEX(pageForm.getSearchName(), pageForm.getSearchKeyword()));
|
||||
}
|
||||
if (StrUtil.isAllNotEmpty(pageForm.getPageOrderName(), pageForm.getPageOrderBy())) {
|
||||
cnd.orderBy(pageForm.getPageOrderName(), pageForm.getPageOrderBy());
|
||||
}else{
|
||||
cnd.desc("applyDate").desc("opAt");
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
return baseService.listPageMap(pageForm.getPageNumber(), pageForm.getPageSize(), sql);
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@SLog(tag = "协会预审", msg = "审核一条记录", param = true, result = true)
|
||||
@RequiresPermissions("clubPreAudit.audit")
|
||||
public Object doSubmit(Audit audit, String id, @Param("flag") Integer flag) {
|
||||
audit.setLoginname(ShiroUtil.getPrincipalProperty("loginname").toString());
|
||||
baseService.insert(audit);
|
||||
Integer auditState;
|
||||
if (flag == 1) {
|
||||
auditState = 2;
|
||||
} else if (flag == 2) {
|
||||
auditState = 3;
|
||||
} else {
|
||||
auditState = 4;
|
||||
}
|
||||
Chain chain = Chain.make("auditId", audit.getId()).add("auditState", auditState);
|
||||
baseService.dao().update(ClubPreAudit.class, chain, Cnd.where("id", "=", id));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
package io.v.nutz.clubPreAudit.models;
|
||||
|
||||
import io.v.nutz.base.model.BaseModel;
|
||||
import io.v.nutz.sys.models.Sys_file;
|
||||
import lombok.Data;
|
||||
import org.nutz.dao.entity.annotation.*;
|
||||
import org.nutz.dao.interceptor.annotation.PrevInsert;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @ClassName ClubPreAudit
|
||||
* @Description TODO
|
||||
* @Author zhf
|
||||
* @Date 2025/4/9 下午1:55
|
||||
*/
|
||||
@Data
|
||||
@Table
|
||||
@Comment("协会预审系统")
|
||||
public class ClubPreAudit extends BaseModel {
|
||||
|
||||
|
||||
@Column
|
||||
@Name
|
||||
@Comment("ID")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
@PrevInsert(uu32 = true)
|
||||
private String id;
|
||||
|
||||
@Column
|
||||
@Comment("id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userId;
|
||||
|
||||
@Column
|
||||
@Comment("姓名")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String userName;
|
||||
|
||||
@Column
|
||||
@Comment("工号")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String loginName;
|
||||
|
||||
@Column
|
||||
@Comment("单位")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unitName;
|
||||
|
||||
@Column
|
||||
@Comment("单位Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unitId;
|
||||
|
||||
@Column
|
||||
@Comment("工会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String unionName;
|
||||
|
||||
@Column
|
||||
@Comment("工会Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String unionId;
|
||||
|
||||
@Column
|
||||
@Comment("协会")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String clubName;
|
||||
|
||||
@Column
|
||||
@Comment("协会Id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String clubId;
|
||||
|
||||
@Column
|
||||
@Comment("报销事由")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 100)
|
||||
private String notes;
|
||||
|
||||
@Column
|
||||
@Comment("联系电话")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 50)
|
||||
private String mobile;
|
||||
|
||||
@Column
|
||||
@Comment("申报时间")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String applyDate;
|
||||
|
||||
@Column
|
||||
@Comment("附件信息")
|
||||
@ColDefine(type = ColType.MYSQL_JSON)
|
||||
private List<Sys_file> files;
|
||||
|
||||
@Column
|
||||
@Comment("审核记录id")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 32)
|
||||
private String auditId;
|
||||
|
||||
@Column
|
||||
@Comment("审核状态")
|
||||
@ColDefine(type = ColType.INT)
|
||||
private Integer auditState;
|
||||
|
||||
|
||||
}
|
||||
@@ -7,6 +7,7 @@ import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.base.utils.DateUtil;
|
||||
import io.v.nutz.base.utils.FileService;
|
||||
import io.v.nutz.hd.models.Hd_wm_sbxx;
|
||||
import io.v.nutz.hd.models.Hd_wm_xx;
|
||||
import io.v.nutz.hd.services.HdWmLbService;
|
||||
import io.v.nutz.hd.services.HdWmZplbService;
|
||||
import io.v.nutz.hd.services.HdWmsbxxService;
|
||||
@@ -21,6 +22,7 @@ import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.mvc.annotation.AdaptBy;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
@@ -69,17 +71,27 @@ public class HdJzgAddZpController {
|
||||
public Object doSubmit(@Param("data") String data, @Param(value = "file", required = false) TempFile[] files, boolean flag) {
|
||||
try {
|
||||
Hd_wm_sbxx sbxx = Json.fromJson(Hd_wm_sbxx.class, data);
|
||||
Result checkResult = checkActivityTime(sbxx);
|
||||
if (checkResult != null) {
|
||||
return checkResult;
|
||||
}
|
||||
sbxx.setHdsbrid(ShiroUtil.getPrincipalProperty("id").toString());
|
||||
sbxx.setHdsbsj(DateUtil.getDateTime());
|
||||
sbxx.setAuditState(flag ? "4400" : "3999");
|
||||
sbxx.setAuditState("4400");
|
||||
Hd_wm_sbxx insert = hdWmsbxxService.insert(sbxx);
|
||||
|
||||
for (TempFile file : files) {
|
||||
fileService.upload(file, insert.getId(), "/hd/hdwm/");
|
||||
if (files != null) {
|
||||
for (TempFile file : files) {
|
||||
if (file != null) {
|
||||
fileService.upload(file, insert.getId(), "/hd/hdwm/");
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result.success().addMsg("上传成功!");
|
||||
} catch (Exception e) {
|
||||
return Result.error().addMsg("上传失败!");
|
||||
e.printStackTrace();
|
||||
String message = Strings.isBlank(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage();
|
||||
return Result.error("上传失败:" + message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,22 +101,72 @@ public class HdJzgAddZpController {
|
||||
public Object doEdit(@Param("data") String data, String readytodelfile, @Param(value = "file", required = false) TempFile[] files, boolean flag) {
|
||||
try {
|
||||
Hd_wm_sbxx sbxx = Json.fromJson(Hd_wm_sbxx.class, data);
|
||||
sbxx.setAuditState(flag ? "4400" : "3999");
|
||||
Result checkResult = checkActivityTime(sbxx);
|
||||
if (checkResult != null) {
|
||||
return checkResult;
|
||||
}
|
||||
sbxx.setAuditState("4400");
|
||||
hdWmsbxxService.updateIgnoreNull(sbxx);
|
||||
|
||||
List<String> dellist = Json.fromJsonAsList(String.class, readytodelfile);
|
||||
for (String f : dellist) {
|
||||
fileService.delete(f, f);
|
||||
if (Strings.isNotBlank(readytodelfile)) {
|
||||
List<String> dellist = Json.fromJsonAsList(String.class, readytodelfile);
|
||||
for (String f : dellist) {
|
||||
fileService.delete(f, f);
|
||||
}
|
||||
}
|
||||
for (TempFile file : files) {
|
||||
fileService.upload(file, sbxx.getId(), "/hd/hdwm/");
|
||||
if (files != null) {
|
||||
for (TempFile file : files) {
|
||||
if (file != null) {
|
||||
fileService.upload(file, sbxx.getId(), "/hd/hdwm/");
|
||||
}
|
||||
}
|
||||
}
|
||||
return Result.success().addMsg("修改成功!");
|
||||
} catch (Exception e) {
|
||||
return Result.error().addMsg("上传失败!");
|
||||
e.printStackTrace();
|
||||
String message = Strings.isBlank(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage();
|
||||
return Result.error("上传失败:" + message);
|
||||
}
|
||||
}
|
||||
|
||||
private Result checkActivityTime(Hd_wm_sbxx sbxx) throws Exception {
|
||||
if (sbxx == null) {
|
||||
return Result.error("操作失败:未接收到作品信息,请重新填写后提交!");
|
||||
}
|
||||
String hdid = sbxx.getHdid();
|
||||
if (Strings.isBlank(hdid) && Strings.isNotBlank(sbxx.getId())) {
|
||||
Hd_wm_sbxx old = hdWmsbxxService.fetch(sbxx.getId());
|
||||
hdid = old == null ? null : old.getHdid();
|
||||
}
|
||||
if (Strings.isBlank(hdid)) {
|
||||
return Result.error("操作失败:缺少活动信息,请重新进入活动页面提交!");
|
||||
}
|
||||
Hd_wm_xx hd = baseService.dao().fetch(Hd_wm_xx.class, hdid);
|
||||
if (hd == null) {
|
||||
return Result.error("操作失败:活动不存在,请刷新后重试!");
|
||||
}
|
||||
if (!Boolean.TRUE.equals(hd.getHdflag())) {
|
||||
return Result.error("操作失败:当前活动未开启!");
|
||||
}
|
||||
Date startTime = parseActivityTime(hd.getHdkssj());
|
||||
Date endTime = parseActivityTime(hd.getHdjssj());
|
||||
Date now = new Date();
|
||||
if (startTime == null || endTime == null || now.before(startTime) || now.after(endTime)) {
|
||||
return Result.error("操作失败:不在活动时间范围内!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Date parseActivityTime(String time) throws Exception {
|
||||
if (Strings.isBlank(time)) {
|
||||
return null;
|
||||
}
|
||||
String pattern = time.trim().length() <= 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss";
|
||||
SimpleDateFormat format = new SimpleDateFormat(pattern);
|
||||
format.setLenient(false);
|
||||
return format.parse(time.trim());
|
||||
}
|
||||
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@@ -120,6 +182,7 @@ public class HdJzgAddZpController {
|
||||
sbr.username AS sbrname,
|
||||
sbr.loginname,
|
||||
hd.hdname,
|
||||
hd.hdflag,
|
||||
hd.hdkssj,
|
||||
hd.hdjssj,
|
||||
dw.name as dwname,
|
||||
|
||||
@@ -2,6 +2,7 @@ package io.v.nutz.hd.controller.wmhd;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
@@ -10,6 +11,7 @@ import io.v.nutz.base.utils.Office2Pdf;
|
||||
import io.v.nutz.base.utils.PageUtil;
|
||||
import io.v.nutz.base.utils.Vi;
|
||||
import io.v.nutz.hd.models.Hd_wm_sbxx;
|
||||
import io.v.nutz.hd.models.Hd_wm_xx;
|
||||
import io.v.nutz.hd.services.HdWmLbService;
|
||||
import io.v.nutz.hd.services.HdWmZplbService;
|
||||
import io.v.nutz.hd.services.HdWmsbxxService;
|
||||
@@ -54,6 +56,7 @@ import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.net.URLEncoder;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -349,7 +352,7 @@ public class HdWmInfoController {
|
||||
cnd.andEX("xx.hdzplx2", "=", zplb);
|
||||
cnd.andEX("u.unionid", "=", union);
|
||||
cnd.andEX("u.unitid", "=", unit);
|
||||
cnd.andEX("xx.auditState", "=", 4400);
|
||||
cnd.andEX("xx.auditState", "=", stateId);
|
||||
cnd.andEX("xx.isExcellent", "=", isExcellent);
|
||||
if (!ShiroUtil.hasRole("A06") && !ShiroUtil.hasRole("sysadmin")) {
|
||||
if (ShiroUtil.hasRole("H04")) {
|
||||
@@ -462,6 +465,9 @@ public class HdWmInfoController {
|
||||
String zplb,
|
||||
String union,
|
||||
String unit,
|
||||
String year,
|
||||
String searchName,
|
||||
String searchKeyword,
|
||||
Integer isExcellent,
|
||||
String stateId) {
|
||||
Sql sql = Sqls.create("""
|
||||
@@ -493,12 +499,15 @@ public class HdWmInfoController {
|
||||
cnd.andEX("xx.hdzplx2", "=", zplb);
|
||||
cnd.andEX("u.unionid", "=", union);
|
||||
cnd.andEX("u.unitid", "=", unit);
|
||||
cnd.andEX("YEAR(xx.hdsbsj)", "=", year);
|
||||
cnd.andEX("xx.isExcellent", "=", isExcellent);
|
||||
cnd.andEX("xx.auditState", "=", 4400);
|
||||
if (!ShiroUtil.hasRole("A06") && !ShiroUtil.hasRole("sysadmin")) {
|
||||
if (ShiroUtil.hasRole("H04")) {
|
||||
cnd.andEX("u.unionid", "=", Vi.getUnionId());
|
||||
}
|
||||
cnd.andEX("xx.auditState", "=", stateId);
|
||||
if (!ShiroUtil.hasAnyRoles("sysadmin,A06")) {
|
||||
cnd.and("u.unionid", "=", Vi.getUnionId());
|
||||
}
|
||||
// 导出需与页面列表查询条件保持一致,避免按姓名或工号筛选后导出结果不一致。
|
||||
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
|
||||
cnd.and(Cnd.likeEX(searchName, searchKeyword));
|
||||
}
|
||||
cnd.asc("u.unionname").asc("u.unitname").asc("u.username").asc("xx.hdzplx");
|
||||
sql.setCondition(cnd);
|
||||
@@ -517,8 +526,10 @@ public class HdWmInfoController {
|
||||
exportEntities.add(new ExcelExportEntity("点赞次数", "dz_num", 20));
|
||||
|
||||
try {
|
||||
ViTool.excelResponse(response, hdname + ".xls");
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), exportEntities, list);
|
||||
ViTool.excelResponse(response, hdname + ".xlsx");
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, exportEntities, list);
|
||||
workbook.write(response.getOutputStream());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -681,12 +692,50 @@ public class HdWmInfoController {
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("hd.wmhd.zpxx1")
|
||||
public Object doDelete(String id) {
|
||||
public Object doDelete(String id) throws Exception {
|
||||
Result checkResult = checkActivityTimeByWorkId(id);
|
||||
if (checkResult != null) {
|
||||
return checkResult;
|
||||
}
|
||||
dao.clear(Hd_wm_sbxx.class, Cnd.where("id", "=", id));
|
||||
dao.clear(Sys_file.class, Cnd.where("reid", "=", id));
|
||||
return null;
|
||||
}
|
||||
|
||||
private Result checkActivityTimeByWorkId(String id) throws Exception {
|
||||
if (Strings.isBlank(id)) {
|
||||
return Result.error("删除失败:缺少作品信息!");
|
||||
}
|
||||
Hd_wm_sbxx sbxx = dao.fetch(Hd_wm_sbxx.class, id);
|
||||
if (sbxx == null) {
|
||||
return Result.error("删除失败:作品不存在或已删除!");
|
||||
}
|
||||
Hd_wm_xx hd = dao.fetch(Hd_wm_xx.class, sbxx.getHdid());
|
||||
if (hd == null) {
|
||||
return Result.error("删除失败:活动不存在,请刷新后重试!");
|
||||
}
|
||||
if (!Boolean.TRUE.equals(hd.getHdflag())) {
|
||||
return Result.error("删除失败:当前活动未开启!");
|
||||
}
|
||||
Date startTime = parseActivityTime(hd.getHdkssj());
|
||||
Date endTime = parseActivityTime(hd.getHdjssj());
|
||||
Date now = new Date();
|
||||
if (startTime == null || endTime == null || now.before(startTime) || now.after(endTime)) {
|
||||
return Result.error("删除失败:不在活动时间范围内!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Date parseActivityTime(String time) throws Exception {
|
||||
if (Strings.isBlank(time)) {
|
||||
return null;
|
||||
}
|
||||
String pattern = time.trim().length() <= 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss";
|
||||
SimpleDateFormat format = new SimpleDateFormat(pattern);
|
||||
format.setLenient(false);
|
||||
return format.parse(time.trim());
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@RequiresPermissions("hd.wmhd.zpxx1")
|
||||
|
||||
@@ -3,6 +3,7 @@ package io.v.nutz.hd.controller.wmhd.mobile;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import io.v.nutz.base.utils.FileService;
|
||||
import io.v.nutz.hd.models.Hd_wm_sbxx;
|
||||
import io.v.nutz.hd.models.Hd_wm_xx;
|
||||
import io.v.nutz.hd.services.HdWmsbxxService;
|
||||
import io.v.nutz.hd.services.HdWmsbxxfjService;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
@@ -13,6 +14,7 @@ import org.nutz.dao.entity.Record;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.mvc.annotation.AdaptBy;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
@@ -21,7 +23,8 @@ import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -81,19 +84,70 @@ public class StaffActivitiesCon {
|
||||
@RequiresAuthentication
|
||||
public Object doSubmit(@Param("..") Hd_wm_sbxx sbxx, @Param("files") TempFile[] files, boolean flag) {
|
||||
try {
|
||||
String path = new File("").getCanonicalPath();
|
||||
sbxx.setAuditState(flag ? "4400" : "3999");
|
||||
// 上传入口先校验核心参数,避免主表未落库时前端只能看到笼统失败提示。
|
||||
if (sbxx == null) {
|
||||
return Result.error("上传失败:未接收到作品信息,请重新填写后提交!");
|
||||
}
|
||||
if (Strings.isBlank(sbxx.getHdid())) {
|
||||
return Result.error("上传失败:缺少活动信息,请重新进入活动页面提交!");
|
||||
}
|
||||
if (Strings.isBlank(sbxx.getHdsbrid())) {
|
||||
return Result.error("上传失败:缺少上传人信息,请重新登录后提交!");
|
||||
}
|
||||
Result checkResult = checkActivityTime(sbxx.getHdid());
|
||||
if (checkResult != null) {
|
||||
return checkResult;
|
||||
}
|
||||
sbxx.setAuditState("4400");
|
||||
Hd_wm_sbxx insert = hdWmsbxxService.insert(sbxx);
|
||||
|
||||
for (TempFile file : files) {
|
||||
fileService.upload(file, insert.getId(), "/hd/hdwm/");
|
||||
if (insert == null || Strings.isBlank(insert.getId())) {
|
||||
return Result.error("上传失败:作品信息保存失败,请重新提交!");
|
||||
}
|
||||
|
||||
// 保存时可能没有上传附件,避免空文件数组导致提交接口异常。
|
||||
if (files != null) {
|
||||
for (TempFile file : files) {
|
||||
if (file != null) {
|
||||
fileService.upload(file, insert.getId(), "/hd/hdwm/");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return Result.success().addMsg("上传成功!");
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return Result.error().addMsg("上传失败!");
|
||||
String message = Strings.isBlank(e.getMessage()) ? e.getClass().getSimpleName() : e.getMessage();
|
||||
return Result.error("上传失败:" + message);
|
||||
}
|
||||
}
|
||||
|
||||
private Result checkActivityTime(String hdid) throws Exception {
|
||||
if (Strings.isBlank(hdid)) {
|
||||
return Result.error("上传失败:缺少活动信息,请重新进入活动页面提交!");
|
||||
}
|
||||
Hd_wm_xx hd = hdWmsbxxService.dao().fetch(Hd_wm_xx.class, hdid);
|
||||
if (hd == null) {
|
||||
return Result.error("上传失败:活动不存在,请刷新后重试!");
|
||||
}
|
||||
if (!Boolean.TRUE.equals(hd.getHdflag())) {
|
||||
return Result.error("上传失败:当前活动未开启!");
|
||||
}
|
||||
Date startTime = parseActivityTime(hd.getHdkssj());
|
||||
Date endTime = parseActivityTime(hd.getHdjssj());
|
||||
Date now = new Date();
|
||||
if (startTime == null || endTime == null || now.before(startTime) || now.after(endTime)) {
|
||||
return Result.error("上传失败:不在活动时间范围内!");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private Date parseActivityTime(String time) throws Exception {
|
||||
if (Strings.isBlank(time)) {
|
||||
return null;
|
||||
}
|
||||
String pattern = time.trim().length() <= 10 ? "yyyy-MM-dd" : "yyyy-MM-dd HH:mm:ss";
|
||||
SimpleDateFormat format = new SimpleDateFormat(pattern);
|
||||
format.setLenient(false);
|
||||
return format.parse(time.trim());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public class SickHelpMemberController {
|
||||
fundMember.setSex(user.getString("sex"));
|
||||
// fundMember.setIsMember(true);
|
||||
}
|
||||
fundMember.setIsMember(false);
|
||||
fundMember.setIsMember("是".equals(fundMember.getMember()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@@ -71,6 +71,12 @@ public class SickFundMember {
|
||||
@Excel(name = "是否会员", width = 20)
|
||||
private Boolean isMember;
|
||||
|
||||
@Column
|
||||
@Comment("是否会员(导入)")
|
||||
@ColDefine(type = ColType.VARCHAR)
|
||||
@Excel(name = "是否会员", width = 20)
|
||||
private String member;
|
||||
|
||||
@Column
|
||||
@Comment("出生日期")
|
||||
@ColDefine(type = ColType.VARCHAR, width = 20)
|
||||
|
||||
@@ -1,8 +1,53 @@
|
||||
package io.v.nutz.sys.services;
|
||||
|
||||
import cn.wizzer.framework.base.service.BaseService;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import io.v.nutz.web.controllers.platform.sys.club.ClubUserImportFeature;
|
||||
import io.v.nutz.sys.models.Sys_club_user;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public interface SysClubUserService extends BaseService<Sys_club_user> {
|
||||
/**
|
||||
* 批量导入协会成员。
|
||||
* 导入过程中按行校验并逐行入库,单行失败不会中断整批导入。
|
||||
*
|
||||
* @param file 导入文件
|
||||
* @return 导入结果统计及错误缓存标识
|
||||
*/
|
||||
NutMap importClubMembers(TempFile file);
|
||||
|
||||
/**
|
||||
* 根据缓存标识获取导入错误记录,用于前端下载错误信息表格。
|
||||
*
|
||||
* @param cacheKey 错误缓存标识
|
||||
* @return 错误记录列表
|
||||
*/
|
||||
List<ClubUserImportFeature.ErrorRow> getImportErrorList(String cacheKey);
|
||||
|
||||
/**
|
||||
* 查询指定协会已审核通过的正常成员,用于协会成员导出。
|
||||
*
|
||||
* @param clubid 协会id
|
||||
* @return 成员导出数据
|
||||
*/
|
||||
List<NutMap> listClubMembersForExport(String clubid, String searchName, String searchKeyword);
|
||||
|
||||
/**
|
||||
* 查询所有协会已审核通过的正常成员,用于校工会全量导出。
|
||||
*
|
||||
* @return 成员导出数据
|
||||
*/
|
||||
List<NutMap> listAllClubMembersForExport();
|
||||
|
||||
/**
|
||||
* 构建协会成员导出列,两个导出入口共用同一份字段定义。
|
||||
*
|
||||
* @param includeClubName 是否包含协会名称列
|
||||
* @return Excel导出列
|
||||
*/
|
||||
List<ExcelExportEntity> buildClubMemberExportEntities(boolean includeClubName);
|
||||
}
|
||||
|
||||
@@ -1,16 +1,304 @@
|
||||
package io.v.nutz.sys.services.impl;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.wizzer.framework.base.service.BaseServiceImpl;
|
||||
import io.v.nutz.base.utils.DateUtil;
|
||||
import io.v.nutz.sys.models.Sys_club;
|
||||
import io.v.nutz.sys.models.Sys_club_user;
|
||||
import io.v.nutz.sys.models.Sys_user;
|
||||
import io.v.nutz.sys.services.SysClubService;
|
||||
import io.v.nutz.sys.services.SysClubUserService;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
import io.v.nutz.web.controllers.platform.sys.club.ClubUserImportFeature;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@IocBean(args = {"refer:dao"})
|
||||
public class SysClubUserServiceImpl extends BaseServiceImpl<Sys_club_user> implements SysClubUserService {
|
||||
|
||||
@Inject
|
||||
private SysClubService sysClubService;
|
||||
|
||||
@Inject
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Inject
|
||||
private RedisService redisService;
|
||||
|
||||
public SysClubUserServiceImpl(Dao dao) {
|
||||
super(dao);
|
||||
}
|
||||
|
||||
@Override
|
||||
public NutMap importClubMembers(TempFile file) {
|
||||
List<ClubUserImportFeature.ImportRow> importRows = ExcelImportUtil.importExcel(file.getFile(),
|
||||
ClubUserImportFeature.ImportRow.class, new cn.afterturn.easypoi.excel.entity.ImportParams());
|
||||
List<ClubUserImportFeature.ErrorRow> errorRows = new ArrayList<>();
|
||||
|
||||
if (Lang.isEmpty(importRows)) {
|
||||
return NutMap.NEW().setv("totalCount", 0)
|
||||
.setv("successCount", 0)
|
||||
.setv("errorCount", 0)
|
||||
.setv("cacheKey", "");
|
||||
}
|
||||
|
||||
List<String> clubCodes = importRows.stream()
|
||||
.map(ClubUserImportFeature.ImportRow::getClubCode)
|
||||
.filter(Strings::isNotBlank)
|
||||
.map(String::trim)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
List<String> loginNames = importRows.stream()
|
||||
.map(ClubUserImportFeature.ImportRow::getLoginname)
|
||||
.filter(Strings::isNotBlank)
|
||||
.map(String::trim)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
Map<String, Sys_club> clubMap = Lang.isEmpty(clubCodes) ? Collections.emptyMap()
|
||||
: sysClubService.query(Cnd.where("code", "in", clubCodes)).stream()
|
||||
.collect(Collectors.toMap(v -> v.getCode().trim(), Function.identity(), (o1, o2) -> o1));
|
||||
Map<String, Sys_user> userMap = Lang.isEmpty(loginNames) ? Collections.emptyMap()
|
||||
: sysUserService.query(Cnd.where("loginname", "in", loginNames)).stream()
|
||||
.collect(Collectors.toMap(v -> v.getLoginname().trim(), Function.identity(), (o1, o2) -> o1));
|
||||
|
||||
List<String> clubIds = clubMap.values().stream().map(Sys_club::getId).collect(Collectors.toList());
|
||||
List<String> userIds = userMap.values().stream().map(Sys_user::getId).collect(Collectors.toList());
|
||||
Set<String> existsMemberKeys;
|
||||
if (Lang.isEmpty(clubIds) || Lang.isEmpty(userIds)) {
|
||||
existsMemberKeys = new HashSet<>();
|
||||
} else {
|
||||
existsMemberKeys = this.query(Cnd.where("clubid", "in", clubIds).and("userid", "in", userIds).and("isNormal", "=", true))
|
||||
.stream()
|
||||
.map(v -> v.getClubid() + "_" + v.getUserid())
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
Set<String> importMemberKeys = new HashSet<>();
|
||||
int successCount = 0;
|
||||
for (ClubUserImportFeature.ImportRow importRow : importRows) {
|
||||
ClubUserImportFeature.ErrorRow errorRow = buildErrorRow(importRow);
|
||||
try {
|
||||
String clubCode = Strings.sNull(importRow.getClubCode()).trim();
|
||||
String loginname = Strings.sNull(importRow.getLoginname()).trim();
|
||||
String username = Strings.sNull(importRow.getUsername()).trim();
|
||||
|
||||
if (Strings.isBlank(clubCode)) {
|
||||
errorRow.setErrorMessage("协会编码不能为空");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
if (Strings.isBlank(loginname)) {
|
||||
errorRow.setErrorMessage("工号不能为空");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
if (Strings.isBlank(username)) {
|
||||
errorRow.setErrorMessage("姓名不能为空");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
|
||||
Sys_club club = clubMap.get(clubCode);
|
||||
if (club == null) {
|
||||
errorRow.setErrorMessage("未找到对应的协会编码");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
|
||||
Sys_user user = userMap.get(loginname);
|
||||
if (user == null) {
|
||||
errorRow.setErrorMessage("未找到对应的工号用户");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
|
||||
String systemUsername = Strings.sNull(user.getUsername()).trim();
|
||||
if (!normalizeUsername(username).equals(normalizeUsername(systemUsername))) {
|
||||
errorRow.setErrorMessage("姓名与系统中的用户姓名不一致,导入姓名:" + username + ",系统姓名:" + systemUsername);
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
|
||||
String importKey = clubCode + "_" + loginname;
|
||||
if (!importMemberKeys.add(importKey)) {
|
||||
errorRow.setErrorMessage("导入文件中存在重复的协会编码和工号");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
|
||||
String dbKey = club.getId() + "_" + user.getId();
|
||||
if (existsMemberKeys.contains(dbKey)) {
|
||||
errorRow.setErrorMessage("该用户已存在于该协会成员表中");
|
||||
errorRows.add(errorRow);
|
||||
continue;
|
||||
}
|
||||
|
||||
// Only persist the current system's membership relation fields here.
|
||||
Sys_club_user clubUser = new Sys_club_user();
|
||||
clubUser.setClubid(club.getId());
|
||||
clubUser.setUserid(user.getId());
|
||||
clubUser.setJoin_time(DateUtil.getDateTime());
|
||||
clubUser.setSf(2);
|
||||
clubUser.setStatus(5);
|
||||
clubUser.setIsNormal(true);
|
||||
this.insert(clubUser);
|
||||
existsMemberKeys.add(dbKey);
|
||||
successCount++;
|
||||
} catch (Exception e) {
|
||||
errorRow.setErrorMessage(Strings.isBlank(e.getMessage()) ? "导入失败,请联系管理员处理" : e.getMessage());
|
||||
errorRows.add(errorRow);
|
||||
}
|
||||
}
|
||||
|
||||
String cacheKey = "";
|
||||
if (Lang.isNotEmpty(errorRows)) {
|
||||
cacheKey = R.UU32();
|
||||
redisService.setex(cacheKey, 60 * 60 * 5, Json.toJson(errorRows));
|
||||
}
|
||||
|
||||
return NutMap.NEW().setv("totalCount", importRows.size())
|
||||
.setv("successCount", successCount)
|
||||
.setv("errorCount", errorRows.size())
|
||||
.setv("cacheKey", cacheKey);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ClubUserImportFeature.ErrorRow> getImportErrorList(String cacheKey) {
|
||||
if (Strings.isBlank(cacheKey)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
String json = redisService.get(cacheKey);
|
||||
if (Strings.isBlank(json)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return Json.fromJsonAsList(ClubUserImportFeature.ErrorRow.class, json);
|
||||
}
|
||||
|
||||
/**
|
||||
* 姓名导入比对时去除空白并统一常见全角半角、点号差异,避免人工看起来一致但字符不同导致误判。
|
||||
*/
|
||||
private String normalizeUsername(String username) {
|
||||
return Convert.toDBC(Strings.sNull(username))
|
||||
.replaceAll("\\s+", "")
|
||||
.replace(" ", "")
|
||||
.replace("•", "·")
|
||||
.replace(".", "·")
|
||||
.replace(".", "·")
|
||||
.trim();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> listClubMembersForExport(String clubid, String searchName, String searchKeyword) {
|
||||
if (Strings.isBlank(clubid)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
Cnd cnd = Cnd.where("scu.clubid", "=", clubid);
|
||||
if (Strings.isNotBlank(searchName) && Strings.isNotBlank(searchKeyword)) {
|
||||
cnd.and(searchName, "like", "%" + searchKeyword + "%");
|
||||
}
|
||||
return listClubMembersForExportByCnd(cnd,
|
||||
"ORDER BY FIELD(scu.sf, 1, 3, 4, 5, 6, 2), u.loginname");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<NutMap> listAllClubMembersForExport() {
|
||||
return listClubMembersForExportByCnd(Cnd.NEW(),
|
||||
"ORDER BY club.name ASC, FIELD(scu.sf, 1, 3, 4, 5, 6, 2), u.loginname");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ExcelExportEntity> buildClubMemberExportEntities(boolean includeClubName) {
|
||||
List<ExcelExportEntity> exportEntities = new ArrayList<>();
|
||||
if (includeClubName) {
|
||||
exportEntities.add(new ExcelExportEntity("协会名称", "clubname", 25));
|
||||
}
|
||||
exportEntities.add(new ExcelExportEntity("工号", "loginname", 18));
|
||||
exportEntities.add(new ExcelExportEntity("姓名", "username", 18));
|
||||
exportEntities.add(new ExcelExportEntity("性别", "sex", 12));
|
||||
exportEntities.add(new ExcelExportEntity("电话", "mobile", 18));
|
||||
exportEntities.add(new ExcelExportEntity("所属单位", "unitname", 25));
|
||||
exportEntities.add(new ExcelExportEntity("身份", "sfName", 15));
|
||||
exportEntities.add(new ExcelExportEntity("入会时间", "joinTime", 18));
|
||||
exportEntities.add(new ExcelExportEntity("申请状态", "statusName", 18));
|
||||
return exportEntities;
|
||||
}
|
||||
|
||||
/**
|
||||
* 按导出字段查询成员,并把身份、入会时间转换成页面和Excel需要的文本。
|
||||
*/
|
||||
private List<NutMap> listClubMembersForExportByCnd(Cnd cnd, String orderBy) {
|
||||
Sql sql = org.nutz.dao.Sqls.create("SELECT\n" +
|
||||
"\tclub.name clubname,\n" +
|
||||
"\tu.loginname,\n" +
|
||||
"\tu.username,\n" +
|
||||
"\tu.sex,\n" +
|
||||
"\tu.mobile,\n" +
|
||||
"\tunit.name unitname,\n" +
|
||||
"\tCASE scu.sf\n" +
|
||||
"\t\tWHEN 1 THEN '会长'\n" +
|
||||
"\t\tWHEN 3 THEN '副会长'\n" +
|
||||
"\t\tWHEN 4 THEN '秘书长'\n" +
|
||||
"\t\tWHEN 5 THEN '副秘书长'\n" +
|
||||
"\t\tWHEN 6 THEN '经办人'\n" +
|
||||
"\t\tELSE '会员'\n" +
|
||||
"\tEND sfName,\n" +
|
||||
"\tCASE WHEN scu.join_time IS NULL OR scu.join_time = '' THEN '' ELSE LEFT(scu.join_time, 10) END joinTime,\n" +
|
||||
"\tCASE scu.status\n" +
|
||||
"\t\tWHEN 1 THEN '待协会审核'\n" +
|
||||
"\t\tWHEN 2 THEN '协会拒绝'\n" +
|
||||
"\t\tWHEN 3 THEN '待校工会审核'\n" +
|
||||
"\t\tWHEN 4 THEN '校工会拒绝'\n" +
|
||||
"\t\tWHEN 5 THEN '审核通过'\n" +
|
||||
"\t\tELSE ''\n" +
|
||||
"\tEND statusName\n" +
|
||||
"FROM sys_club_user scu\n" +
|
||||
"LEFT JOIN sys_club club ON scu.clubid = club.id\n" +
|
||||
"LEFT JOIN sys_user u ON scu.userid = u.id\n" +
|
||||
"LEFT JOIN sys_unit unit ON u.unitid = unit.id\n" +
|
||||
"$condition " + orderBy);
|
||||
cnd.and("scu.isNormal", "=", true);
|
||||
cnd.and("scu.status", "in", new int[]{1, 3, 5});
|
||||
cnd.and("u.username", "is not", null);
|
||||
sql.setCondition(cnd);
|
||||
sql.setCallback(org.nutz.dao.Sqls.callback.maps());
|
||||
this.dao().execute(sql);
|
||||
List<NutMap> list = sql.getList(NutMap.class);
|
||||
return list == null ? Collections.emptyList() : list;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build one exportable error row from the original import row.
|
||||
*/
|
||||
private ClubUserImportFeature.ErrorRow buildErrorRow(ClubUserImportFeature.ImportRow importRow) {
|
||||
ClubUserImportFeature.ErrorRow errorRow = new ClubUserImportFeature.ErrorRow();
|
||||
errorRow.setIndex(importRow.getIndex());
|
||||
errorRow.setClubCode(importRow.getClubCode());
|
||||
errorRow.setLoginname(importRow.getLoginname());
|
||||
errorRow.setUsername(importRow.getUsername());
|
||||
return errorRow;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import io.v.nutz.util.ViResource;
|
||||
import org.nutz.dao.Cnd;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.cri.Static;
|
||||
import org.nutz.dao.util.cri.SqlExpressionGroup;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
@@ -374,9 +375,9 @@ public class ViCommonCon {
|
||||
sys_club club
|
||||
LEFT JOIN `sys_user_role` role ON club.id = role.stid
|
||||
$condition
|
||||
""");
|
||||
""");
|
||||
if (!ShiroUtil.hasRole("sysadmin")) {
|
||||
cnd.and("role.roleId", "=", Roles.CLUB_FZR);
|
||||
cnd.and(new Static("role.roleId IN (SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR + "' OR code = '" + Roles.CLUB_JBR_CODE + "')"));
|
||||
cnd.and("role.userId", "=", ShiroUtil.getUserId());
|
||||
}
|
||||
cnd.and("club.isjs", "=", false);
|
||||
|
||||
@@ -218,4 +218,4 @@ public class NutShiroProcessor extends AbstractProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,30 @@
|
||||
package io.v.nutz.web.controllers.platform.sys.club;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.wizzer.framework.base.Result;
|
||||
import io.v.nutz.annontation.ViReturn;
|
||||
import io.v.nutz.sys.services.SysClubService;
|
||||
import io.v.nutz.sys.services.SysClubUserService;
|
||||
import io.v.nutz.util.ViTool;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.lang.Strings;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
import org.nutz.mvc.annotation.AdaptBy;
|
||||
import org.nutz.mvc.annotation.Param;
|
||||
import org.nutz.mvc.upload.TempFile;
|
||||
import org.nutz.mvc.upload.UploadAdaptor;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
/**
|
||||
* @Author JyuHsin
|
||||
@@ -22,9 +40,67 @@ public class ClubInController {
|
||||
@Inject
|
||||
private SysClubService sysClubService;
|
||||
|
||||
@Inject
|
||||
private SysClubUserService sysClubUserService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/sys/club/clubIn.html")
|
||||
@RequiresPermissions("sys.club.clubIn")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("sys.club.clubIn")
|
||||
public void downloadImportTemplate(HttpServletResponse response) throws IOException {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ClubUserImportFeature.ImportRow.class, Collections.emptyList());
|
||||
ViTool.excelResponse(response, "协会成员导入模板.xlsx");
|
||||
workbook.write(response.getOutputStream());
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
@AdaptBy(type = UploadAdaptor.class, args = {"ioc:fileUpload"})
|
||||
@RequiresPermissions("sys.club.clubIn")
|
||||
public Object doImportMember(@Param("file") TempFile file) {
|
||||
if (file == null) {
|
||||
return Result.error("请先选择导入文件");
|
||||
}
|
||||
try {
|
||||
return Result.success(sysClubUserService.importClubMembers(file));
|
||||
} catch (Exception e) {
|
||||
return Result.error(Strings.isBlank(e.getMessage()) ? "导入失败" : e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("sys.club.clubIn")
|
||||
public void exportImportErrors(HttpServletResponse response, String cacheKey) throws IOException {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, ClubUserImportFeature.ErrorRow.class,
|
||||
sysClubUserService.getImportErrorList(cacheKey));
|
||||
ViTool.excelResponse(response, "协会成员导入错误信息.xlsx");
|
||||
workbook.write(response.getOutputStream());
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出当前协会已通过成员,字段与成员列表保持一致但不包含申请状态。
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("sys.club.clubIn")
|
||||
public void exportClubMembers(HttpServletResponse response, String clubid, String searchName, String searchKeyword) throws IOException {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams,
|
||||
sysClubUserService.buildClubMemberExportEntities(false),
|
||||
new ArrayList<>(sysClubUserService.listClubMembersForExport(clubid, searchName, searchKeyword)));
|
||||
ViTool.excelResponse(response, "协会成员信息.xlsx");
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
package io.v.nutz.web.controllers.platform.sys.club;
|
||||
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 协会成员导入相关的 Excel 数据结构。
|
||||
*/
|
||||
public interface ClubUserImportFeature {
|
||||
|
||||
/**
|
||||
* 导入模板行。
|
||||
*/
|
||||
@Data
|
||||
class ImportRow {
|
||||
@Excel(name = "序号", width = 12)
|
||||
private String index;
|
||||
|
||||
@Excel(name = "协会编码", width = 20)
|
||||
private String clubCode;
|
||||
|
||||
@Excel(name = "工号", width = 20)
|
||||
private String loginname;
|
||||
|
||||
@Excel(name = "姓名", width = 20)
|
||||
private String username;
|
||||
}
|
||||
|
||||
/**
|
||||
* 导入失败记录行。
|
||||
*/
|
||||
@Data
|
||||
class ErrorRow {
|
||||
@Excel(name = "序号", width = 12)
|
||||
private String index;
|
||||
|
||||
@Excel(name = "协会编码", width = 20)
|
||||
private String clubCode;
|
||||
|
||||
@Excel(name = "工号", width = 20)
|
||||
private String loginname;
|
||||
|
||||
@Excel(name = "姓名", width = 20)
|
||||
private String username;
|
||||
|
||||
@Excel(name = "错误信息", width = 40)
|
||||
private String errorMessage;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,22 @@
|
||||
package io.v.nutz.web.controllers.platform.sys.club;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import io.v.nutz.sys.services.SysClubUserService;
|
||||
import io.v.nutz.util.ViTool;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.shiro.authz.annotation.RequiresAuthentication;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.mvc.annotation.At;
|
||||
import org.nutz.mvc.annotation.Ok;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @Author JyuHsin
|
||||
* @Date 2022/4/14
|
||||
@@ -17,9 +28,29 @@ import org.nutz.mvc.annotation.Ok;
|
||||
@Ok("json")
|
||||
public class SchoolInController {
|
||||
|
||||
@Inject
|
||||
private SysClubUserService sysClubUserService;
|
||||
|
||||
@At("")
|
||||
@Ok("beetl:/platform/sys/club/schoolIn.html")
|
||||
@RequiresPermissions("sys.club.schoolIn")
|
||||
public void index() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出所有协会已通过成员,包含协会名称并按协会名称、身份排序。
|
||||
*/
|
||||
@At
|
||||
@Ok("void")
|
||||
@RequiresPermissions("sys.club.schoolIn")
|
||||
public void exportAllClubMembers(HttpServletResponse response) throws IOException {
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
Workbook workbook = ExcelExportUtil.exportExcel(exportParams,
|
||||
sysClubUserService.buildClubMemberExportEntities(true),
|
||||
new ArrayList<>(sysClubUserService.listAllClubMembersForExport()));
|
||||
ViTool.excelResponse(response, "协会成员信息汇总.xlsx");
|
||||
workbook.write(response.getOutputStream());
|
||||
workbook.close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -72,12 +72,16 @@ public class SysClubCon {
|
||||
@At
|
||||
@ViReturn
|
||||
public Object updateSf(String userid, Integer sf, String clubId) {
|
||||
sysClubUserService.update(Chain.make("sf", sf), Cnd.where("userid", "=", userid));
|
||||
sysUserRoleService.clear(Cnd.where("userid", "=", userid).and("roleid", "=", Roles.CLUB_FZR));
|
||||
if (sf == 1 || sf == 3 || sf == 4 || sf == 5) {
|
||||
sysClubUserService.update(Chain.make("sf", sf), Cnd.where("userid", "=", userid).and("clubid", "=", clubId));
|
||||
clearClubManageRole(userid, clubId);
|
||||
if (sf == 1 || sf == 3 || sf == 4 || sf == 5 || sf == 6) {
|
||||
String roleId = sf == 6 ? getClubJbrRoleId() : Roles.CLUB_FZR;
|
||||
if (Strings.isBlank(roleId)) {
|
||||
return Result.error("未找到协会经办人角色");
|
||||
}
|
||||
Sys_user_role sys_user_role = new Sys_user_role();
|
||||
sys_user_role.setUserId(userid);
|
||||
sys_user_role.setRoleId(Roles.CLUB_FZR);
|
||||
sys_user_role.setRoleId(roleId);
|
||||
sys_user_role.setStid(clubId);
|
||||
sysUserRoleService.insert(sys_user_role);
|
||||
}
|
||||
@@ -204,7 +208,7 @@ public class SysClubCon {
|
||||
|
||||
if (ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) {
|
||||
} else {
|
||||
cnd.and("club.fzr", "=", ShiroUtil.getPrincipalProperty("id"));
|
||||
cnd.and(new Static("(club.fzr = '" + ShiroUtil.getPrincipalProperty("id") + "' OR " + getClubManageRoleCnd("club.id") + ")"));
|
||||
}
|
||||
|
||||
|
||||
@@ -248,7 +252,7 @@ public class SysClubCon {
|
||||
"\tLEFT JOIN sys_user u ON scu.userid = u.id\n" +
|
||||
"\tLEFT JOIN sys_unit unit ON u.unitid = unit.id\n" +
|
||||
"\tWHERE scu.clubid = @clubid and scu.status = 5\n" +
|
||||
"\tORDER BY FIELD( scu.sf, 1, 3,4,5, 2 ),scu.join_time DESC").setParam("clubid", id)));
|
||||
"\tORDER BY FIELD( scu.sf, 1, 3,4,5,6, 2 ),scu.join_time DESC").setParam("clubid", id)));
|
||||
record.set("files", baseService.dao().query("sys_file", Cnd.where("reid", "=", id)));
|
||||
return record;
|
||||
}
|
||||
@@ -284,6 +288,18 @@ public class SysClubCon {
|
||||
}
|
||||
}
|
||||
|
||||
private String getClubJbrRoleId() {
|
||||
Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", Roles.CLUB_JBR_CODE));
|
||||
return role == null ? "" : role.getId();
|
||||
}
|
||||
|
||||
private void clearClubManageRole(String userId, String clubId) {
|
||||
sysUserRoleService.clear(Cnd.where("userid", "=", userId)
|
||||
.and("stid", "=", clubId)
|
||||
.and(new Static("roleid IN (SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR
|
||||
+ "' OR code = '" + Roles.CLUB_JBR_CODE + "')")));
|
||||
}
|
||||
|
||||
@At
|
||||
@ViReturn
|
||||
public Object dissolve(String id, Boolean isjs) {
|
||||
@@ -314,7 +330,7 @@ public class SysClubCon {
|
||||
record.set("child", sysClubService.query(Cnd.NEW().asc("code")));
|
||||
} else {
|
||||
Cnd cnd = Cnd.NEW();
|
||||
cnd.and(new Static("id in (select stid from sys_user_role where userId = '" + ShiroUtil.getPrincipalProperty("id") + "' and roleid = '" + Roles.CLUB_FZR + "')"));
|
||||
cnd.and(new Static(getClubManageRoleCnd("id")));
|
||||
record.set("child", sysClubService.query(cnd));
|
||||
}
|
||||
|
||||
@@ -325,4 +341,12 @@ public class SysClubCon {
|
||||
return Result.error("获取工会信息失败");
|
||||
}
|
||||
}
|
||||
|
||||
// 协会社团管理角色范围:会长和经办人都可以进入对应协会数据。
|
||||
private String getClubManageRoleCnd(String clubIdColumn) {
|
||||
return clubIdColumn + " IN ( SELECT stid FROM sys_user_role WHERE userId = '"
|
||||
+ ShiroUtil.getPrincipalProperty("id")
|
||||
+ "' AND stid IS NOT NULL AND roleid IN (SELECT id FROM sys_role WHERE id = '"
|
||||
+ Roles.CLUB_FZR + "' OR code = '" + Roles.CLUB_JBR_CODE + "') )";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,13 @@ public class SysClubUserCon {
|
||||
if (ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) {
|
||||
return sysClubService.query(Cnd.where("isjs", "=", false).asc("create_time"));
|
||||
}
|
||||
return sysClubService.query(Cnd.where("fzr", "=", ShiroUtil.getPrincipalProperty("id")).and("isjs", "=", false).asc("create_time"));
|
||||
return sysClubService.query(Cnd.where("isjs", "=", false)
|
||||
.and(new org.nutz.dao.util.cri.Static("(fzr = '" + ShiroUtil.getPrincipalProperty("id")
|
||||
+ "' OR id IN (SELECT stid FROM sys_user_role WHERE userid = '"
|
||||
+ ShiroUtil.getPrincipalProperty("id")
|
||||
+ "' AND roleid IN (SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR
|
||||
+ "' OR code = '" + Roles.CLUB_JBR_CODE + "')))"))
|
||||
.asc("create_time"));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,7 +84,7 @@ public class SysClubUserCon {
|
||||
if (Strings.isBlank(clubid)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
String orderStr = " ORDER BY FIELD( sf, 1, 3,4,5, 2 ),scu.join_time DESC";
|
||||
String orderStr = " ORDER BY FIELD( sf, 1, 3,4,5,6, 2 ),scu.join_time DESC";
|
||||
if (type == 2 && radioType == 2) {
|
||||
orderStr = " order by field(status, 1, 3, 5),scu.join_time DESC";
|
||||
} else if (type == 3 && radioType == 2) {
|
||||
@@ -109,7 +115,7 @@ public class SysClubUserCon {
|
||||
|
||||
//查询理事机构
|
||||
if (radioType != null && 1 == radioType) {
|
||||
cnd.and("scu.sf", "=", "1");
|
||||
cnd.and("scu.sf", "in", new int[]{1, 3, 4, 5, 6});
|
||||
}
|
||||
//查询社团成员
|
||||
if (radioType != null && 2 == radioType) {
|
||||
@@ -133,8 +139,10 @@ public class SysClubUserCon {
|
||||
public Object delUser(String clubid, String userid) {
|
||||
sysClubUserService.clear(Cnd.where("clubid", "=", clubid).and("userid", "=", userid));
|
||||
//删除协会负责人的角色
|
||||
sysUserRoleService.clear(Cnd.NEW().and("userId", "=", ShiroUtil.getPrincipalProperty("id"))
|
||||
.and("roleId", "=", Roles.CLUB_FZR).and("stid", "=", clubid));
|
||||
sysUserRoleService.clear(Cnd.NEW().and("userId", "=", userid)
|
||||
.and("stid", "=", clubid)
|
||||
.and(new org.nutz.dao.util.cri.Static("roleId IN (SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR
|
||||
+ "' OR code = '" + Roles.CLUB_JBR_CODE + "')")));
|
||||
sysRoleService.clearCache();
|
||||
sysUserService.clearCache();
|
||||
return null;
|
||||
@@ -149,7 +157,31 @@ public class SysClubUserCon {
|
||||
"\tsys_user u\n" +
|
||||
"\tLEFT JOIN sys_unit unit ON u.unitid = unit.id\n" +
|
||||
"\tLEFT JOIN sys_union un ON unit.unionid = un.id\n" +
|
||||
"\tWHERE (u.username LIKE @query or u.loginname like @query) and u.id not in (SELECT userid from sys_club_user WHERE clubid = @clubid) LIMIT 50").setParam("query", "%" + query + "%").setParam("clubid", clubid);
|
||||
"\tWHERE (u.username LIKE @query or u.loginname like @query) and u.id not in (SELECT userid from sys_club_user WHERE clubid = @clubid and isNormal = true) LIMIT 50").setParam("query", "%" + query + "%").setParam("clubid", clubid);
|
||||
return sysClubService.list(sql);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置理事机构时,只允许从当前协会已通过的普通成员中选择,避免把协会外人员设为理事机构。
|
||||
*/
|
||||
@At
|
||||
@ViReturn
|
||||
public Object queryClubMemberForManage(String clubid, String query) {
|
||||
if (Strings.isBlank(clubid)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
Sql sql = Sqls.create("SELECT\n" +
|
||||
"\tu.id,u.username,unit.name as unitname,u.loginname \n" +
|
||||
"FROM\n" +
|
||||
"\tsys_club_user scu\n" +
|
||||
"\tLEFT JOIN sys_user u ON scu.userid = u.id\n" +
|
||||
"\tLEFT JOIN sys_unit unit ON u.unitid = unit.id\n" +
|
||||
"\tWHERE scu.clubid = @clubid\n" +
|
||||
"\tAND scu.isNormal = 1\n" +
|
||||
"\tAND scu.status = 5\n" +
|
||||
"\tAND scu.sf = 2\n" +
|
||||
"\tAND (u.username LIKE @query or u.loginname like @query)\n" +
|
||||
"\tLIMIT 50").setParam("query", "%" + query + "%").setParam("clubid", clubid);
|
||||
return sysClubService.list(sql);
|
||||
}
|
||||
|
||||
@@ -160,13 +192,44 @@ public class SysClubUserCon {
|
||||
//type=1协会信息管理菜单,操作为录入理事机构,此时状态直接为通过5
|
||||
//type=2社团录入菜单,操作为录入成员,此时需要校工会审核,状态为3
|
||||
//type=3校工会录入菜单,操作为录入成员,此时状态直接为通过5
|
||||
int status = type == 1 || type == 3 ? 5 : 3;
|
||||
int status = 5;
|
||||
|
||||
for (String user : users) {
|
||||
if (type != null && type == 1) {
|
||||
Sys_club_user sysClubUser = sysClubUserService.fetch(Cnd.where("clubid", "=", clubid)
|
||||
.and("userid", "=", user)
|
||||
.and("isNormal", "=", true)
|
||||
.and("status", "=", 5));
|
||||
if (sysClubUser == null) {
|
||||
return cn.wizzer.framework.base.Result.error("只能从本协会已通过成员中设置理事机构");
|
||||
}
|
||||
clearClubManageRole(user, clubid);
|
||||
if (sf != 2) {
|
||||
String roleId = sf == 6 ? getClubJbrRoleId() : Roles.CLUB_FZR;
|
||||
if (Strings.isBlank(roleId)) {
|
||||
return cn.wizzer.framework.base.Result.error("未找到协会经办人角色");
|
||||
}
|
||||
Sys_user_role sys_user_role = new Sys_user_role();
|
||||
sys_user_role.setUserId(user);
|
||||
sys_user_role.setRoleId(roleId);
|
||||
sys_user_role.setStid(clubid);
|
||||
sysUserRoleService.insert(sys_user_role);
|
||||
sysUserService.clearCache();
|
||||
sysRoleService.clearCache();
|
||||
}
|
||||
// 设置理事机构是调整本协会已有成员身份,不新增成员记录,避免出现重复协会成员。
|
||||
sysClubUserService.update(Chain.make("sf", sf), Cnd.where("id", "=", sysClubUser.getId()));
|
||||
continue;
|
||||
}
|
||||
|
||||
if (sf != 2) {
|
||||
String roleId = sf == 6 ? getClubJbrRoleId() : Roles.CLUB_FZR;
|
||||
if (Strings.isBlank(roleId)) {
|
||||
return cn.wizzer.framework.base.Result.error("未找到协会经办人角色");
|
||||
}
|
||||
Sys_user_role sys_user_role = new Sys_user_role();
|
||||
sys_user_role.setUserId(user);
|
||||
sys_user_role.setRoleId(Roles.CLUB_FZR);
|
||||
sys_user_role.setRoleId(roleId);
|
||||
sys_user_role.setStid(clubid);
|
||||
sysUserRoleService.insert(sys_user_role);
|
||||
sysUserService.clearCache();
|
||||
@@ -180,9 +243,22 @@ public class SysClubUserCon {
|
||||
sys_club_user.setJoin_time(DateUtil.getDate());
|
||||
sys_club_user.setSf(sf);
|
||||
sys_club_user.setStatus(status);
|
||||
sys_club_user.setIsNormal(true);
|
||||
sysClubUserService.insert(sys_club_user);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private String getClubJbrRoleId() {
|
||||
io.v.nutz.sys.models.Sys_role role = sysRoleService.fetch(Cnd.where("code", "=", Roles.CLUB_JBR_CODE));
|
||||
return role == null ? "" : role.getId();
|
||||
}
|
||||
|
||||
private void clearClubManageRole(String userid, String clubid) {
|
||||
sysUserRoleService.clear(Cnd.NEW().and("userId", "=", userid)
|
||||
.and("stid", "=", clubid)
|
||||
.and(new org.nutz.dao.util.cri.Static("roleId IN (SELECT id FROM sys_role WHERE id = '" + Roles.CLUB_FZR
|
||||
+ "' OR code = '" + Roles.CLUB_JBR_CODE + "')")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,13 +121,11 @@ public class SysClubUserShCon {
|
||||
|
||||
cnd.and("sf", "=", 2);
|
||||
cnd.and("isNormal", "=", true);
|
||||
cnd.andEX("scu.clubid", "=", clubid);
|
||||
cnd.andEX("scu.clubid", "=", clubid);
|
||||
|
||||
if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) {
|
||||
if (ShiroUtil.hasAnyRoles("club01, club02, club03, club04, H02")) {
|
||||
cnd.and(new Static("""
|
||||
scu.clubid IN ( SELECT stid FROM sys_user_role WHERE roleid = '%s' AND userid = '%s' AND stid IS NOT NULL )
|
||||
""".formatted(Roles.CLUB_FZR, ShiroUtil.getPrincipalProperty("id"))));
|
||||
if (ShiroUtil.hasAnyRoles("club01, club02, club03, club04, H02, xhjbr")) {
|
||||
cnd.and(new Static(getClubAuditRoleCnd("scu.clubid")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,9 +162,11 @@ public class SysClubUserShCon {
|
||||
auditList.add(NutMap.NEW().addv("auditUser", ShiroUtil.getPrincipalProperty("id")).addv("auditState", flag)
|
||||
.addv("auditTime", DateUtil.getDateTime()).addv("auditType", type == 1 ? "club" : "school"));
|
||||
if(applyType == 1) {
|
||||
sysClubUserService.update(Chain.make("status", status)
|
||||
.add("join_time", cn.hutool.core.date.DateUtil.now())
|
||||
.add("auditList", auditList), cnd);
|
||||
Chain statusChain = Chain.make("status", status).add("auditList", auditList);
|
||||
if (flag) {
|
||||
statusChain.add("join_time", DateUtil.getDate());
|
||||
}
|
||||
sysClubUserService.update(statusChain, cnd);
|
||||
} else {
|
||||
Chain exitStatus = Chain.make("exitStatus", status).add("exitAuditList", auditList);
|
||||
if(status == 5) {
|
||||
@@ -205,7 +205,7 @@ public class SysClubUserShCon {
|
||||
cnd.and("isjs", "=", false);
|
||||
|
||||
if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) {
|
||||
cnd.and("club.fzr", "=", ShiroUtil.getPrincipalProperty("id"));
|
||||
cnd.and(new Static("(club.fzr = '" + ShiroUtil.getPrincipalProperty("id") + "' OR " + getClubAuditRoleCnd("club.id") + ")"));
|
||||
}
|
||||
if (StrUtil.isNotBlank(clubType)) {
|
||||
cnd.and("club.type", "=", clubType);
|
||||
@@ -263,10 +263,8 @@ public class SysClubUserShCon {
|
||||
cnd.andEX("scu.clubid", "=", id);
|
||||
|
||||
if (!ShiroUtil.hasAnyRoles(new String[]{"sysadmin", "A06"})) {
|
||||
if (ShiroUtil.hasRole("H02")) {
|
||||
cnd.and(new Static("""
|
||||
scu.clubid IN ( SELECT stid FROM sys_user_role WHERE roleid = '%s' AND userid = '%s' AND stid IS NOT NULL )
|
||||
""".formatted(Roles.CLUB_FZR, ShiroUtil.getPrincipalProperty("id"))));
|
||||
if (ShiroUtil.hasAnyRoles("H02, xhjbr, club01, club02, club03, club04")) {
|
||||
cnd.and(new Static(getClubAuditRoleCnd("scu.clubid")));
|
||||
}
|
||||
}
|
||||
sql.setCondition(cnd);
|
||||
@@ -289,4 +287,11 @@ public class SysClubUserShCon {
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
private String getClubAuditRoleCnd(String clubIdColumn) {
|
||||
return clubIdColumn + " IN ( SELECT stid FROM sys_user_role WHERE userid = '"
|
||||
+ ShiroUtil.getPrincipalProperty("id")
|
||||
+ "' AND stid IS NOT NULL AND roleid IN (SELECT id FROM sys_role WHERE id = '"
|
||||
+ Roles.CLUB_FZR + "' OR code = '" + Roles.CLUB_JBR_CODE + "') )";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
nutz.application.name=union_hhu
|
||||
server.port=8081
|
||||
server.port=8080
|
||||
server.host=0.0.0.0
|
||||
jetty.contextPath=/
|
||||
jetty.threadpool.idleTimeout=100000
|
||||
jetty.threadpool.minThreads=10
|
||||
jetty.threadpool.maxThreads=20000
|
||||
jetty.page.403=/error/403.htmla
|
||||
jetty.page.403=/error/403.html
|
||||
jetty.page.404=/error/404.html
|
||||
jetty.page.500=/error/500.html
|
||||
#结合ftp使用,或用nginx代理ftp路径
|
||||
jetty.staticPath=D://files
|
||||
jetty.staticPath=D://filesu
|
||||
#开发模式静态资源
|
||||
jetty.staticPathLocal=
|
||||
jetty.staticPathLocal=D:/gsProject/zhgh_hhu/src/main/resources/static
|
||||
nutz.mvc.ignore=^(.+[.])(jsp|png|gif|jpg|js|css|jpeg|html|mp3|mp4|ico|svg)$
|
||||
nutz.mvc.exclusions=/favicon/*,/assets/*,/druid/*,/upload/*
|
||||
ftp.enabled=true
|
||||
ftp.host=202.119.115.17
|
||||
ftp.port=21
|
||||
ftp.username=ftp_user
|
||||
ftp.password=zhgh@17server
|
||||
ftp.host=192.168.21.203
|
||||
ftp.port=9090
|
||||
ftp.username=ftpuser
|
||||
ftp.password=123456
|
||||
ftp.timeout=100
|
||||
redis.host=202.119.115.17
|
||||
redis.host=127.0.0.1
|
||||
redis.port=6379
|
||||
redis.timeout=2000
|
||||
redis.max_redir=10
|
||||
@@ -29,14 +29,14 @@ redis.maxTotal=850
|
||||
redis.pool.maxTotal=900
|
||||
redis.pool.maxIdle=500
|
||||
redis.pool.minIdle=50
|
||||
redis.password=dd3s
|
||||
#redis.password=dd3s
|
||||
#redis集群模式设置
|
||||
#redis.mode=cluster
|
||||
redis.mode=normal
|
||||
#redis.nodes=192.168.6.31:6377,192.168.6.31:6378,192.168.6.28:6377,192.168.6.28:6378,192.168.6.34:6377,192.168.6.34:6378
|
||||
jdbc.url=jdbc:mysql://202.119.115.17:3306/union?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
jdbc.url=jdbc:mysql://192.168.21.215:3306/union_hhu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
jdbc.username=root
|
||||
jdbc.password=zhgh@17server
|
||||
jdbc.password=root
|
||||
jdbc.validationQuery=select 1
|
||||
jdbc.maxActive=900
|
||||
jdbc.testWhileIdle=true
|
||||
@@ -57,7 +57,7 @@ xsssql.ignore.urls=/platform/cms/content/article/addDo,/platform/sys/app/conf/ad
|
||||
/platform/reimbursement/applyNew/doAdd,/platform/member/common/saveUser,\
|
||||
/platform/sys/union/mange/unionPageData,/platform/fw/condolence/apply/doAdd
|
||||
#环境 dev/prod
|
||||
v.environment=prod
|
||||
v.environment=dev
|
||||
v.loginUrl=/sso/login
|
||||
v.loginUrlMobile=/mobile/cas/login
|
||||
#shiro.ini.path=shiro.ini
|
||||
@@ -86,7 +86,7 @@ shiro.url.login=/platform
|
||||
shiro.url.logout_redirect=/platform
|
||||
shiro.url.unauth=/platform
|
||||
#开发时设置本地路径,便于调试
|
||||
beetl.RESOURCE.rootLocal=
|
||||
beetl.RESOURCE.rootLocal=D:/gsProject/zhgh_hhu/src/main/resources/views/
|
||||
beetl.RESOURCE.root=views/
|
||||
beetl.DELIMITER_STATEMENT_START=<!--#
|
||||
beetl.DELIMITER_STATEMENT_END=#-->
|
||||
|
||||
@@ -38,11 +38,11 @@ layout("/mobile/platform.html"){
|
||||
v-model="mLoading">
|
||||
|
||||
<div @click.stop="openView(o)" class="list-card" v-for="o in tableData">
|
||||
<van-swipe-cell :disabled="o.auditstate!=='3999'">
|
||||
<van-swipe-cell :disabled="!isActivityTime(o)">
|
||||
<van-cell-group inset>
|
||||
<image @click.stop="openEdit(o.id,o.hdid)" class="register-icon"
|
||||
src="/assets/mobile/svg/wmhd/bianji.svg"
|
||||
v-if="o.auditstate==='3999'||o.auditstate==='4100'||o.auditstate==='4250'"></image>
|
||||
v-if="isActivityTime(o)"></image>
|
||||
<van-cell :border="false" title="姓名">{{o.sbrname}}</van-cell>
|
||||
<van-cell :border="false" title="工号">{{o.loginname}}</van-cell>
|
||||
<van-cell :border="false" title="单位">{{o.dwname}}</van-cell>
|
||||
@@ -60,7 +60,7 @@ layout("/mobile/platform.html"){
|
||||
</van-cell>-->
|
||||
</van-cell-group>
|
||||
<template #right>
|
||||
<van-button @click="doDelete(o.id)" square style="height: 100%;" text="删除"
|
||||
<van-button @click="doDelete(o)" square style="height: 100%;" text="删除"
|
||||
type="danger"></van-button>
|
||||
</template>
|
||||
</van-swipe-cell>
|
||||
@@ -116,19 +116,34 @@ layout("/mobile/platform.html"){
|
||||
'mobile-wmhd-info': httpVueLoader('/components/mobile/wmhd/info.vue?v=' + new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
isActivityTime(o) {
|
||||
if (!o || !o.hdflag || !o.hdkssj || !o.hdjssj) {
|
||||
return false
|
||||
}
|
||||
const startTime = new Date(o.hdkssj.replace(/-/g, '/')).getTime()
|
||||
const endTime = new Date(o.hdjssj.replace(/-/g, '/')).getTime()
|
||||
const nowTime = new Date().getTime()
|
||||
return startTime <= nowTime && nowTime <= endTime
|
||||
},
|
||||
openEdit(id, hdid) {
|
||||
window.location.href = '/platform/staffActivities?client=mobile&id=' + hdid + '&zpid=' + id
|
||||
},
|
||||
async doDelete(id) {
|
||||
async doDelete(o) {
|
||||
if (!this.isActivityTime(o)) {
|
||||
vant.Toast('不在活动时间范围内,不能删除')
|
||||
return
|
||||
}
|
||||
const confirm = await vant.Dialog.confirm({
|
||||
title: '提示',
|
||||
message: '确定要删除此次作品吗?',
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const data = await $.post("/platform/hd/wmhd/dodelete", {id: id})
|
||||
const data = await $.post("/platform/hd/wmhd/dodelete", {id: o.id})
|
||||
if (data.code == 0) {
|
||||
await this.yearChange()
|
||||
vant.Toast.success('删除成功');
|
||||
} else {
|
||||
vant.Toast(data.msg || '删除失败')
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -0,0 +1,311 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.formData .viewFile {
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
type="year" v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select clearable placeholder="查询类型"
|
||||
slot="prepend"
|
||||
style="width: 100px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="userName"></el-option>
|
||||
<el-option label="工号" value="loginName"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">摘要:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.notes" placeholder="请输入摘要" clearable>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属协会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属协会" v-model="pageForm.clubId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in clubs" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="预审列表">
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.auditState" @change="doSearch" size="small">
|
||||
<el-radio-button :label="0">全部</el-radio-button>
|
||||
<el-radio-button :label="1">已审核</el-radio-button>
|
||||
<el-radio-button :label="2">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop==='auditState'">
|
||||
<el-tag v-if="row.auditState===0" type="info">保存中</el-tag>
|
||||
<el-tag v-if="row.auditState===1" type="info">待审核</el-tag>
|
||||
<el-tag v-else-if="row.auditState===2" type="danger">退回修改</el-tag>
|
||||
<el-tag v-else-if="row.auditState===3" type="danger">退回修改并结束</el-tag>
|
||||
<el-tag v-else-if="row.auditState===4" type="success">已通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="300">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" type="primary" size="mini">查看
|
||||
</el-button>
|
||||
<el-button @click="openAudit(row)" type="primary" size="mini"
|
||||
:disabled="![1].includes(row.auditState)">审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="dialogVisible"
|
||||
width="40%"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<info ref="auditInfo">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="opinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">关 闭</el-button>
|
||||
<el-button type="danger" @click="doSubmit(1)">退回修改</el-button>
|
||||
<el-button type="danger" @click="doSubmit(2)">退回修改并结束</el-button>
|
||||
<el-button type="primary" @click="doSubmit(3)">通 过</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="50%"
|
||||
:close-on-click-modal="false">
|
||||
<info ref="info"></info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("info.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
clubs: [],
|
||||
pageForm: {
|
||||
auditState: 0,
|
||||
searchName: "userName",
|
||||
year: new Date().getFullYear() + "",
|
||||
clubId: ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: "loginName", label: "工号"},
|
||||
{prop: "userName", label: "姓名"},
|
||||
{prop: "unitName", label: "单位"},
|
||||
{prop: "unionName", label: "工会"},
|
||||
{prop: "clubName", label: "协会"},
|
||||
{prop: "notes", label: "事由"},
|
||||
{prop: "applyDate", label: "填写时间"},
|
||||
{prop: "auditState", label: "状态"}
|
||||
],
|
||||
formRules: {},
|
||||
dialogVisible: false,
|
||||
viewDialogVisible: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"info": info
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.viewDialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.info.openView(row.id)
|
||||
}, 300)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
auditOpinion: "",
|
||||
auditTime: moment().format("YYYY-MM-DD"),
|
||||
username: "${@shiro.getPrincipalProperty('username')}"
|
||||
}
|
||||
this.dialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.auditInfo.openAudit(row.id, true)
|
||||
}, 300)
|
||||
},
|
||||
doSubmit(flag) {
|
||||
this.$refs.form.validate(async (valid) => {
|
||||
if (valid) {
|
||||
let msg = ""
|
||||
if (flag === 1) {
|
||||
msg = "退回修改"
|
||||
} else if (flag === 2) {
|
||||
msg = "退回修改并结束流程"
|
||||
} else {
|
||||
msg = "通过"
|
||||
}
|
||||
this.$confirm("确定要" + msg + "吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.formData.flag = flag
|
||||
$.post("/platform/clubPreAudit/audit/doSubmit", this.formData).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "操作成功!"
|
||||
})
|
||||
this.dialogVisible = false
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === "true") {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
async getClubs() {
|
||||
const resp = await $.post("/platform/clubPreAudit/manage/getClubs")
|
||||
if (resp.code === 0) {
|
||||
this.clubs = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
await this.getClubs()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,102 @@
|
||||
let info = {
|
||||
/*language=HTML*/
|
||||
template: `
|
||||
<el-tabs tab-position="top" v-model="activeName" v-loading="loading">
|
||||
<el-tab-pane label="预审信息" name="1">
|
||||
<el-form label-width="110px" class="formData">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名">
|
||||
{{viewData.userName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号">
|
||||
{{viewData.loginName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位">
|
||||
{{viewData.unitName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工会">
|
||||
{{viewData.unionName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协会">
|
||||
{{viewData.clubName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="摘要">
|
||||
{{viewData.notes}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系方式">
|
||||
{{viewData.mobile}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="材料" prop="files">
|
||||
<file-upload card :files.sync="viewData.files"
|
||||
view></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="审核信息" name="2" v-if="viewData.auditId">
|
||||
<el-form label-width="110px" class="formData">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名">
|
||||
{{viewData.auditInfo.username}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间">
|
||||
{{viewData.auditInfo.auditTime}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核意见">
|
||||
{{viewData.auditInfo.auditOpinion}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane v-if="handle" :label="label" name="999">
|
||||
<slot name="handle"></slot>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-tabs>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
handle: false,
|
||||
label: "审核",
|
||||
loading: false,
|
||||
activeName: "1",
|
||||
viewData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async openAudit(id, handle) {
|
||||
this.handle = handle
|
||||
await this.openView(id)
|
||||
},
|
||||
async openView(id) {
|
||||
this.loading = true
|
||||
const resp = await $.post("/platform/clubPreAudit/manage/findOne", {id})
|
||||
resp.data.files = JSON.parse(resp.data.files)
|
||||
this.viewData = resp.data
|
||||
this.loading = false
|
||||
if (this.handle){
|
||||
this.activeName = "999"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,292 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.formData .viewFile {
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
type="year" v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">事由:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.notes" placeholder="请选择或输入摘要" clearable>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="预审列表">
|
||||
<template #func>
|
||||
<el-button v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('xhbxy')}" type="primary" @click="openAdd" size="small">新增预审材料</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop==='auditState'">
|
||||
<el-tag v-if="row.auditState===0" type="info">保存中</el-tag>
|
||||
<el-tag v-if="row.auditState===1" type="info">待审核</el-tag>
|
||||
<el-tag v-else-if="row.auditState===2" type="danger">退回修改</el-tag>
|
||||
<el-tag v-else-if="row.auditState===3" type="danger">退回修改并结束</el-tag>
|
||||
<el-tag v-else-if="row.auditState===4" type="success">已通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="300">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" type="primary" size="mini">查看
|
||||
</el-button>
|
||||
<el-button @click="openEdit(row)" type="primary" size="mini"
|
||||
:disabled="![0,1,2].includes(row.auditState)">编辑
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row.id)" type="danger" size="mini"
|
||||
:disabled="![0,1].includes(row.auditState)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="dialogVisible"
|
||||
width="60%"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
<el-form :model="formData" :rules="rules" ref="form" label-width="100px" class="formData">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="userName">
|
||||
<el-input v-model="formData.userName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号" prop="loginName">
|
||||
<el-input v-model="formData.loginName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="单位" prop="unitName">
|
||||
<el-input v-model="formData.unitName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工会" prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="协会" prop="clubName">
|
||||
<el-input v-model="formData.clubName" disabled>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="摘要" prop="notes">
|
||||
<el-input v-model="formData.notes"
|
||||
placeholder="请输入摘要" maxlength="50" show-word-limit>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="联系电话" prop="mobile">
|
||||
<el-input v-model="formData.mobile"
|
||||
placeholder="请输入联系电话" maxlength="50" show-word-limit>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="材料" prop="files">
|
||||
<file-upload :files.sync="formData.files"
|
||||
:type="['jpg', 'jpeg', 'png', 'JPG', 'JPEG', 'PNG']" :max="30">
|
||||
<template #el-upload__tip>
|
||||
<div class="el-upload__tip" slot="tip">
|
||||
请上传类型为jpg/png/jpeg等格式的图片,最多上传30个文件
|
||||
</div>
|
||||
</template>
|
||||
</file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">关 闭</el-button>
|
||||
<el-button type="primary" @click="doSubmit(false)" :loading="formLoading">保 存</el-button>
|
||||
<el-button type="primary" @click="doSubmit(true)" :loading="formLoading">提 交</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="50%"
|
||||
:close-on-click-modal="false">
|
||||
<info ref="info"></info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("info.js"){}#-->
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号" },
|
||||
{ prop: "userName", label: "姓名" },
|
||||
{ prop: "unitName", label: "单位" },
|
||||
{ prop: "unionName", label: "工会" },
|
||||
{ prop: "clubName", label: "协会" },
|
||||
{ prop: "notes", label: "摘要" },
|
||||
{ prop: "applyDate", label: "填写时间" },
|
||||
{ prop: "auditState", label: "状态" }
|
||||
],
|
||||
dialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
rules: {
|
||||
notes: [{ required: true, message: "必填", trigger: "blur" }],
|
||||
mobile: [{ required: true, message: "必填", trigger: "blur" }],
|
||||
files: [{ required: true, message: "必填", trigger: "blur" }]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"info": info
|
||||
},
|
||||
methods: {
|
||||
async openAdd() {
|
||||
this.formData = {
|
||||
applyDate: moment().format("YYYY-MM-DD"),
|
||||
userName: "${@shiro.getPrincipalProperty('username')}",
|
||||
loginName: "${@shiro.getPrincipalProperty('loginname')}",
|
||||
unitName: "${@shiro.getPrincipalProperty('unit').getName()}",
|
||||
unionName: "${@shiro.getPrincipalProperty('union').getUnionname()}",
|
||||
clubName: "",
|
||||
clubId: ""
|
||||
}
|
||||
|
||||
// 获取用户所属协会
|
||||
const clubResp = await $.post("/platform/clubPreAudit/manage/getUserClub")
|
||||
if (clubResp.code === 0 && clubResp.data) {
|
||||
this.formData.clubName = clubResp.data.clubName || ""
|
||||
this.formData.clubId = clubResp.data.clubId || ""
|
||||
}
|
||||
|
||||
this.dialogVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate()
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.viewDialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.info.openView(row.id)
|
||||
}, 300)
|
||||
},
|
||||
openEdit(row) {
|
||||
const data = clone(row)
|
||||
data.files = JSON.parse(data.files)
|
||||
this.formData = data
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm("确认删除?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
$.post("/platform/clubPreAudit/manage/doDelete", { id }).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "删除成功!"
|
||||
})
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doSubmit(flag) {
|
||||
this.$refs.form.validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("确定要" + (flag ? "提交" : "保存") + "吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.formLoading = true
|
||||
$.post("/platform/clubPreAudit/manage/doSubmit", {
|
||||
preAudit: JSON.stringify(this.formData),
|
||||
flag: flag
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: "操作成功!"
|
||||
})
|
||||
this.dialogVisible = false
|
||||
this.pageData()
|
||||
}
|
||||
this.formLoading = false
|
||||
})
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,258 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.formData .viewFile {
|
||||
height: 200px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">时间段:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.date"
|
||||
type="daterange"
|
||||
@change="dateChange"
|
||||
align="right"
|
||||
unlink-panels
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
:picker-options="pickerOptions">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable
|
||||
placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select clearable placeholder="查询类型"
|
||||
slot="prepend"
|
||||
style="width: 100px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="userName"></el-option>
|
||||
<el-option label="工号" value="loginName"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">摘要:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.notes" placeholder="请输入摘要" clearable>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属协会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属协会" v-model="pageForm.clubId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
filterable="true">
|
||||
<el-option v-for="item in clubs" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="预审列表">
|
||||
<template #func>
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号"
|
||||
type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop==='auditState'">
|
||||
<el-tag v-if="row.auditState===0" type="info">保存中</el-tag>
|
||||
<el-tag v-if="row.auditState===1" type="info">待审核</el-tag>
|
||||
<el-tag v-else-if="row.auditState===2" type="danger">退回修改</el-tag>
|
||||
<el-tag v-else-if="row.auditState===3" type="danger">退回修改并结束</el-tag>
|
||||
<el-tag v-else-if="row.auditState===4" type="success">已通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="100">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" type="primary" size="mini">查看
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog
|
||||
title="预审材料信息"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="40%"
|
||||
:close-on-click-modal="false">
|
||||
<info ref="info"></info>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false" type="primary">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("info.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
clubs: [],
|
||||
pageForm: {
|
||||
date: [moment().subtract(1, "months")._d, new Date()],
|
||||
year: new Date().getFullYear() + "",
|
||||
clubId: ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: "loginName", label: "工号"},
|
||||
{prop: "userName", label: "姓名"},
|
||||
{prop: "unitName", label: "单位"},
|
||||
{prop: "unionName", label: "工会"},
|
||||
{prop: "clubName", label: "协会"},
|
||||
{prop: "notes", label: "事由"},
|
||||
{prop: "applyDate", label: "填写时间"},
|
||||
{prop: "auditState", label: "状态"}
|
||||
],
|
||||
formRules: {},
|
||||
viewDialogVisible: false,
|
||||
pickerOptions: {
|
||||
shortcuts: [{
|
||||
text: "最近一周",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}, {
|
||||
text: "最近一个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}, {
|
||||
text: "最近三个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"info": info
|
||||
},
|
||||
methods: {
|
||||
dateChange(val) {
|
||||
if (val && val.length > 0) {
|
||||
this.$set(this.pageForm, "startDate", val[0])
|
||||
this.$set(this.pageForm, "endDate", val[1])
|
||||
} else {
|
||||
this.$set(this.pageForm, "startDate", "")
|
||||
this.$set(this.pageForm, "endDate", "")
|
||||
}
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
this.viewDialogVisible = true
|
||||
setTimeout(() => {
|
||||
this.$refs.info.openView(row.id)
|
||||
}, 300)
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === "true") {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
|
||||
}
|
||||
},
|
||||
async getClubs() {
|
||||
const resp = await $.post("/platform/clubPreAudit/manage/getClubs")
|
||||
if (resp.code === 0) {
|
||||
this.clubs = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unions = await getUnions(null)
|
||||
this.flushUnits()
|
||||
await this.getClubs()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -264,7 +264,7 @@
|
||||
<p class="van-doc-demo-block__title" style="margin-top: 5px;color: red">
|
||||
(如同时参加以下多个活动,或有多个主题,请分别提交)</p>
|
||||
</div>
|
||||
<van-tabs :color="boxData.hdcolor" type="card" v-model="formData.hdlb_i">
|
||||
<van-tabs :color="boxData.hdcolor" @change="hdlbChange" type="card" v-model="formData.hdlb_i">
|
||||
<van-tab :name="i" :title="lb.lname" v-for="lb,i in boxData.lbs">
|
||||
<div v-if="formData.hdlb_i==i">
|
||||
<!-- <van-field style="padding-top: 30px" maxlength="15"
|
||||
@@ -481,28 +481,12 @@
|
||||
</van-tabs>
|
||||
|
||||
<div style="margin: 16px;">
|
||||
<van-row gutter="20">
|
||||
<van-col span="12">
|
||||
<van-button :color="boxData.hdcolor" :disabled="subDis"
|
||||
@click="doSubmit(false)" block
|
||||
plain
|
||||
round
|
||||
type="info">
|
||||
保存
|
||||
</van-button>
|
||||
</van-col>
|
||||
<van-col span="12">
|
||||
<van-button :color="boxData.hdcolor" :disabled="subDis"
|
||||
@click="doSubmit(true)" block
|
||||
round
|
||||
type="info">
|
||||
提交
|
||||
</van-button>
|
||||
</van-col>
|
||||
|
||||
</van-row>
|
||||
|
||||
|
||||
<van-button :color="boxData.hdcolor" :disabled="subDis"
|
||||
@click="doSubmit(true)" block
|
||||
round
|
||||
type="info">
|
||||
提交
|
||||
</van-button>
|
||||
</div>
|
||||
</van-form>
|
||||
</div>
|
||||
@@ -594,10 +578,27 @@
|
||||
},
|
||||
methods: {
|
||||
zplbClick(val, fd, i) {
|
||||
this.chooseLb = val
|
||||
fd[i].zplb = val.zid;
|
||||
fd[i].zplb_name = val.zname;
|
||||
this.showPicker = false
|
||||
this.$set(this, 'chooseLb', val)
|
||||
this.$set(fd[i], 'zplb', val.zid)
|
||||
this.$set(fd[i], 'zplb_name', val.zname)
|
||||
this.$set(this, 'showPicker', false)
|
||||
},
|
||||
hdlbChange(i) {
|
||||
this.setDefaultZplb(i)
|
||||
},
|
||||
setDefaultZplb(i) {
|
||||
const lb = this.boxData.lbs && this.boxData.lbs[i]
|
||||
if (lb && lb.zplbs && lb.zplbs.length > 0) {
|
||||
const val = this.fd[i].zplb ? lb.zplbs.find(o => o.zid === this.fd[i].zplb) : lb.zplbs[0]
|
||||
this.$set(this, 'chooseLb', val || {})
|
||||
if (!this.fd[i].zplb && val) {
|
||||
// 默认选择第一个作品类别,保证对应上传配置可以立即生效。
|
||||
this.$set(this.fd[i], 'zplb', val.zid)
|
||||
this.$set(this.fd[i], 'zplb_name', val.zname)
|
||||
}
|
||||
} else {
|
||||
this.$set(this, 'chooseLb', {})
|
||||
}
|
||||
},
|
||||
activeChange() {
|
||||
if (this.subDis) {
|
||||
@@ -658,11 +659,17 @@
|
||||
this.$toast.fail("请您选择要上传的作品!")
|
||||
return
|
||||
}*/
|
||||
if (this.chooseLb.isUploadPhoto === true || this.chooseLb.isUploadOther === true || this.chooseLb.isUploadZip === true) {
|
||||
if (this.fd[i].videoList.length === 0 || this.fd[i].imgList.length === 0 || this.fd[i].zipList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的作品!")
|
||||
return
|
||||
}
|
||||
if (this.chooseLb.isUploadPhoto === true && this.fd[i].imgList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的图片!")
|
||||
return
|
||||
}
|
||||
if (this.chooseLb.isUploadOther === true && this.fd[i].videoList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的音/视频或文档!")
|
||||
return
|
||||
}
|
||||
if (this.chooseLb.isUploadZip === true && this.fd[i].zipList.length === 0) {
|
||||
this.$toast.fail("请您选择要上传的压缩包!")
|
||||
return
|
||||
}
|
||||
if (!this.fd[i].zplb || !this.fd[i].zpmc || !this.fd[i].zpms) {
|
||||
this.$toast.fail("请您填写完整再提交!")
|
||||
@@ -676,7 +683,7 @@
|
||||
}*/
|
||||
}
|
||||
|
||||
const msg = '您当前选择的是“' + this.boxData.lbs[i].lname + '”,是否确认上传?' + (flag ? '上传后您将不能对已上传的作品进行更改' : '保存后如需提交请到我的作品进行提交')
|
||||
const msg = '您当前选择的是“' + this.boxData.lbs[i].lname + '”,是否确认提交?活动时间内可编辑或删除已提交作品'
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: '提醒',
|
||||
message: msg
|
||||
@@ -686,6 +693,7 @@
|
||||
this.showMsg = true
|
||||
this.showPlan = true
|
||||
this.percent = 0
|
||||
this.$set(this, 'flag', false)
|
||||
this.msg = ''
|
||||
|
||||
let formData1 = {}
|
||||
@@ -769,22 +777,22 @@
|
||||
Cookies.remove('sa_formData');
|
||||
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>'
|
||||
this.flag = true
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>')
|
||||
vue.$set(vue, 'flag', true)
|
||||
location.href = '/mobile/wmhd/list'
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
this.flag = false
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">' + (data.msg || '非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!') + '</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
}
|
||||
vue.showPlan = false
|
||||
location.href = '/mobile/wmhd/list'
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
},
|
||||
error: function (data) {
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
this.flag = false
|
||||
vue.showPlan = false
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
@@ -819,20 +827,19 @@
|
||||
Cookies.remove('sa_formData');
|
||||
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>'
|
||||
|
||||
this.flag = true
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">我们已收到您的作品!<br/>非常感谢您的支持!</p>')
|
||||
vue.$set(vue, 'flag', true)
|
||||
} else {
|
||||
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
this.flag = false
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">' + (data.msg || '非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!') + '</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
}
|
||||
vue.showPlan = false
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
},
|
||||
error: function (data) {
|
||||
vue.msg = '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>'
|
||||
this.flag = false
|
||||
vue.showPlan = false
|
||||
vue.$set(vue, 'msg', '<p class="weui-msg__desc">非常抱歉对您造成的不便!<br/>请联系系统管理员进行修复!</p>')
|
||||
vue.$set(vue, 'flag', false)
|
||||
vue.$set(vue, 'showPlan', false)
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -912,7 +919,8 @@
|
||||
})
|
||||
})
|
||||
this.boxData = data.data
|
||||
this.formData.hdlb_i = 0
|
||||
this.$set(this.formData, 'hdlb_i', 0)
|
||||
this.setDefaultZplb(0)
|
||||
this.showPage = true
|
||||
|
||||
if (!data.data.hdflag) {
|
||||
@@ -944,7 +952,7 @@
|
||||
this.$set(this.fd[refs[0].llocation - 1], "hdsbsj", refs[0].hdsbsj)
|
||||
this.$set(this.fd[refs[0].llocation - 1], "zpms", refs[0].hdsbzpms)
|
||||
const o = this.boxData.lbs[refs[0].llocation - 1].zplbs.find(o => o.zid === refs[0].hdzplx2)
|
||||
this.chooseLb = o !== undefined ? o : {}
|
||||
this.$set(this, 'chooseLb', o !== undefined ? o : {})
|
||||
data.forEach((v, i) => {
|
||||
v.filename = v.filename
|
||||
v.fjurl = v.filepath
|
||||
|
||||
@@ -567,7 +567,7 @@ layout("/layouts/platform.html"){
|
||||
"&stateId=" + stateId);
|
||||
},
|
||||
exportExcel: function () {
|
||||
let {hdid, hdlb, zplb, union, unit, stateId, isExcellent} = this.pageForm;
|
||||
let {hdid, hdlb, zplb, union, unit, year, searchName, searchKeyword, stateId, isExcellent} = this.pageForm;
|
||||
if (hdid === '') {
|
||||
this.$message.warning('请先选择活动主题');
|
||||
return;
|
||||
@@ -576,14 +576,20 @@ layout("/layouts/platform.html"){
|
||||
return o.value == hdid;
|
||||
});
|
||||
let hdname = hdarr[0].label;
|
||||
window.open('/platform/hd/wmhd/exportExcel?hdid=' + hdid +
|
||||
'&hdname=' + hdname +
|
||||
"&hdlb=" + hdlb +
|
||||
"&zplb=" + zplb +
|
||||
"&union=" + union +
|
||||
"&unit=" + unit +
|
||||
"&isExcellent=" + isExcellent +
|
||||
"&stateId=" + stateId);
|
||||
let query = $.param({
|
||||
hdid: hdid,
|
||||
hdname: hdname,
|
||||
hdlb: hdlb,
|
||||
zplb: zplb,
|
||||
union: union,
|
||||
unit: unit,
|
||||
year: year,
|
||||
searchName: searchName,
|
||||
searchKeyword: searchKeyword,
|
||||
isExcellent: isExcellent,
|
||||
stateId: stateId
|
||||
});
|
||||
window.open('/platform/hd/wmhd/exportExcel?' + query);
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
|
||||
@@ -282,13 +282,13 @@ layout("/layouts/platform.html"){
|
||||
<el-button @click="viewInfo(scope)" size="mini" type="primary">查看
|
||||
</el-button>
|
||||
<!-- v-if="scope.row.auditstate==='3999'||scope.row.auditstate==='4100'||scope.row.auditstate==='4250'"-->
|
||||
<el-button :disabled="scope.row.auditstate!=='3999'"
|
||||
<el-button :disabled="!isActivityTime(scope.row)"
|
||||
@click="openEdit(scope)" size="mini"
|
||||
type="primary">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button :disabled="scope.row.auditstate!=='3999'"
|
||||
@click="dodelete(scope.row.id)"
|
||||
<el-button :disabled="!isActivityTime(scope.row)"
|
||||
@click="dodelete(scope.row)"
|
||||
size="mini"
|
||||
type="danger">删除
|
||||
</el-button>
|
||||
@@ -413,8 +413,7 @@ layout("/layouts/platform.html"){
|
||||
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doAdd(false)">保 存</el-button>
|
||||
<el-button @click="doAdd(true)" type="primary">提 交</el-button>
|
||||
<el-button @click="doAdd" type="primary">提 交</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -525,8 +524,7 @@ layout("/layouts/platform.html"){
|
||||
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doEdit(false)">保 存</el-button>
|
||||
<el-button @click="doEdit(true)" type="primary">提 交</el-button>
|
||||
<el-button @click="doEdit" type="primary">提 交</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -616,6 +614,15 @@ layout("/layouts/platform.html"){
|
||||
changeHdzplx2(id) {
|
||||
this.zplb2Config = this.formhdzplblist.find(v => v.zid === id)
|
||||
},
|
||||
isActivityTime(row) {
|
||||
if (!row || !row.hdkssj || !row.hdjssj) {
|
||||
return false;
|
||||
}
|
||||
const startTime = new Date(row.hdkssj.replace(/-/g, '/')).getTime();
|
||||
const endTime = new Date(row.hdjssj.replace(/-/g, '/')).getTime();
|
||||
const nowTime = new Date().getTime();
|
||||
return startTime <= nowTime && nowTime <= endTime;
|
||||
},
|
||||
yearChange(val) {
|
||||
let activityList = []
|
||||
if (val === null) {
|
||||
@@ -743,10 +750,10 @@ layout("/layouts/platform.html"){
|
||||
this.$refs['AddForm'].resetFields();
|
||||
}
|
||||
},
|
||||
doAdd(flag) {
|
||||
doAdd() {
|
||||
this.$refs['AddForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
if (flag && ((this.zplb2Config.isUploadPhoto && this.picturelist.length === 0) ||
|
||||
if (((this.zplb2Config.isUploadPhoto && this.picturelist.length === 0) ||
|
||||
(this.zplb2Config.isUploadOther && this.vadlist.length === 0) ||
|
||||
(this.zplb2Config.isUploadZip && this.ziplist.length === 0))) {
|
||||
this.$message.warning('请上传您的作品');
|
||||
@@ -759,7 +766,7 @@ layout("/layouts/platform.html"){
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
let formdata = new FormData();
|
||||
formdata.append("flag", flag);
|
||||
formdata.append("flag", true);
|
||||
formdata.append("data", JSON.stringify(this.AddFormData));
|
||||
if(this.picturelist && this.picturelist.length > 0) {
|
||||
this.picturelist.forEach(val => {
|
||||
@@ -789,7 +796,7 @@ layout("/layouts/platform.html"){
|
||||
this.$refs.guava.index()
|
||||
this.$message.success('上传成功');
|
||||
} else {
|
||||
this.$message.error('上传失败');
|
||||
this.$message.error(res.msg || '上传失败');
|
||||
}
|
||||
loading.close();
|
||||
})
|
||||
@@ -797,6 +804,10 @@ layout("/layouts/platform.html"){
|
||||
});
|
||||
},
|
||||
openEdit(scope) {
|
||||
if (!this.isActivityTime(scope.row)) {
|
||||
this.$message.warning('不在活动时间范围内,不能编辑');
|
||||
return;
|
||||
}
|
||||
this.readytodelfile = [];
|
||||
this.picturelist = [];
|
||||
this.vadlist = [];
|
||||
@@ -821,10 +832,10 @@ layout("/layouts/platform.html"){
|
||||
|
||||
|
||||
},
|
||||
doEdit(flag) {
|
||||
doEdit() {
|
||||
this.$refs['EditForm'].validate((valid) => {
|
||||
if (valid) {
|
||||
if (flag && ((this.zplb2Config.isUploadPhoto && this.picturelist.length === 0) ||
|
||||
if (((this.zplb2Config.isUploadPhoto && this.picturelist.length === 0) ||
|
||||
(this.zplb2Config.isUploadOther && this.vadlist.length === 0) ||
|
||||
(this.zplb2Config.isUploadZip && this.ziplist.length === 0))) {
|
||||
this.$message.warning('请上传您的作品');
|
||||
@@ -838,7 +849,7 @@ layout("/layouts/platform.html"){
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
let formdata = new FormData();
|
||||
formdata.append("flag", flag);
|
||||
formdata.append("flag", true);
|
||||
formdata.append("data", JSON.stringify(this.EditFormData));
|
||||
formdata.append("readytodelfile", JSON.stringify(this.readytodelfile));
|
||||
if(this.picturelist && this.picturelist.length > 0) {
|
||||
@@ -877,7 +888,7 @@ layout("/layouts/platform.html"){
|
||||
this.$refs.guava.index()
|
||||
this.$message.success('上传成功');
|
||||
} else {
|
||||
this.$message.error('上传失败');
|
||||
this.$message.error(res.msg || '上传失败');
|
||||
}
|
||||
loading.close();
|
||||
|
||||
@@ -971,16 +982,22 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
});
|
||||
},
|
||||
dodelete(id) {
|
||||
dodelete(row) {
|
||||
if (!this.isActivityTime(row)) {
|
||||
this.$message.warning('不在活动时间范围内,不能删除');
|
||||
return;
|
||||
}
|
||||
this.$confirm('此操作将永久删除该记录, 确定吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
$.post('/platform/hd/wmhd/doDelete', {id: id}).then(data => {
|
||||
$.post('/platform/hd/wmhd/doDelete', {id: row.id}).then(data => {
|
||||
if (data.code == 0) {
|
||||
this.doSearch();
|
||||
this.$message.success(data.msg);
|
||||
} else {
|
||||
this.$message.error(data.msg || '删除失败');
|
||||
}
|
||||
});
|
||||
}).catch(() => {
|
||||
|
||||
@@ -121,6 +121,9 @@ layout("/layouts/platform.html"){
|
||||
<el-button icon="el-icon-plus" @click="openAdd">创建协会</el-button>
|
||||
<!–#}#–>
|
||||
</div>-->
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button type="primary" icon="el-icon-upload2" @click="openImport">导入成员</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
@@ -259,6 +262,7 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<div class="pull-right offscreen-right mt5" v-if="userPageForm.radioType === '2'">
|
||||
<el-button icon="el-icon-plus" @click="openUserAdd">录入成员</el-button>
|
||||
<el-button icon="el-icon-download" @click="exportClubMembers">导出</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
@@ -291,6 +295,13 @@ layout("/layouts/platform.html"){
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==6">经办人</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="入会时间" prop="join_time">
|
||||
<template slot-scope="scope">
|
||||
<span>{{(scope.row.join_time || '').substring(0, 10)}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -575,6 +586,7 @@ layout("/layouts/platform.html"){
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==6">经办人</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
|
||||
@@ -646,6 +658,57 @@ layout("/layouts/platform.html"){
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="导入成员"
|
||||
:visible.sync="importDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
<el-timeline>
|
||||
<el-timeline-item placement="top" timestamp="下载模板">
|
||||
<el-card>
|
||||
<el-button
|
||||
@click="downloadImportTemplate"
|
||||
icon="el-icon-download" size="medium"
|
||||
style="width: 200px"
|
||||
type="">下载模板
|
||||
</el-button>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
<el-timeline-item placement="top" timestamp="上传文件">
|
||||
<el-card>
|
||||
<el-upload
|
||||
:auto-upload="false"
|
||||
:file-list="importData.fileList"
|
||||
:limit="1"
|
||||
:on-change="importFileChange"
|
||||
:on-remove="importFileRemove"
|
||||
name="file"
|
||||
ref="importUpload">
|
||||
<el-button icon="el-icon-upload" size="medium" style="width: 200px" type="">
|
||||
选择文件
|
||||
</el-button>
|
||||
<div class="el-upload__tip" slot="tip" style="color: #F56C6C">
|
||||
只能上传 xls/xlsx 文件
|
||||
</div>
|
||||
</el-upload>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
<el-timeline-item placement="top" timestamp="导入结果" v-if="importResult.totalCount > 0">
|
||||
<el-card>
|
||||
<div>
|
||||
本次导入共 {{importResult.totalCount}} 条,成功 {{importResult.successCount}} 条,失败 {{importResult.errorCount}} 条
|
||||
</div>
|
||||
<div style="margin-top: 15px" v-if="importResult.errorCount > 0 && importResult.cacheKey">
|
||||
<el-button icon="el-icon-download" @click="downloadImportErrors">下载错误信息表格</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button :disabled="importLoading" @click="importDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :loading="importLoading" @click="doImportMember">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
@@ -690,7 +753,7 @@ layout("/layouts/platform.html"){
|
||||
userLoading: false,
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
checkNode: {level: 2},
|
||||
checkNode: {level: 1},
|
||||
checkData: {},
|
||||
//################################
|
||||
userFormRules: {
|
||||
@@ -713,6 +776,17 @@ layout("/layouts/platform.html"){
|
||||
userTabKey: "",
|
||||
addDialogVisible: false,
|
||||
clubOptions: [],
|
||||
importDialogVisible: false,
|
||||
importLoading: false,
|
||||
importData: {
|
||||
fileList: []
|
||||
},
|
||||
importResult: {
|
||||
totalCount: 0,
|
||||
successCount: 0,
|
||||
errorCount: 0,
|
||||
cacheKey: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
@@ -826,6 +900,101 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
|
||||
},
|
||||
openImport() {
|
||||
this.$set(this, 'importResult', {
|
||||
totalCount: 0,
|
||||
successCount: 0,
|
||||
errorCount: 0,
|
||||
cacheKey: ''
|
||||
})
|
||||
this.$set(this, 'importData', {
|
||||
fileList: []
|
||||
})
|
||||
this.importDialogVisible = true
|
||||
},
|
||||
downloadImportTemplate() {
|
||||
window.location.href = base + '/platform/sys/club/clubIn/downloadImportTemplate'
|
||||
},
|
||||
importFileChange(file, fileList) {
|
||||
var fileName = file.name ? file.name : file.raw.name
|
||||
var suffix = fileName.indexOf('.') > -1 ? fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase() : ''
|
||||
if (['xls', 'xlsx'].indexOf(suffix) === -1) {
|
||||
this.$message({
|
||||
message: '只能上传 xls、xlsx 文件',
|
||||
type: 'warning'
|
||||
})
|
||||
this.$set(this.importData, 'fileList', [])
|
||||
return
|
||||
}
|
||||
this.$set(this.importData, 'fileList', fileList.slice(fileList.length - 1))
|
||||
},
|
||||
importFileRemove(file, fileList) {
|
||||
this.$set(this.importData, 'fileList', fileList)
|
||||
},
|
||||
doImportMember() {
|
||||
if (!this.importData.fileList.length) {
|
||||
this.$message({
|
||||
message: '请先选择导入文件',
|
||||
type: 'warning'
|
||||
})
|
||||
return
|
||||
}
|
||||
var formdata = new FormData();
|
||||
this.importData.fileList.forEach(function (val) {
|
||||
formdata.append('file', val.raw, val.raw.name)
|
||||
})
|
||||
this.importLoading = true
|
||||
$.ajax({
|
||||
url: base + "/platform/sys/club/clubIn/doImportMember",
|
||||
type: "post",
|
||||
data: formdata,
|
||||
processData: false,
|
||||
contentType: false,
|
||||
success: (resp) => {
|
||||
this.importLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.$set(this, 'importResult', resp.data)
|
||||
this.$message({
|
||||
message: '导入完成,成功 ' + resp.data.successCount + ' 条,失败 ' + resp.data.errorCount + ' 条',
|
||||
type: resp.data.errorCount > 0 ? 'warning' : 'success'
|
||||
})
|
||||
this.pageData()
|
||||
this.loadTree()
|
||||
} else {
|
||||
this.$message({
|
||||
message: resp.msg,
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
},
|
||||
error: (resp) => {
|
||||
this.importLoading = false
|
||||
this.$message({
|
||||
message: resp.msg ? resp.msg : '导入失败',
|
||||
type: 'error'
|
||||
})
|
||||
}
|
||||
});
|
||||
},
|
||||
downloadImportErrors() {
|
||||
if (!this.importResult.cacheKey) {
|
||||
return
|
||||
}
|
||||
window.location.href = base + '/platform/sys/club/clubIn/exportImportErrors?cacheKey=' + this.importResult.cacheKey
|
||||
},
|
||||
exportClubMembers() {
|
||||
if (!this.userPageForm.clubid) {
|
||||
this.$message({
|
||||
message: '请先选择协会',
|
||||
type: 'warning'
|
||||
})
|
||||
return
|
||||
}
|
||||
window.location.href = base + '/platform/sys/club/clubIn/exportClubMembers?clubid='
|
||||
+ this.userPageForm.clubid
|
||||
+ '&searchName=' + encodeURIComponent(this.userPageForm.searchName ? this.userPageForm.searchName : '')
|
||||
+ '&searchKeyword=' + encodeURIComponent(this.userPageForm.searchKeyword ? this.userPageForm.searchKeyword : '')
|
||||
},
|
||||
doUserSearch() {
|
||||
this.userTabKey = new Date().getTime()
|
||||
this.userPageForm.pageNumber = 1
|
||||
@@ -1246,7 +1415,7 @@ layout("/layouts/platform.html"){
|
||||
this.treeLoading = false
|
||||
if (code == 0) {
|
||||
this.treeData = data
|
||||
this.checkData = data[0].child[0]
|
||||
this.checkData = data[0]
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
@@ -1258,12 +1427,10 @@ layout("/layouts/platform.html"){
|
||||
async created() {
|
||||
await this.loadTree()
|
||||
this.typeOptions = await getClubType()
|
||||
this.userPageForm.clubid = this.checkData.id
|
||||
this.userPageData();
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -292,6 +292,7 @@ layout("/layouts/platform.html"){
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==6">协会经办人</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -325,6 +326,10 @@ layout("/layouts/platform.html"){
|
||||
@click.native="updateSf(row,5)"
|
||||
class="text-primary">设置副秘书长
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="row.sf!==6"
|
||||
@click.native="updateSf(row,6)"
|
||||
class="text-primary">设置协会经办人
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
@click.native="userDropdownCommand(row)">删除
|
||||
</el-dropdown-item>
|
||||
@@ -567,6 +572,7 @@ layout("/layouts/platform.html"){
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==6">协会经办人</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
|
||||
@@ -627,6 +633,7 @@ layout("/layouts/platform.html"){
|
||||
<el-radio-button :label="3">副会长</el-radio-button>
|
||||
<el-radio-button :label="4">秘书长</el-radio-button>
|
||||
<el-radio-button :label="5">副秘书长</el-radio-button>
|
||||
<el-radio-button :label="6">协会经办人</el-radio-button>
|
||||
<!--<el-radio-button :label="2">成员</el-radio-button>-->
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
@@ -791,7 +798,7 @@ layout("/layouts/platform.html"){
|
||||
});
|
||||
},
|
||||
async userQueryUser(clubid, query) {
|
||||
const {data} = await $.get("/platform/sys/club/users/queryUser", {clubid, query})
|
||||
const {data} = await $.get("/platform/sys/club/users/queryClubMemberForManage", {clubid, query})
|
||||
return data
|
||||
},
|
||||
async userUserRemoteMethod(query) {
|
||||
@@ -1258,4 +1265,4 @@ layout("/layouts/platform.html"){
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -116,6 +116,9 @@ layout("/layouts/platform.html"){
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-download" @click="exportAllClubMembers">导出</el-button>
|
||||
</div>
|
||||
|
||||
<!--<div class="pull-right offscreen-right mt5">
|
||||
<!–#if(@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')){#–>
|
||||
@@ -292,6 +295,13 @@ layout("/layouts/platform.html"){
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==6">经办人</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="入会时间" prop="join_time">
|
||||
<template slot-scope="scope">
|
||||
<span>{{(scope.row.join_time || '').substring(0, 10)}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
@@ -576,6 +586,7 @@ layout("/layouts/platform.html"){
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==6">经办人</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
|
||||
@@ -826,6 +837,9 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
|
||||
},
|
||||
exportAllClubMembers() {
|
||||
window.location.href = base + '/platform/sys/club/schoolIn/exportAllClubMembers'
|
||||
},
|
||||
doUserSearch() {
|
||||
this.userTabKey = new Date().getTime()
|
||||
this.userPageForm.pageNumber = 1
|
||||
@@ -1265,4 +1279,4 @@ layout("/layouts/platform.html"){
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -1,10 +1,21 @@
|
||||
package io.v.nutz;
|
||||
|
||||
import cn.afterturn.easypoi.excel.ExcelExportUtil;
|
||||
import cn.afterturn.easypoi.excel.ExcelImportUtil;
|
||||
import cn.afterturn.easypoi.excel.annotation.Excel;
|
||||
import cn.afterturn.easypoi.excel.entity.ExportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.ImportParams;
|
||||
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
|
||||
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
|
||||
import cn.afterturn.easypoi.excel.export.ExcelExportService;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import io.v.nutz.base.service.BaseService;
|
||||
import io.v.nutz.base.utils.MsgApi;
|
||||
import io.v.nutz.base.utils.Roles;
|
||||
import io.v.nutz.data.model.UserSource;
|
||||
import io.v.nutz.member.MemberMode;
|
||||
import io.v.nutz.question.model.Question_issue;
|
||||
import io.v.nutz.question.model.Question_wor;
|
||||
import io.v.nutz.service.AsyncService;
|
||||
import io.v.nutz.sickHelp.model.SickFundMember;
|
||||
import io.v.nutz.sys.models.Sys_user;
|
||||
@@ -13,6 +24,9 @@ import io.v.nutz.sys.models.User;
|
||||
import io.v.nutz.sys.services.SysConfigService;
|
||||
import io.v.nutz.sys.services.SysUserRoleService;
|
||||
import io.v.nutz.sys.services.SysUserService;
|
||||
import lombok.Data;
|
||||
import org.apache.poi.ss.usermodel.Workbook;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.apache.shiro.crypto.hash.Sha256Hash;
|
||||
import org.apache.shiro.util.ByteSource;
|
||||
import org.junit.Assert;
|
||||
@@ -26,20 +40,28 @@ import org.nutz.dao.Dao;
|
||||
import org.nutz.dao.Sqls;
|
||||
import org.nutz.dao.entity.Record;
|
||||
import org.nutz.dao.sql.Sql;
|
||||
import org.nutz.dao.util.Daos;
|
||||
import org.nutz.integration.jedis.RedisService;
|
||||
import org.nutz.ioc.loader.annotation.Inject;
|
||||
import org.nutz.ioc.loader.annotation.IocBean;
|
||||
import org.nutz.json.Json;
|
||||
import org.nutz.lang.Lang;
|
||||
import org.nutz.lang.random.R;
|
||||
import org.nutz.lang.util.NutMap;
|
||||
import org.nutz.trans.Trans;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Paths;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@@ -257,8 +279,157 @@ public class WebTestDemo extends Assert {
|
||||
|
||||
@Test
|
||||
public void testMsgToken2() {
|
||||
msgApi.sendMsg("1",List.of("18571562330"));
|
||||
msgApi.sendMsg("1", List.of("18571562330"));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void evalQuestion() {
|
||||
String filePath = "C:\\Users\\jug\\Desktop\\新建文本文档.txt";
|
||||
List<Question_issue> issues = new ArrayList<>();
|
||||
Question_issue currentIssue = null;
|
||||
try {
|
||||
List<String> lines = Files.readAllLines(Paths.get(filePath));
|
||||
for (String line : lines) {
|
||||
line = line.trim();
|
||||
if (line.isEmpty()) {
|
||||
continue; // 跳过空行
|
||||
}
|
||||
|
||||
// 检测题目
|
||||
if (line.contains("[单选题]") || line.contains("【单选题】") || line.contains("[多选题]") || line.contains("【多选题】") || line.contains("[判断题]") || line.contains("【判断题】")) {
|
||||
// 如果当前有题目,添加到列表中
|
||||
if (currentIssue != null) {
|
||||
issues.add(currentIssue);
|
||||
}
|
||||
// 创建新的题目
|
||||
currentIssue = new Question_issue();
|
||||
// 去除题目中的标签
|
||||
String title = line.replaceAll("\\[单选题\\]", "").replaceAll("\\[多选题\\]", "")
|
||||
.replaceAll("【单选题】", "").replaceAll("【多选题】", "")
|
||||
.replaceAll("[判断题]", "").replaceAll("【判断题】", "");
|
||||
// 去除序号
|
||||
String[] patterns = {
|
||||
"\\d+、", // 例如:1、
|
||||
"\\d+\\.", // 例如:2.
|
||||
"\\(\\d+\\)", // 例如:(3)
|
||||
"第\\d+题" // 例如:第4题
|
||||
};
|
||||
for (String regex : patterns) {
|
||||
Pattern pattern = Pattern.compile(regex);
|
||||
Matcher matcher = pattern.matcher(title);
|
||||
title = matcher.replaceAll("");
|
||||
}
|
||||
currentIssue.setIname(title);
|
||||
currentIssue.setIisbd(true);
|
||||
// 设置是否单选
|
||||
if (line.contains("【单选题】") || line.contains("[单选题]")) {
|
||||
currentIssue.setItx(1);
|
||||
currentIssue.setIisdx(true);
|
||||
} else if (line.contains("【多选题】") || line.contains("[多选题]")) {
|
||||
currentIssue.setItx(1);
|
||||
currentIssue.setIisdx(false);
|
||||
} else if (line.contains("【判断题】") || line.contains("[判断题]")) {
|
||||
currentIssue.setItx(3);
|
||||
}
|
||||
// 设置分数
|
||||
currentIssue.setFraction(5);
|
||||
// 初始化选项列表
|
||||
currentIssue.setWors(new ArrayList<>());
|
||||
} else {
|
||||
// 处理选项
|
||||
if (currentIssue != null && StrUtil.isNotBlank(line)) {
|
||||
Question_wor wor = new Question_wor();
|
||||
wor.setWtxt(line);
|
||||
// 判断是否为正确答案
|
||||
if (line.contains("(正确答案)") || line.contains("(正确答案)")) {
|
||||
wor.setCorrect(true);
|
||||
// 去除正确答案标记
|
||||
wor.setWtxt(line.replace("(正确答案)", "").replace("(正确答案)", "").trim());
|
||||
} else {
|
||||
wor.setCorrect(false);
|
||||
}
|
||||
currentIssue.getWors().add(wor);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 添加最后一题
|
||||
if (currentIssue != null) {
|
||||
issues.add(currentIssue);
|
||||
}
|
||||
|
||||
// 输出解析结果
|
||||
for (int i = 0; i < issues.size(); i++) {
|
||||
issues.get(i).setIqid("7b44be22c6b042699779c9df5754a4da");
|
||||
issues.get(i).setIpxbh(i + 1);
|
||||
dao.insert(issues.get(i));
|
||||
System.out.println(1);
|
||||
List<Question_wor> wors = new ArrayList<>();
|
||||
for (int i1 = 0; i1 < issues.get(i).getWors().size(); i1++) {
|
||||
Question_wor wor = issues.get(i).getWors().get(i1);
|
||||
wor.setWid(R.UU32());
|
||||
wor.setWiid(issues.get(i).getIid());
|
||||
wor.setWpxbh(i1 + 1);
|
||||
wors.add(wor);
|
||||
}
|
||||
dao.insert(wors);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void exportXlsx() throws IOException {
|
||||
List<a> list = ExcelImportUtil.importExcel(new File("D:\\gooleDownload\\无标题.xlsx"), a.class, new ImportParams());
|
||||
Map<String, List<a>> collect = list.stream().filter(v -> StrUtil.isNotBlank(v.getUnionname())).collect(Collectors.groupingBy(v -> v.getUnionname()));
|
||||
|
||||
ArrayList<ExcelExportEntity> entities = new ArrayList<>();
|
||||
|
||||
Workbook workbook = new XSSFWorkbook();
|
||||
|
||||
//每个分工会为一个sheet页
|
||||
for (Map.Entry<String, List<a>> entry : collect.entrySet()) {
|
||||
String sheetName = entry.getKey();
|
||||
List<a> value = entry.getValue();
|
||||
for (int i = 0; i < value.size(); i++) {
|
||||
value.get(i).setNo(i + 1);
|
||||
}
|
||||
|
||||
ExcelExportService service = new ExcelExportService();
|
||||
ExportParams exportParams = new ExportParams();
|
||||
exportParams.setTitle(sheetName);
|
||||
exportParams.setSheetName(sheetName + "(" + value.size() + ")人");
|
||||
exportParams.setType(ExcelType.XSSF);
|
||||
// service.createSheetForMap(workbook, exportParams, entityList, value);
|
||||
service.createSheet(workbook, exportParams, a.class, value);
|
||||
}
|
||||
|
||||
FileOutputStream outputStream = new FileOutputStream("E:\\a.xlsx");
|
||||
workbook.write(outputStream);
|
||||
outputStream.close();
|
||||
}
|
||||
|
||||
@Data
|
||||
public static class a {
|
||||
@Excel(name = "序号")
|
||||
private Integer no;
|
||||
@Excel(name = "工号", width = 20)
|
||||
private String loginname;
|
||||
@Excel(name = "姓名", width = 20)
|
||||
private String username;
|
||||
@Excel(name = "性别", width = 20)
|
||||
private String sex;
|
||||
@Excel(name = "出生年月", width = 20)
|
||||
private String birthday;
|
||||
@Excel(name = "在职状态", width = 20)
|
||||
private String userState;
|
||||
@Excel(name = "人员类型", width = 20)
|
||||
private String personType;
|
||||
@Excel(name = "单位", width = 20)
|
||||
private String unitName;
|
||||
@Excel(name = "分工会", width = 20)
|
||||
private String unionname;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,159 @@
|
||||
nutz.application.name=union_hhu
|
||||
server.port=8080
|
||||
server.host=0.0.0.0
|
||||
jetty.contextPath=/
|
||||
jetty.threadpool.idleTimeout=100000
|
||||
jetty.threadpool.minThreads=10
|
||||
jetty.threadpool.maxThreads=20000
|
||||
jetty.page.403=/error/403.html
|
||||
jetty.page.404=/error/404.html
|
||||
jetty.page.500=/error/500.html
|
||||
#结合ftp使用,或用nginx代理ftp路径
|
||||
jetty.staticPath=D://filesu
|
||||
#开发模式静态资源
|
||||
jetty.staticPathLocal=D:/gsProject/zhgh_hhu/src/main/resources/static
|
||||
nutz.mvc.ignore=^(.+[.])(jsp|png|gif|jpg|js|css|jpeg|html|mp3|mp4|ico|svg)$
|
||||
nutz.mvc.exclusions=/favicon/*,/assets/*,/druid/*,/upload/*
|
||||
ftp.enabled=true
|
||||
ftp.host=192.168.21.203
|
||||
ftp.port=9090
|
||||
ftp.username=ftpuser
|
||||
ftp.password=123456
|
||||
ftp.timeout=100
|
||||
redis.host=127.0.0.1
|
||||
redis.port=6379
|
||||
redis.timeout=2000
|
||||
redis.max_redir=10
|
||||
redis.database=0
|
||||
redis.maxTotal=850
|
||||
redis.pool.maxTotal=900
|
||||
redis.pool.maxIdle=500
|
||||
redis.pool.minIdle=50
|
||||
#redis.password=dd3s
|
||||
#redis集群模式设置
|
||||
#redis.mode=cluster
|
||||
redis.mode=normal
|
||||
#redis.nodes=192.168.6.31:6377,192.168.6.31:6378,192.168.6.28:6377,192.168.6.28:6378,192.168.6.34:6377,192.168.6.34:6378
|
||||
jdbc.url=jdbc:mysql://192.168.21.215:3306/union_hhu?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
jdbc.username=root
|
||||
jdbc.password=root
|
||||
jdbc.validationQuery=select 1
|
||||
jdbc.maxActive=900
|
||||
jdbc.testWhileIdle=true
|
||||
jdbc.connectionProperties=druid.stat.slowSqlMillis=2000
|
||||
jdbc.defaultAutoCommit=true
|
||||
#jdbc.url=jdbc:oracle:thin:@//localhost:1521/orcl
|
||||
#jdbc.username=budwk
|
||||
#jdbc.password=pass
|
||||
#jdbc.validationQuery=select 1 from dual
|
||||
#jdbc.maxActive=10
|
||||
#jdbc.testWhileIdle=true
|
||||
#jdbc.connectionProperties=druid.stat.slowSqlMillis=2000
|
||||
#jdbc.defaultAutoCommit=true
|
||||
xsssql.ignore.urls=/platform/cms/content/article/addDo,/platform/sys/app/conf/addDo,/platform/sys/app/conf/editDo,/platform/home,\
|
||||
/sso/login,/platform/sys/log/data,/platform/common/user/userPageData,/platform/fw/condolence/applyWrite/doAdd,/platform/fw/condolence/ucr/union/doReview,\
|
||||
/platform/fw/condolence/myList/doEdit,/platform/fw/condolence/fr/doReview,/platform/fw/condolence/vcr/doReview,\
|
||||
/platform/sys/menu/addDo,/platform/sys/menu/editMenuDo,/platform/jdh/level2/info/doAdd,\
|
||||
/platform/reimbursement/applyNew/doAdd,/platform/member/common/saveUser,\
|
||||
/platform/sys/union/mange/unionPageData,/platform/fw/condolence/apply/doAdd
|
||||
#环境 dev/prod
|
||||
v.environment=dev
|
||||
v.loginUrl=/sso/login
|
||||
v.loginUrlMobile=/mobile/cas/login
|
||||
#shiro.ini.path=shiro.ini
|
||||
shiro.objects=platformAuthc,AuthenticationFilter,Cas20ProxyReceivingTicketValidationFilter,platformRealm,authenticationStrategy
|
||||
#end
|
||||
shiro.ini.urls:
|
||||
/sso/**=Cas20ProxyReceivingTicketValidationFilter
|
||||
/platform/wechat/doLogin=Cas20ProxyReceivingTicketValidationFilter
|
||||
/mobile/login=anon
|
||||
/platform/jsz/login=anon
|
||||
/assets/**=anon
|
||||
/**=anon
|
||||
/signature/**=anon
|
||||
/platform/**=AuthenticationFilter
|
||||
#end
|
||||
#设置session会话超时时间(单位:毫秒)
|
||||
shiro.workersCongressSession.manager.globalSessionTimeout=3600000
|
||||
#设置redis缓存时间(单位:秒)与上面的毫秒数保持一致
|
||||
shiro.workersCongressSession.cache.redis.ttl=3600
|
||||
#缓存名和 RedisConstant.PLATFORM_REDIS_PREFIX 常量保持一致
|
||||
shiro.workersCongressSession.dao.activeSessionsCacheName=budwk5mini:shiro:activeSessionCache
|
||||
#使用redis二级缓存
|
||||
shiro.workersCongressSession.cache.type=lcache
|
||||
shiro.workersCongressSession.enable=true
|
||||
shiro.url.login=/platform
|
||||
shiro.url.logout_redirect=/platform
|
||||
shiro.url.unauth=/platform
|
||||
#开发时设置本地路径,便于调试
|
||||
beetl.RESOURCE.rootLocal=D:/gsProject/zhgh_hhu/src/main/resources/views/
|
||||
beetl.RESOURCE.root=views/
|
||||
beetl.DELIMITER_STATEMENT_START=<!--#
|
||||
beetl.DELIMITER_STATEMENT_END=#-->
|
||||
beetl.FT.escape=io.v.nutz.web.commons.ext.beetl.HtmlEscapeFormat
|
||||
#用法: ${"wizzer",escape}
|
||||
beetl.FT.filesize=io.v.nutz.web.commons.ext.beetl.FileSizeFormat
|
||||
#用法: ${10241024,filesize}
|
||||
beetl.FT.html2txt=io.v.nutz.web.commons.ext.beetl.Html2TxtFormat
|
||||
#用法: ${"",html2txt="100"} 截取100字符
|
||||
beetl.FT.strlen=io.v.nutz.web.commons.ext.beetl.StrlenFormat
|
||||
#用法: ${"",strlen="100"} 截取100字符
|
||||
#获取系统参数
|
||||
beetl.FN.getSysConfig=io.v.nutz.web.commons.ext.beetl.GetSysConfig
|
||||
#==============================================================
|
||||
#Configure Main Scheduler Properties
|
||||
#==============================================================
|
||||
#quartz延迟启动秒数
|
||||
quartz.startupDelay=10
|
||||
quartz.scheduler.instanceName=defaultScheduler
|
||||
quartz.scheduler.instanceId=AUTO
|
||||
#==============================================================
|
||||
#Configure JobStore isClustered=启用集群模式
|
||||
#==============================================================
|
||||
quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
|
||||
quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
|
||||
#quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
|
||||
#quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.oracle.OracleDelegate
|
||||
#Other delegates can see: http://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-lesson-09.html
|
||||
quartz.jobStore.dataSource=myDS
|
||||
quartz.jobStore.tablePrefix=SYS_QRTZ_
|
||||
quartz.jobStore.isClustered=true
|
||||
quartz.jobStore.clusterCheckinInterval=20000
|
||||
quartz.jobStore.maxMisfiresToHandleAtATime=120
|
||||
quartz.jobStore.misfireThreshold=120000
|
||||
quartz.jobStore.txIsolationLevelSerializable=false
|
||||
#==============================================================
|
||||
#Configure ThreadPool
|
||||
#==============================================================
|
||||
quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
|
||||
quartz.threadPool.threadCount=2
|
||||
quartz.threadPool.threadPriority=5
|
||||
quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
|
||||
#==============================================================
|
||||
#Skip Check Update
|
||||
#update:true
|
||||
#not update:false
|
||||
#==============================================================
|
||||
quartz.scheduler.skipUpdateCheck=true
|
||||
#============================================================================
|
||||
# Configure Plugins
|
||||
#============================================================================
|
||||
quartz.plugin.triggHistory.class=org.quartz.plugins.history.LoggingJobHistoryPlugin
|
||||
quartz.plugin.shutdownhook.class=org.quartz.plugins.management.ShutdownHookPlugin
|
||||
quartz.plugin.shutdownhook.cleanShutdown=true
|
||||
#============================================================================
|
||||
# NutDao dataSource
|
||||
#============================================================================
|
||||
quartz.dataSource.myDS.connectionProvider.class=io.v.nutz.task.conn.NutConnectionProvider
|
||||
logback.exts.loglevel.cache.prefix=budwk5mini:logback:loglevel:
|
||||
#动态修改日志等级
|
||||
logback.exts.loglevel.enabled=true
|
||||
#心跳间隔(单位:秒)
|
||||
logback.exts.loglevel.heartbeat=15
|
||||
#为应用管理提供支持,启用获取部署版本号,结合守护进程使用
|
||||
# 详见 https://github.com/Wizzercn/PythonWk
|
||||
logback.exts.deploy.enabled=false
|
||||
#为应用管理提供支持,部署根路径
|
||||
logback.exts.deploy.root=/data/budwk5mini
|
||||
#应用管理通信接口签名,正式环境务必更改
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
____ ___ ___ __ _______ __ __ _ _
|
||||
| _ \ | \ \ / / | \ \ / / ____| | \/ (_) (_)
|
||||
| |_) |_ _ __| |\ \ /\ / /| | _______\ \ / /| |__ | \ / |_ _ __ _
|
||||
| _ <| | | |/ _` | \ \/ \/ / | |/ /______\ \/ / |___ \ | |\/| | | '_ \| |
|
||||
| |_) | |_| | (_| | \ /\ / | < \ / ___) | | | | | | | | | |
|
||||
|____/ \__,_|\__,_| \/ \/ |_|\_\ \/ |____/ |_| |_|_|_| |_|_|
|
||||
|
||||
:: Built with BudWk.com [wizzer@qq.com]
|
||||
@@ -0,0 +1,18 @@
|
||||
var chain={
|
||||
"default" : {
|
||||
"ps" : [
|
||||
"io.v.nutz.web.commons.proc.LogTimeProcessor",
|
||||
"io.v.nutz.web.commons.proc.GlobalsSettingProcessor",
|
||||
"org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor",
|
||||
"org.nutz.mvc.impl.processor.EncodingProcessor",
|
||||
"org.nutz.mvc.impl.processor.ModuleProcessor",
|
||||
"org.nutz.mvc.impl.processor.ActionFiltersProcessor",
|
||||
"io.v.nutz.web.commons.proc.XssSqlFilterProcessor",
|
||||
"io.v.nutz.web.commons.proc.NutShiroProcessor",
|
||||
"org.nutz.mvc.impl.processor.AdaptorProcessor",
|
||||
"org.nutz.mvc.impl.processor.MethodInvokeProcessor",
|
||||
"org.nutz.mvc.impl.processor.ViewProcessor"
|
||||
],
|
||||
"error" : 'io.v.nutz.web.commons.proc.WkFailProcessor'
|
||||
}
|
||||
};
|
||||
@@ -0,0 +1,50 @@
|
||||
/* cms_menu_01 */
|
||||
update sys_menu set location=10 where path='0001'
|
||||
/* cms_menu_02 */
|
||||
update sys_menu set location=8 where path='0002'
|
||||
/* cms_menu_03 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('02e86a61e99746bea34236ea73dd52a5','','0003','CMS','CMS','menu','','','ti-world','1','0','cms',NULL,'9','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895671','0')
|
||||
/* cms_menu_04 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('077cb6be4c7c41cc8955ee045a4f0286','68cdbf694f71445c8587a20234d6fe31','0003000300020001','添加链接','Add','data','','','','0','0','cms.link.link.add',NULL,'47','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897043','0')
|
||||
/* cms_menu_05 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('17500ef3a9e44b4fabb240162a164fcb','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020003','删除文章','Delete','data','','','','0','0','cms.content.article.delete',NULL,'40','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896170','0')
|
||||
/* cms_menu_06 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('31ed2243077c44448cce26abfd5ae574','9822bafbe3454dfd8e8b974ebc304d03','0003000300010002','修改分类','Edit','data','','','','0','0','cms.link.class.edit',NULL,'44','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896957','0')
|
||||
/* cms_menu_07 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('33aed9298643424783116e0cf0f7fcbe','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020001','添加文章','Add','data','','','','0','0','cms.content.article.add',NULL,'38','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896151','0')
|
||||
/* cms_menu_08 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('36e0faf5062b4f6b95d4167cbb1f8fea','68cdbf694f71445c8587a20234d6fe31','0003000300020002','修改链接','Edit','data','','','','0','0','cms.link.link.edit',NULL,'48','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897051','0')
|
||||
/* cms_menu_09 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3c24111091ad4a70ad2d9cc361311d2f','68cdbf694f71445c8587a20234d6fe31','0003000300020003','删除链接','Delete','data','','','','0','0','cms.link.link.delete',NULL,'49','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897060','0')
|
||||
/* cms_menu_10 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3f330d729ca34dc9825c46122be1bfae','02e86a61e99746bea34236ea73dd52a5','00030003','广告链接','AD','menu','','','ti-link','1','0','cms.link',NULL,'41','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468896230','0')
|
||||
/* cms_menu_11 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4781372b00bb4d52b429b58e72b80c68','b2631bbdbf824cc4b74d819c87962c0d','0003000200010001','添加栏目','Add','data','','','','0','0','cms.content.channel.add',NULL,'33','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896049','0')
|
||||
/* cms_menu_12 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('50ba60ee650e4c739e6abc3ab71e4960','b2631bbdbf824cc4b74d819c87962c0d','0003000200010004','栏目排序','Sort','data','','','','0','0','cms.content.channel.sort',NULL,'36','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896092','0')
|
||||
/* cms_menu_13 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6075fc0cf0ef441b9d93cc3cab3445bf','6b6de8c720c645a1808e1c3e9ccbfc90','000300020002','文章管理','Article','menu','/platform/cms/article','data-pjax','','1','0','cms.content.article',NULL,'37','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896141','0')
|
||||
/* cms_menu_14 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('68cdbf694f71445c8587a20234d6fe31','3f330d729ca34dc9825c46122be1bfae','000300030002','链接管理','Link','menu','/platform/cms/link/link','data-pjax','','1','0','cms.link.link',NULL,'46','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468897031','0')
|
||||
/* cms_menu_15 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6b6de8c720c645a1808e1c3e9ccbfc90','02e86a61e99746bea34236ea73dd52a5','00030002','内容管理','Content','menu','','','ti-pencil-alt','1','0','cms.content',NULL,'31','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895990','0')
|
||||
/* cms_menu_16 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7125a72beee34b21ab3df9bf01b7bce6','9822bafbe3454dfd8e8b974ebc304d03','0003000300010003','删除分类','Delete','data','','','','0','0','cms.link.class.delete',NULL,'45','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896968','0')
|
||||
/* cms_menu_17 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('73a29d3f99224426b5a87c92da122275','d1e991ad38a8424daf9f7eb000ee27f4','0003000100010001','保存配置','Save','data','','','','0','0','cms.site.settings.save',NULL,'30','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468895899','0')
|
||||
/* cms_menu_18 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7db6207d0dab4d6e95a7eee4f2efe875','9822bafbe3454dfd8e8b974ebc304d03','0003000300010001','添加分类','Add','data','','','','0','0','cms.link.class.add',NULL,'43','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896947','0')
|
||||
/* cms_menu_19 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9822bafbe3454dfd8e8b974ebc304d03','3f330d729ca34dc9825c46122be1bfae','000300030001','链接分类','Class','menu','/platform/cms/link/class','data-pjax','','1','0','cms.link.class',NULL,'42','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896932','0')
|
||||
/* cms_menu_20 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b2631bbdbf824cc4b74d819c87962c0d','6b6de8c720c645a1808e1c3e9ccbfc90','000300020001','栏目管理','Channel','menu','/platform/cms/channel','data-pjax','','1','0','cms.content.channel',NULL,'32','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896018','0')
|
||||
/* cms_menu_21 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d1e991ad38a8424daf9f7eb000ee27f4','d920314e925c451da6d881e7a29743b7','000300010001','网站配置','Settings','menu','/platform/cms/site','data-pjax','','1','0','cms.site.settings',NULL,'29','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468895881','0')
|
||||
/* cms_menu_22 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d920314e925c451da6d881e7a29743b7','02e86a61e99746bea34236ea73dd52a5','00030001','站点管理','Site','menu','','','ti-world','1','0','cms.site',NULL,'28','1','1a19ef09b12344b4a797d6e6dfe7fb29','1468895821','0')
|
||||
/* cms_menu_23 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e461c62a1d5441619cd35612f3b40691','b2631bbdbf824cc4b74d819c87962c0d','0003000200010002','修改栏目','Edit','data','','','','0','0','cms.content.channel.edit',NULL,'34','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896060','0')
|
||||
/* cms_menu_24 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ef9f436c61654ec09efbfa79a40061cf','6075fc0cf0ef441b9d93cc3cab3445bf','0003000200020002','修改文章','Edit','data','','','','0','0','cms.content.article.edit',NULL,'39','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896159','0')
|
||||
/* cms_menu_25 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('f6fba69c3b704d79834b8bd2cc753729','b2631bbdbf824cc4b74d819c87962c0d','0003000200010003','删除栏目','Delete','data','','','','0','0','cms.content.channel.delete',NULL,'35','0','1a19ef09b12344b4a797d6e6dfe7fb29','1468896072','0')
|
||||
@@ -0,0 +1,103 @@
|
||||
/* wx_menu_01 */
|
||||
update sys_menu set location=10 where path='0001'
|
||||
/* wx_menu_02 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b0edc6861a494b79b97990dc05f0a524','','0002','微信','Wechat','menu','','','fa fa-weixin','1','0','wx',NULL,'8','1','','1467471229','0')
|
||||
/* wx_menu_03 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e4256d7b0ffc4a02906cf900322b6213','b0edc6861a494b79b97990dc05f0a524','00020001','微信会员','Member','menu','','','fa fa-user','1','0','wx.user',NULL,'1','1','','1467471292','0')
|
||||
/* wx_menu_04 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('b19b23b0459a4754bf1fb8cb234450f2','e4256d7b0ffc4a02906cf900322b6213','000200010001','会员列表','List','menu','/platform/wx/user/index','data-pjax','','1','0','wx.user.list',NULL,'2','0','','1467471357','0')
|
||||
/* wx_menu_05 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4dc997fef71e4862b9db22de8e99a618','b19b23b0459a4754bf1fb8cb234450f2','0002000100010001','同步会员信息','Sync','data','','','','0','0','wx.user.list.sync',NULL,'0','0','','1467473044','0')
|
||||
/* wx_menu_06 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9f20a757a6bc40ddbb650c70debbf660','b0edc6861a494b79b97990dc05f0a524','00020002','消息管理','Message','menu','','','ti-pencil-alt','1','0','wx.msg',NULL,'3','1','','1467471415','0')
|
||||
/* wx_menu_07 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('f426468abf714b1599729f8c36ebbb0d','9f20a757a6bc40ddbb650c70debbf660','000200020001','会员消息','Msg','menu','/platform/wx/msg/user','data-pjax','','1','0','wx.msg.user',NULL,'4','1','','1467471478','0')
|
||||
/* wx_menu_08 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('1734e586e96941268a4c5248b593cef9','f426468abf714b1599729f8c36ebbb0d','0002000200010001','回复消息','Reply','data','','','','0','0','wx.msg.user.reply',NULL,'0','0','','1467473127','0')
|
||||
/* wx_menu_09 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6bb17a41f6394ed0a8a6faf5ff781354','9f20a757a6bc40ddbb650c70debbf660','000200020002','群发消息','Mass','menu','/platform/wx/msg/mass','data-pjax','','1','0','wx.msg.mass',NULL,'5','0','','1467471561','0')
|
||||
/* wx_menu_10 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('56d0658c5a8848818ac05e8ffa5c0570','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020001','添加图文','Add','data','','','','0','0','wx.msg.mass.addNews',NULL,'0','0','','1467473338','0')
|
||||
/* wx_menu_11 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ce709456e867425297955b3c40406d7e','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020002','删除图文','Delete','data','','','','0','0','wx.msg.mass.delNews',NULL,'0','0','','1467473363','0')
|
||||
/* wx_menu_12 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3099f497480c4b1987bce3f3a26c3fb4','6bb17a41f6394ed0a8a6faf5ff781354','0002000200020003','群发消息','Push','data','','','','0','0','wx.msg.mass.pushNews',NULL,'0','0','','1467473400','0')
|
||||
/* wx_menu_13 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('4cd8e4e9519e4cff95465194fdcc8d88','b0edc6861a494b79b97990dc05f0a524','00020003','自动回复','AutoReply','menu','','','ti-back-left','1','0','wx.reply',NULL,'6','1','','1467471610','0')
|
||||
/* wx_menu_14 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('234f8ec3c2bc42bf9f6202aecae36fd6','4cd8e4e9519e4cff95465194fdcc8d88','000200030001','文本内容','Txt','menu','/platform/wx/reply/txt','data-pjax','','1','0','wx.reply.txt',NULL,'7','0','','1467471884','0')
|
||||
/* wx_menu_15 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c3a44b478d3241b899b9c3f4611bc2b6','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010001','添加文本','Add','data','','','','0','0','wx.reply.txt.add',NULL,'0','0','','1467473460','0')
|
||||
/* wx_menu_16 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fd63a8e389e04ff3a86c3cea53a3b9d5','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010002','修改文本','Edit','data','','','','0','0','wx.reply.txt.edit',NULL,'0','0','','1467473519','0')
|
||||
/* wx_menu_17 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7c040dfd8db347e5956a3bc1764653dc','234f8ec3c2bc42bf9f6202aecae36fd6','0002000300010003','删除文本','Delete','data','','','','0','0','wx.reply.txt.delete',NULL,'0','0','','1467473540','0')
|
||||
/* wx_menu_18 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('234f8ec3c2bc42bf9f6202aecae36f99','4cd8e4e9519e4cff95465194fdcc8d88','000200030005','图片内容','Img','menu','/platform/wx/reply/img','data-pjax','','1','0','wx.reply.img',NULL,'8','0','','1467471884','0')
|
||||
/* wx_menu_19 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c3a44b478d3241b899b9c3f4611bc216','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050001','添加图片','Add','data','','','','0','0','wx.reply.img.add',NULL,'0','0','','1467473460','0')
|
||||
/* wx_menu_20 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fd63a8e389e04ff3a86c3cea53a3b925','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050002','修改图片','Edit','data','','','','0','0','wx.reply.img.edit',NULL,'0','0','','1467473519','0')
|
||||
/* wx_menu_21 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('7c040dfd8db347e5956a3bc17646533c','234f8ec3c2bc42bf9f6202aecae36f99','0002000300050003','删除图片','Delete','data','','','','0','0','wx.reply.img.delete',NULL,'0','0','','1467473540','0')
|
||||
/* wx_menu_22 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('17e1ee23ca1443f1bc886c2f5eb7c24b','4cd8e4e9519e4cff95465194fdcc8d88','000200030002','图文内容','News','menu','/platform/wx/reply/news','data-pjax','','1','0','wx.reply.news',NULL,'9','0','','1467471926','0')
|
||||
/* wx_menu_23 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2275cb125710414e91b617dd7c62f12c','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020001','添加图文','add','data','','','','0','0','wx.reply.news.add',NULL,'0','0','','1467473585','0')
|
||||
/* wx_menu_24 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0a972ce655cb4c84809d58668b655900','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020002','修改图文','Edit','data','','','','0','0','wx.reply.news.edit',NULL,'0','0','','1467473596','0')
|
||||
/* wx_menu_25 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('fc52d5284b8f4522802383c1ef732242','17e1ee23ca1443f1bc886c2f5eb7c24b','0002000300020003','删除图文','Delete','data','','','','0','0','wx.reply.news.delete',NULL,'0','0','','1467473606','0')
|
||||
/* wx_menu_26 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2cb327ad59b140828fd26eb2a46cb948','4cd8e4e9519e4cff95465194fdcc8d88','000200030003','关注自动回复','Follow','menu','/platform/wx/reply/conf/follow','data-pjax','','1','0','wx.reply.follow',NULL,'10','0','','1467472280','0')
|
||||
/* wx_menu_27 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('dd965b2c1dfd493fb5efc7e4bcac99d4','2cb327ad59b140828fd26eb2a46cb948','0002000300030001','添加绑定','Add','data','','','','0','0','wx.reply.follow.add',NULL,'0','0','','1467474026','0')
|
||||
/* wx_menu_28 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('30a5e70a1456447ebf90b5546e9bc321','2cb327ad59b140828fd26eb2a46cb948','0002000300030002','修改绑定','Edit','data','','','','0','0','wx.reply.follow.edit',NULL,'0','0','','1467474056','0')
|
||||
/* wx_menu_29 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2a63040409094f1e9dc535dd78ce15b7','2cb327ad59b140828fd26eb2a46cb948','0002000300030003','删除绑定','Delete','data','','','','0','0','wx.reply.follow.delete',NULL,'0','0','','1467474080','0')
|
||||
/* wx_menu_30 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0706112ff5dc46e388064a99bcdb0561','4cd8e4e9519e4cff95465194fdcc8d88','000200030004','关键词回复','Keyword','menu','/platform/wx/reply/conf/keyword','data-pjax','','1','0','wx.reply.keyword',NULL,'11','0','','1467472362','0')
|
||||
/* wx_menu_31 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e864c78aba63448892cbcb6a3a7f4da7','0706112ff5dc46e388064a99bcdb0561','0002000300040001','添加绑定','Add','data','','','','0','0','wx.reply.keyword.add',NULL,'0','0','','1467474113','0')
|
||||
/* wx_menu_32 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('ff6cd243a77c4ae98dacf6149c816c75','0706112ff5dc46e388064a99bcdb0561','0002000300040002','修改绑定','Edit','data','','','','0','0','wx.reply.keyword.edit',NULL,'0','0','','1467474125','0')
|
||||
/* wx_menu_33 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('733d3f35d49f45af99ca9220048583ba','0706112ff5dc46e388064a99bcdb0561','0002000300040003','删除绑定','Delete','data','','','','0','0','wx.reply.keyword.delete',NULL,'0','0','','1467474136','0')
|
||||
/* wx_menu_34 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('bcf64d623fdd4519ae345b7a08c071a1','b0edc6861a494b79b97990dc05f0a524','00020004','微信配置','Config','menu','','','fa fa-weixin','1','0','wx.conf',NULL,'12','1','','1467472498','0')
|
||||
/* wx_menu_35 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('66cc21d7ce104dd6877cbce114c59fb3','bcf64d623fdd4519ae345b7a08c071a1','000200040001','帐号配置','Account','menu','/platform/wx/conf/account','data-pjax','','1','0','wx.conf.account',NULL,'13','0','','1467472624','0')
|
||||
/* wx_menu_36 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('309dc29ad3c34408a68df8f867a5c9ff','66cc21d7ce104dd6877cbce114c59fb3','0002000400010001','添加帐号','Add','data','','','','0','0','wx.conf.account.add',NULL,'0','0','','1467474187','0')
|
||||
/* wx_menu_37 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('96554b09a2dd4f82bab7546fa59acd35','66cc21d7ce104dd6877cbce114c59fb3','0002000400010002','修改帐号','Edit','data','','','','0','0','wx.conf.account.edit',NULL,'0','0','','1467474197','0')
|
||||
/* wx_menu_38 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('d568f4c2b687404e8aec7b9edcae5767','66cc21d7ce104dd6877cbce114c59fb3','0002000400010003','删除帐号','Delete','data','','','','0','0','wx.conf.account.delete',NULL,'0','0','','1467474209','0')
|
||||
/* wx_menu_39 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('2fab774f8b6d40cb9d7e187babab2d91','bcf64d623fdd4519ae345b7a08c071a1','000200040002','菜单配置','Menu','menu','/platform/wx/conf/menu','data-pjax','','1','0','wx.conf.menu',NULL,'14','0','','1467472649','0')
|
||||
/* wx_menu_40 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('45d958ca78304f25b51f6c71cf66f6d8','2fab774f8b6d40cb9d7e187babab2d91','0002000400020001','添加菜单','Add','data','','','','0','0','wx.conf.menu.add',NULL,'0','0','','1467474283','0')
|
||||
/* wx_menu_41 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('44da90bc76a5419a841f4924333f7a66','2fab774f8b6d40cb9d7e187babab2d91','0002000400020002','修改菜单','Edit','data','','','','0','0','wx.conf.menu.edit',NULL,'0','0','','1467474294','0')
|
||||
/* wx_menu_42 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('9a9557177d334c209cf73c3817fe3b63','2fab774f8b6d40cb9d7e187babab2d91','0002000400020003','删除菜单','Delete','data','','','','0','0','wx.conf.menu.delete',NULL,'0','0','','1467474304','0')
|
||||
/* wx_menu_43 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('0a43d291e0c94ad88c8b690009279e34','2fab774f8b6d40cb9d7e187babab2d91','0002000400020004','保存排序','Save','data','','','','0','0','wx.conf.menu.sort',NULL,'0','0','','1467474314','0')
|
||||
/* wx_menu_44 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('5244f5c38eb24b918e9ad64d456daa38','2fab774f8b6d40cb9d7e187babab2d91','0002000400020005','推送到微信','Push','data','','','','0','0','wx.conf.menu.push',NULL,'0','0','','1467474330','0')
|
||||
/* wx_menu_45 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('6afc5075913d4df4b44a6476080e35a0','b0edc6861a494b79b97990dc05f0a524','00020005','模板消息','Template','menu','','','ti-notepad','1','0','wx.tpl',NULL,'50','1','','1470406797','0')
|
||||
/* wx_menu_46 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('1385ae887e5c4b8aa33fbf228be7f907','6afc5075913d4df4b44a6476080e35a0','000200050001','模板编号','Id','menu','/platform/wx/tpl/id','data-pjax','','1','0','wx.tpl.id',NULL,'51','0','','1470406854','0')
|
||||
/* wx_menu_47 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('e6b6224617b04090a76e46a4b048fb96','1385ae887e5c4b8aa33fbf228be7f907','0002000500010001','添加编号','Add','data','','','','0','0','wx.tpl.id.add',NULL,'54','0','','1470407055','0')
|
||||
/* wx_menu_48 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('3888f05aa4064f788ba7ec51c495ce7c','1385ae887e5c4b8aa33fbf228be7f907','0002000500010002','删除编号','Delete','data','','','','0','0','wx.tpl.id.delete',NULL,'55','0','','1470407068','0')
|
||||
/* wx_menu_49 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('cabbe834a7474675b899e8442b5c2604','6afc5075913d4df4b44a6476080e35a0','000200050002','模板列表','List','menu','/platform/wx/tpl/list','data-pjax','','1','0','wx.tpl.list',NULL,'52','0','','1470406883','0')
|
||||
/* wx_menu_50 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('a11163584dfe456cbfd6fb2d4b74391b','cabbe834a7474675b899e8442b5c2604','0002000500020001','获取列表','Get','data','','','','0','0','wx.tpl.list.get',NULL,'56','0','','1470407390','0')
|
||||
/* wx_menu_51 */
|
||||
insert into sys_menu (id, parentId, path, name, aliasName, type, href, target, icon, showit, disabled, permission, note, location, hasChildren, createdBy, createdAt, delFlag) values('c76a84f871d047db955dd1465c845ac1','6afc5075913d4df4b44a6476080e35a0','000200050003','发送记录','Log','menu','/platform/wx/tpl/log','data-pjax','','1','0','wx.tpl.log',NULL,'53','0','','1470406926','0')
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,193 @@
|
||||
<?xml version="1.0"?>
|
||||
<?mso-application progid="Excel.Sheet"?>
|
||||
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
|
||||
>
|
||||
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
|
||||
<Author>Administrator</Author>
|
||||
<LastAuthor>11386</LastAuthor>
|
||||
<Created>2019-11-13T03:15:50Z</Created>
|
||||
<LastSaved>2019-12-15T12:17:40Z</LastSaved>
|
||||
<Company>Microsoft</Company>
|
||||
<Version>16.00</Version>
|
||||
</DocumentProperties>
|
||||
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
|
||||
<AllowPNG/>
|
||||
</OfficeDocumentSettings>
|
||||
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<WindowHeight>5532</WindowHeight>
|
||||
<WindowWidth>16212</WindowWidth>
|
||||
<WindowTopX>32767</WindowTopX>
|
||||
<WindowTopY>32767</WindowTopY>
|
||||
<ProtectStructure>False</ProtectStructure>
|
||||
<ProtectWindows>False</ProtectWindows>
|
||||
</ExcelWorkbook>
|
||||
<Styles>
|
||||
<Style ss:ID="Default" ss:Name="Normal">
|
||||
<Alignment ss:Vertical="Center"/>
|
||||
<Borders/>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
<NumberFormat/>
|
||||
<Protection/>
|
||||
</Style>
|
||||
<Style ss:ID="s62">
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s64">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
|
||||
<Font ss:FontName="方正小标宋简体" x:CharSet="134" ss:Size="16" ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s66">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
|
||||
<Borders/>
|
||||
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
|
||||
ss:Color="#000000" ss:Bold="1"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s68">
|
||||
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
|
||||
ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s70">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Bold="1"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s71">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s72">
|
||||
<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
</Styles>
|
||||
<Worksheet ss:Name="Sheet1">
|
||||
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="999" x:FullColumns="1"
|
||||
x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="328.20000000000005"
|
||||
ss:DefaultRowHeight="14.55">
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="34.199999999999996"/>
|
||||
<Column ss:StyleID="s62" ss:Width="329.40000000000003"/>
|
||||
<Column ss:StyleID="s62" ss:Width="93"/>
|
||||
<Column ss:StyleID="s62" ss:Width="115.2"/>
|
||||
<Column ss:StyleID="s62" ss:Width="317.39999999999998"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="85.2"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="68.399999999999991"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="76.8"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="87.6"/>
|
||||
<Row ss:AutoFitHeight="0" ss:Height="20.549999999999997">
|
||||
<Cell ss:MergeAcross="7" ss:StyleID="s64"><Data ss:Type="String">${meetingName}提案承办分单位表</Data></Cell>
|
||||
</Row>
|
||||
<Row ss:AutoFitHeight="0">
|
||||
<Cell ss:MergeAcross="7" ss:StyleID="s66"><Data ss:Type="String">${unitName}</Data></Cell>
|
||||
</Row>
|
||||
<Row ss:AutoFitHeight="0">
|
||||
<Cell ss:MergeAcross="7" ss:StyleID="s68"><Data ss:Type="String">${principal}</Data></Cell>
|
||||
</Row>
|
||||
<Row ss:AutoFitHeight="0" ss:Height="43.199999999999996">
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">序号</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">提案案名</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">承办单位</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">协办单位</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人是否已签署反馈意见</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">备注</Data></Cell>
|
||||
</Row>
|
||||
<#list pros as xx>
|
||||
<Row ss:AutoFitHeight="0">
|
||||
<Cell ss:StyleID="s71"><Data ss:Type="Number">${xx_index+1}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.proposalName!}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.username!}(${xx.unitname!})</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruMaster!}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruSlave!}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String"><#if xx.feedback??>已签署<#else>未签署</#if></Data></Cell>
|
||||
<Cell ss:StyleID="s70"/>
|
||||
</Row>
|
||||
</#list>
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Unsynced/>
|
||||
<Selected/>
|
||||
<Panes>
|
||||
<Pane>
|
||||
<Number>3</Number>
|
||||
<ActiveRow>4</ActiveRow>
|
||||
<ActiveCol>7</ActiveCol>
|
||||
</Pane>
|
||||
</Panes>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
<Worksheet ss:Name="Sheet2">
|
||||
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
|
||||
x:FullRows="1" ss:DefaultRowHeight="14.55">
|
||||
<Row ss:AutoFitHeight="0"/>
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Unsynced/>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
<Worksheet ss:Name="Sheet3">
|
||||
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
|
||||
x:FullRows="1" ss:DefaultRowHeight="14.55">
|
||||
<Row ss:AutoFitHeight="0"/>
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Unsynced/>
|
||||
<Print>
|
||||
<ValidPrinterInfo/>
|
||||
<PaperSizeIndex>9</PaperSizeIndex>
|
||||
<HorizontalResolution>600</HorizontalResolution>
|
||||
<VerticalResolution>600</VerticalResolution>
|
||||
</Print>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
</Workbook>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,194 @@
|
||||
<?xml version="1.0"?>
|
||||
<?mso-application progid="Excel.Sheet"?>
|
||||
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
|
||||
xmlns:o="urn:schemas-microsoft-com:office:office"
|
||||
xmlns:x="urn:schemas-microsoft-com:office:excel"
|
||||
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
|
||||
xmlns:html="http://www.w3.org/TR/REC-html40">
|
||||
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
|
||||
<Author>Administrator</Author>
|
||||
<LastAuthor>11386</LastAuthor>
|
||||
<Created>2019-11-13T03:15:50Z</Created>
|
||||
<LastSaved>2019-12-15T12:17:40Z</LastSaved>
|
||||
<Company>Microsoft</Company>
|
||||
<Version>16.00</Version>
|
||||
</DocumentProperties>
|
||||
<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
|
||||
<AllowPNG/>
|
||||
</OfficeDocumentSettings>
|
||||
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<WindowHeight>5532</WindowHeight>
|
||||
<WindowWidth>16212</WindowWidth>
|
||||
<WindowTopX>32767</WindowTopX>
|
||||
<WindowTopY>32767</WindowTopY>
|
||||
<ProtectStructure>False</ProtectStructure>
|
||||
<ProtectWindows>False</ProtectWindows>
|
||||
</ExcelWorkbook>
|
||||
<Styles>
|
||||
<Style ss:ID="Default" ss:Name="Normal">
|
||||
<Alignment ss:Vertical="Center"/>
|
||||
<Borders/>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
<NumberFormat/>
|
||||
<Protection/>
|
||||
</Style>
|
||||
<Style ss:ID="s62">
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s64">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
|
||||
<Font ss:FontName="方正小标宋简体" x:CharSet="134" ss:Size="16" ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s66">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
|
||||
<Borders/>
|
||||
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
|
||||
ss:Color="#000000" ss:Bold="1"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s68">
|
||||
<Alignment ss:Horizontal="Left" ss:Vertical="Center"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="黑体" x:CharSet="134" x:Family="Modern" ss:Size="11"
|
||||
ss:Color="#000000"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s70">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Bold="1"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s71">
|
||||
<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
<Style ss:ID="s72">
|
||||
<Alignment ss:Horizontal="Left" ss:Vertical="Center" ss:WrapText="1"/>
|
||||
<Borders>
|
||||
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
|
||||
</Borders>
|
||||
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11"/>
|
||||
<Interior/>
|
||||
</Style>
|
||||
</Styles>
|
||||
<Worksheet ss:Name="Sheet1">
|
||||
<Table ss:ExpandedColumnCount="9" ss:ExpandedRowCount="999" x:FullColumns="1"
|
||||
x:FullRows="1" ss:StyleID="s62" ss:DefaultColumnWidth="328.20000000000005"
|
||||
ss:DefaultRowHeight="14.55">
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="34.199999999999996"/>
|
||||
<Column ss:StyleID="s62" ss:Width="329.40000000000003"/>
|
||||
<Column ss:StyleID="s62" ss:Width="93"/>
|
||||
<Column ss:StyleID="s62" ss:Width="115.2"/>
|
||||
<Column ss:StyleID="s62" ss:Width="317.39999999999998"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="85.2"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="68.399999999999991"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="76.8"/>
|
||||
<Column ss:StyleID="s62" ss:AutoFitWidth="0" ss:Width="87.6"/>
|
||||
<Row ss:AutoFitHeight="0" ss:Height="20.549999999999997">
|
||||
<Cell ss:MergeAcross="7" ss:StyleID="s64"><Data ss:Type="String">${meetingName}提案承办分单位表</Data></Cell>
|
||||
</Row>
|
||||
<Row ss:AutoFitHeight="0">
|
||||
<Cell ss:MergeAcross="7" ss:StyleID="s66"><Data ss:Type="String">${unitName}</Data></Cell>
|
||||
</Row>
|
||||
<Row ss:AutoFitHeight="0">
|
||||
<Cell ss:MergeAcross="7" ss:StyleID="s68"><Data ss:Type="String">${principal}</Data></Cell>
|
||||
</Row>
|
||||
<Row ss:AutoFitHeight="0" ss:Height="43.199999999999996">
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">序号</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">提案案名</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">承办单位</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">协办单位</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">提案人是否已签署反馈意见</Data></Cell>
|
||||
<Cell ss:StyleID="s70"><Data ss:Type="String">备注</Data></Cell>
|
||||
</Row>
|
||||
<#list pros as xx>
|
||||
<Row ss:AutoFitHeight="0">
|
||||
<Cell ss:StyleID="s71"><Data ss:Type="Number">${xx_index+1}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.proposalName!}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.username!}(${xx.unitname!})</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruMaster!}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String">${xx.pruSlave!}</Data></Cell>
|
||||
<Cell ss:StyleID="s72"><Data ss:Type="String"><#if xx.feedback??>已签署<#else>未签署</#if></Data></Cell>
|
||||
<Cell ss:StyleID="s70"/>
|
||||
</Row>
|
||||
</#list>
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Unsynced/>
|
||||
<Selected/>
|
||||
<Panes>
|
||||
<Pane>
|
||||
<Number>3</Number>
|
||||
<ActiveRow>4</ActiveRow>
|
||||
<ActiveCol>7</ActiveCol>
|
||||
</Pane>
|
||||
</Panes>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
<Worksheet ss:Name="Sheet2">
|
||||
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
|
||||
x:FullRows="1" ss:DefaultRowHeight="14.55">
|
||||
<Row ss:AutoFitHeight="0"/>
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Unsynced/>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
<Worksheet ss:Name="Sheet3">
|
||||
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
|
||||
x:FullRows="1" ss:DefaultRowHeight="14.55">
|
||||
<Row ss:AutoFitHeight="0"/>
|
||||
</Table>
|
||||
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
|
||||
<PageSetup>
|
||||
<Header x:Margin="0.3"/>
|
||||
<Footer x:Margin="0.3"/>
|
||||
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
|
||||
</PageSetup>
|
||||
<Unsynced/>
|
||||
<Print>
|
||||
<ValidPrinterInfo/>
|
||||
<PaperSizeIndex>9</PaperSizeIndex>
|
||||
<HorizontalResolution>600</HorizontalResolution>
|
||||
<VerticalResolution>600</VerticalResolution>
|
||||
</Print>
|
||||
<ProtectObjects>False</ProtectObjects>
|
||||
<ProtectScenarios>False</ProtectScenarios>
|
||||
</WorksheetOptions>
|
||||
</Worksheet>
|
||||
</Workbook>
|
||||
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user