Browse Source

尼尔斯活动铸造导出

licailing 4 years ago
parent
commit
dbf61f399a

+ 60 - 0
src/main/java/com/izouma/nineth/dto/MintOrderDTO.java

@@ -0,0 +1,60 @@
+package com.izouma.nineth.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.MintMaterialListConverter;
+import com.izouma.nineth.domain.BaseEntity;
+import com.izouma.nineth.domain.MintMaterial;
+import com.izouma.nineth.domain.MintOrder;
+import com.izouma.nineth.enums.MintOrderStatus;
+import com.izouma.nineth.enums.PayMethod;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+
+import javax.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("铸造订单")
+public class MintOrderDTO {
+
+    @ExcelProperty("ID")
+    private Long id;
+
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @ExcelProperty("手机号")
+    private String phone;
+
+    @ExcelProperty("铸造时间")
+    private LocalDateTime createdAt;
+
+    @ExcelProperty("铸造材料")
+    private String material;
+
+    @ExcelProperty("状态")
+    private String status;
+
+    @ExcelProperty("是否消耗藏品")
+    private String consume;
+
+    public MintOrderDTO(MintOrder mintOrder) {
+        BeanUtils.copyProperties(mintOrder, this);
+        this.status = mintOrder.getStatus().getDescription();
+        this.consume = mintOrder.isConsume() ? "是" : "否";
+        this.material = mintOrder.getMaterial().stream().map(MintMaterial::getName).collect(Collectors.joining(","));
+    }
+
+}

+ 12 - 2
src/main/java/com/izouma/nineth/web/MintOrderController.java

@@ -1,6 +1,8 @@
 package com.izouma.nineth.web;
+
 import com.izouma.nineth.converter.LongArrayConverter;
 import com.izouma.nineth.domain.MintOrder;
+import com.izouma.nineth.dto.MintOrderDTO;
 import com.izouma.nineth.service.MintOrderService;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
@@ -8,6 +10,7 @@ import com.izouma.nineth.repo.MintOrderRepo;
 import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.SecurityUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
@@ -21,7 +24,7 @@ import java.util.List;
 @AllArgsConstructor
 public class MintOrderController extends BaseController {
     private MintOrderService mintOrderService;
-    private MintOrderRepo mintOrderRepo;
+    private MintOrderRepo    mintOrderRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -62,7 +65,14 @@ public class MintOrderController extends BaseController {
     public void create(@RequestParam String assets) {
         LongArrayConverter lc = new LongArrayConverter();
         List<Long> assetIds = lc.convertToEntityAttribute(assets);
-        mintOrderService.create(SecurityUtils.getAuthenticatedUser().getId(),  assetIds);
+        mintOrderService.create(SecurityUtils.getAuthenticatedUser().getId(), assetIds);
+    }
+
+    @ApiOperation("导出尼尔斯")
+    @PostMapping("/excelPhone")
+    public void excelPhone(HttpServletResponse response, @RequestBody PageQuery pageQuery) throws IOException {
+        List<MintOrderDTO> data = all(pageQuery).map(MintOrderDTO::new).getContent();
+        ExcelUtils.export(response, data);
     }
 }
 

File diff suppressed because it is too large
+ 0 - 0
src/main/resources/genjson/MintOrder.json


+ 17 - 1
src/main/vue/src/router.js

@@ -454,6 +454,22 @@ const router = new Router({
                     meta: {
                        title: '铸造活动',
                     },
+               },
+                {
+                    path: '/mintOrderEdit',
+                    name: 'MintOrderEdit',
+                    component: () => import(/* webpackChunkName: "mintOrderEdit" */ '@/views/MintOrderEdit.vue'),
+                    meta: {
+                       title: '铸造订单编辑',
+                    },
+                },
+                {
+                    path: '/mintOrderList',
+                    name: 'MintOrderList',
+                    component: () => import(/* webpackChunkName: "mintOrderList" */ '@/views/MintOrderList.vue'),
+                    meta: {
+                       title: '铸造订单',
+                    },
                }
                 /**INSERT_LOCATION**/
             ]
@@ -514,4 +530,4 @@ router.beforeEach((to, from, next) => {
     }
 });
 
-export default router;
+export default router;

+ 191 - 156
src/main/vue/src/views/MintOrderEdit.vue

@@ -2,164 +2,199 @@
     <div class="edit-view">
         <page-title>
             <el-button @click="$router.go(-1)" :disabled="saving">取消</el-button>
-            <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
-                删除
-            </el-button>
+            <!-- <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">删除</el-button> -->
             <el-button @click="onSave" :loading="saving" type="primary">保存</el-button>
         </page-title>
         <div class="edit-view__content-wrapper">
             <div class="edit-view__content-section">
-                <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right"
-                         size="small"
-                         style="max-width: 500px;">
-                        <el-form-item prop="id" label="ID">
-                                    <el-input-number type="number" v-model="formData.id"></el-input-number>
-                        </el-form-item>
-                        <el-form-item prop="userId" label="userId">
-                                    <el-input-number type="number" v-model="formData.userId"></el-input-number>
-                        </el-form-item>
-                        <el-form-item prop="FreeMarker template error (DEBUG mode; use RETHROW in production!):
-The following has evaluated to null or missing:
-==> field.modelName  [in template "EditViewTemplate.ftl" at line 16, column 47]
+                <el-form
+                    :model="formData"
+                    :rules="rules"
+                    ref="form"
+                    label-width="115px"
+                    label-position="right"
+                    size="small"
+                    style="max-width: 550px"
+                >
+                    <el-form-item prop="userId" label="用户ID">
+                        <el-input-number type="number" v-model="formData.userId" disabled></el-input-number>
+                    </el-form-item>
+                    <el-form-item prop="phone" label="手机号">
+                        <el-input v-model="formData.phone" disabled></el-input>
+                    </el-form-item>
+                    <!-- <el-form-item prop="mintActivityId" label="mintActivityId">
+                        <el-input-number type="number" v-model="formData.mintActivityId"></el-input-number>
+                    </el-form-item> -->
+                    <el-form-item prop="material" label="铸造材料">
+                        <!-- <el-input v-model="formData.material"></el-input> -->
+                        <div v-for="item in formData.material" :key="item" style="margin-bottom: 6px">
+                            <el-input
+                                v-model="item.collectionId"
+                                style="width: 110px; margin-right: 6px"
+                                disabled
+                            ></el-input>
+                            <el-input v-model="item.name" style="width: 315px" disabled></el-input>
+                        </div>
+                    </el-form-item>
+                    <el-form-item prop="consume" label="是否消耗藏品">
+                        <el-radio-group v-model="formData.consume" disabled>
+                            <el-radio :label="true">是</el-radio>
+                            <el-radio :label="false">否</el-radio>
+                        </el-radio-group>
+                    </el-form-item>
+                    <!-- <el-form-item prop="contactName" label="收货人">
+                        <el-input v-model="formData.contactName"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="contactPhone" label="收货电话">
+                        <el-input v-model="formData.contactPhone"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="address" label="收货地址">
+                        <el-input v-model="formData.address"></el-input>
+                    </el-form-item>
+                    <el-form-item prop="gasPrice" label="gas费">
+                        <el-input-number type="number" v-model="formData.gasPrice"></el-input-number>
+                    </el-form-item> -->
+                    <!-- <el-form-item prop="payMethod" label="支付方式">
+                        <el-select v-model="formData.payMethod" clearable filterable placeholder="请选择">
+                            <el-option
+                                v-for="item in payMethodOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item prop="payAt" label="支付时间">
+                        <el-date-picker
+                            v-model="formData.payAt"
+                            type="datetime"
+                            value-format="yyyy-MM-dd HH:mm:ss"
+                            placeholder="选择日期时间"
+                        >
+                        </el-date-picker>
+                    </el-form-item> -->
+                    <el-form-item prop="status" label="状态">
+                        <el-select v-model="formData.status" clearable filterable placeholder="请选择">
+                            <el-option
+                                v-for="item in statusOptions"
+                                :key="item.value"
+                                :label="item.label"
+                                :value="item.value"
+                            >
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item class="form-submit">
+                        <el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
+                        <!-- <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
+                            删除
+                        </el-button> -->
+                        <el-button @click="$router.go(-1)" :disabled="saving">取消</el-button>
+                    </el-form-item>
+                </el-form>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    name: 'MintOrderEdit',
+    created() {
+        if (this.$route.query.id) {
+            this.$http
+                .get('mintOrder/get/' + this.$route.query.id)
+                .then(res => {
+                    this.formData = res;
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+        }
+    },
+    data() {
+        return {
+            saving: false,
+            formData: {},
+            rules: {
+                phone: [
+                    {
+                        required: true,
+                        message: '请输入phone',
+                        trigger: 'blur'
+                    },
+                    {
+                        pattern: /^1[3-9]\d{9}$/,
+                        message: '请输入正确的手机号',
+                        trigger: 'blur'
+                    }
+                ],
+                contactPhone: [
+                    {
+                        pattern: /^1[3-9]\d{9}$/,
+                        message: '请输入正确的手机号',
+                        trigger: 'blur'
+                    }
+                ]
+            },
+            statusOptions: [
+                { label: '未支付', value: 'NOT_PAID' },
+                { label: '待发货', value: 'DELIVERY' },
+                { label: '待收货', value: 'RECEIVE' },
+                { label: '已完成', value: 'FINISH' },
+                { label: '已取消', value: 'CANCELLED' }
+            ],
+            payMethodOptions: [
+                { label: '微信', value: 'WEIXIN' },
+                { label: '支付宝', value: 'ALIPAY' }
+            ]
+        };
+    },
+    methods: {
+        onSave() {
+            this.$refs.form.validate(valid => {
+                if (valid) {
+                    this.submit();
+                } else {
+                    return false;
+                }
+            });
+        },
+        submit() {
+            let data = { ...this.formData };
 
-----
-Tip: It's the step after the last dot that caused this error, not those before it.
-----
-Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
-----
-
-----
-FTL stack trace ("~" means nesting-related):
-	- Failed at: ${field.modelName}  [in template "EditViewTemplate.ftl" at line 16, column 45]
-----
-
-Java stack trace (for programmers):
-----
-freemarker.core.InvalidReferenceException: [... Exception message was already printed; see it above ...]
-	at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:134)
-	at freemarker.core.EvalUtil.coerceModelToTextualCommon(EvalUtil.java:481)
-	at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:401)
-	at freemarker.core.EvalUtil.coerceModelToStringOrMarkup(EvalUtil.java:370)
-	at freemarker.core.DollarVariable.calculateInterpolatedStringOrMarkup(DollarVariable.java:100)
-	at freemarker.core.DollarVariable.accept(DollarVariable.java:63)
-	at freemarker.core.Environment.visit(Environment.java:370)
-	at freemarker.core.IteratorBlock$IterationContext.executedNestedContentForCollOrSeqListing(IteratorBlock.java:321)
-	at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:271)
-	at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:244)
-	at freemarker.core.Environment.visitIteratorBlock(Environment.java:644)
-	at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:108)
-	at freemarker.core.IteratorBlock.accept(IteratorBlock.java:94)
-	at freemarker.core.Environment.visit(Environment.java:334)
-	at freemarker.core.Environment.visit(Environment.java:340)
-	at freemarker.core.Environment.process(Environment.java:313)
-	at freemarker.template.Template.process(Template.java:383)
-	at com.izouma.nineth.service.GenCodeService.genFile(GenCodeService.java:108)
-	at com.izouma.nineth.service.GenCodeService.genEditView(GenCodeService.java:93)
-	at com.izouma.nineth.web.GenCodeController.genCode(GenCodeController.java:147)
-	at com.izouma.nineth.web.GenCodeController.save(GenCodeController.java:94)
-	at com.izouma.nineth.web.GenCodeController$$FastClassBySpringCGLIB$$7c8d05cd.invoke(<generated>)
-	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
-	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
-	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
-	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
-	at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
-	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
-	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
-	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95)
-	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
-	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
-	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
-	at com.izouma.nineth.web.GenCodeController$$EnhancerBySpringCGLIB$$f87dfa21.save(<generated>)
-	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
-	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
-	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
-	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
-	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
-	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
-	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
-	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
-	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
-	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
-	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
-	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
-	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
-	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)
-	at javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
-	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
-	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:113)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:124)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
-	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
-	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at com.izouma.nineth.security.JwtAuthorizationTokenFilter.doFilterInternal(JwtAuthorizationTokenFilter.java:84)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:92)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
-	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
-	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
-	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
-	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
-	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
-	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
-	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
-	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
-	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
-	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
-	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
-	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
-	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
-	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
-	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
-	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
-	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
-	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
-	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1589)
-	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
-	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
-	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
-	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
-	at java.base/java.lang.Thread.run(Thread.java:829)
+            this.saving = true;
+            this.$http
+                .post('/mintOrder/save', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
+        onDelete() {
+            this.$confirm('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/mintOrder/del/${this.formData.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.$router.go(-1);
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        console.log(e);
+                        this.$message.error((e || {}).error || '删除失败');
+                    }
+                });
+        }
+    }
+};
+</script>
+<style lang="less" scoped></style>

+ 176 - 172
src/main/vue/src/views/MintOrderList.vue

@@ -1,87 +1,76 @@
 <template>
-    <div  class="list-view">
+    <div class="list-view">
         <page-title>
-            <el-button @click="addRow" type="primary" icon="el-icon-plus" :disabled="fetchingData || downloading" class="filter-item">
+            <!-- <el-button
+                @click="addRow"
+                type="primary"
+                icon="el-icon-plus"
+                :disabled="fetchingData || downloading"
+                class="filter-item"
+            >
                 新增
-            </el-button>
-            <el-button @click="download" icon="el-icon-upload2" :loading="downloading" :disabled="fetchingData" class="filter-item">
+            </el-button> -->
+            <el-button
+                @click="download"
+                icon="el-icon-upload2"
+                :loading="downloading"
+                :disabled="fetchingData"
+                class="filter-item"
+            >
                 导出
             </el-button>
         </page-title>
         <div class="filters-container">
+            <created-at-picker v-model="createdAt" @input="getData" name="铸造" class="filter-item"></created-at-picker>
             <el-input
-                    placeholder="搜索..."
-                    v-model="search"
-                    clearable
-                    class="filter-item search"
-                    @keyup.enter.native="getData"
+                placeholder="搜索..."
+                v-model="search"
+                clearable
+                class="filter-item search"
+                @keyup.enter.native="getData"
             >
                 <el-button @click="getData" slot="append" icon="el-icon-search"> </el-button>
             </el-input>
         </div>
-        <el-table :data="tableData" row-key="id" ref="table"
-                  header-row-class-name="table-header-row"
-                  header-cell-class-name="table-header-cell"
-                  row-class-name="table-row" cell-class-name="table-cell"
-                  :height="tableHeight" v-loading="fetchingData">
-            <el-table-column v-if="multipleMode" align="center" type="selection"
-                             width="50">
+        <el-table
+            :data="tableData"
+            row-key="id"
+            ref="table"
+            header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell"
+            row-class-name="table-row"
+            cell-class-name="table-cell"
+            :height="tableHeight"
+            v-loading="fetchingData"
+        >
+            <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
+            <el-table-column prop="id" label="ID" width="100"> </el-table-column>
+            <el-table-column prop="userId" label="用户ID"> </el-table-column>
+            <el-table-column prop="phone" label="手机号"> </el-table-column>
+            <el-table-column prop="createdAt" label="铸造时间" min-width="120"> </el-table-column>
+            <!-- <el-table-column prop="mintActivityId" label="活动名称"> </el-table-column> -->
+            <el-table-column prop="material" label="铸造材料" min-width="120">
+                <template slot-scope="{ row }">
+                    <span v-for="item in row.material" :key="item.assestId">{{ item.name }}<br /></span>
+                </template>
             </el-table-column>
-            <el-table-column prop="id" label="ID" width="100">
+            <el-table-column prop="consume" label="消耗藏品" width="90" align="center">
+                <template v-slot="{ row }">
+                    <el-tag type="success" v-if="row.consume">是</el-tag>
+                    <el-tag type="info" v-else>否</el-tag>
+                </template>
             </el-table-column>
-                                <el-table-column prop="id" label="ID"
->
-                    </el-table-column>
-                    <el-table-column prop="userId" label="userId"
->
-                    </el-table-column>
-                    <el-table-column prop="" label="创建时间"
->
-                            <template slot="header" slot-scope="{column}">
-                                <sortable-header :column="column" :current-sort="sort" @changeSort="changeSort">
-                                </sortable-header>
-                            </template>
-                    </el-table-column>
-                    <el-table-column prop="phone" label="手机号"
->
-                    </el-table-column>
-                    <el-table-column prop="mintActivityId" label="活动名称"
->
-                    </el-table-column>
-                    <el-table-column prop="material" label="铸造材料"
->
-                    </el-table-column>
-                    <el-table-column prop="payMethod" label="支付方式"
-                            :formatter="payMethodFormatter"
-                        >
-                    </el-table-column>
-                    <el-table-column prop="payAt" label="支付时间"
->
-                    </el-table-column>
-                    <el-table-column prop="contactName" label="收货人"
->
-                    </el-table-column>
-                    <el-table-column prop="contactPhone" label="收货电话"
->
-                    </el-table-column>
-                    <el-table-column prop="address" label="收货地址"
->
-                    </el-table-column>
-                    <el-table-column prop="gasPrice" label="gas费"
->
-                    </el-table-column>
-                    <el-table-column prop="status" label="状态"
-                            :formatter="statusFormatter"
-                        >
-                    </el-table-column>
-            <el-table-column
-                    label="操作"
-                    align="center"
-                    fixed="right"
-                    width="150">
-                <template slot-scope="{row}">
-                    <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
-                    <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button>
+            <!-- <el-table-column prop="payMethod" label="支付方式" :formatter="payMethodFormatter"> </el-table-column>
+            <el-table-column prop="payAt" label="支付时间"> </el-table-column>
+            <el-table-column prop="contactName" label="收货人"> </el-table-column>
+            <el-table-column prop="contactPhone" label="收货电话"> </el-table-column>
+            <el-table-column prop="address" label="收货地址"> </el-table-column>
+            <el-table-column prop="gasPrice" label="gas费"> </el-table-column> -->
+            <el-table-column prop="status" label="状态" :formatter="statusFormatter"> </el-table-column>
+            <el-table-column label="操作" align="center" fixed="right" width="150">
+                <template slot-scope="{ row }">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>查看</el-button>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>
@@ -94,128 +83,143 @@
                     <el-button @click="toggleMultipleMode(false)">取消</el-button>
                 </el-button-group>
             </div> -->
-            <el-pagination background @size-change="onSizeChange"
-                           @current-change="onCurrentChange" :current-page="page"
-                           :page-sizes="[10, 20, 30, 40, 50]" :page-size="pageSize"
-                           layout="total, sizes, prev, pager, next, jumper"
-                           :total="totalElements">
+            <el-pagination
+                background
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalElements"
+            >
             </el-pagination>
         </div>
-
     </div>
 </template>
 <script>
-    import { mapState } from "vuex";
-    import pageableTable from "@/mixins/pageableTable";
+import { mapState } from 'vuex';
+import pageableTable from '@/mixins/pageableTable';
 
-    export default {
-        name: 'MintOrderList',
-        mixins: [pageableTable],
-        data() {
-            return {
-                multipleMode: false,
-                search: "",
-                url: "/mintOrder/all",
-                downloading: false,
-                        payMethodOptions:[{"label":"微信","value":"WEIXIN"},{"label":"支付宝","value":"ALIPAY"}],
-                        statusOptions:[{"label":"未支付","value":"NOT_PAID"},{"label":"待发货","value":"DELIVERY"},{"label":"待收货","value":"FINISH"},{"label":"已完成","value":"RECEIVE"},{"label":"已取消","value":"CANCELLED"}],
+export default {
+    name: 'MintOrderList',
+    mixins: [pageableTable],
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            url: '/mintOrder/all',
+            downloading: false,
+            payMethodOptions: [
+                { label: '微信', value: 'WEIXIN' },
+                { label: '支付宝', value: 'ALIPAY' }
+            ],
+            statusOptions: [
+                { label: '未支付', value: 'NOT_PAID' },
+                { label: '待发货', value: 'DELIVERY' },
+                { label: '待收货', value: 'RECEIVE' },
+                { label: '已完成', value: 'FINISH' },
+                { label: '已取消', value: 'CANCELLED' }
+            ],
+            createdAt: ''
+        };
+    },
+    computed: {
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        }
+    },
+    methods: {
+        payMethodFormatter(row, column, cellValue, index) {
+            let selectedOption = this.payMethodOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        statusFormatter(row, column, cellValue, index) {
+            let selectedOption = this.statusOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
             }
+            return '';
+        },
+        beforeGetData() {
+            return { search: this.search, query: { del: false, createdAt: this.createdAt } };
         },
-        computed: {
-            selection() {
-                return this.$refs.table.selection.map(i => i.id);
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.table.clearSelection();
             }
         },
-        methods: {
-                    payMethodFormatter(row, column, cellValue, index) {
-                        let selectedOption = this.payMethodOptions.find(i => i.value === cellValue);
-                        if (selectedOption) {
-                            return selectedOption.label;
-                        }
-                        return '';
-                    },
-                    statusFormatter(row, column, cellValue, index) {
-                        let selectedOption = this.statusOptions.find(i => i.value === cellValue);
-                        if (selectedOption) {
-                            return selectedOption.label;
-                        }
-                        return '';
-                    },
-            beforeGetData() {
-                return { search: this.search, query: { del: false } };
-            },
-            toggleMultipleMode(multipleMode) {
-                this.multipleMode = multipleMode;
-                if (!multipleMode) {
-                    this.$refs.table.clearSelection();
+        addRow() {
+            this.$router.push({
+                path: '/mintOrderEdit',
+                query: {
+                    ...this.$route.query
                 }
-            },
-            addRow() {
-                this.$router.push({
-                    path: "/mintOrderEdit",
-                    query: {
-                        ...this.$route.query
-                    }
-                });
-            },
-            editRow(row) {
-                this.$router.push({
-                    path: "/mintOrderEdit",
-                    query: {
+            });
+        },
+        editRow(row) {
+            this.$router.push({
+                path: '/mintOrderEdit',
+                query: {
                     id: row.id
-                    }
-                });
-            },
-            download() {
-                this.downloading = true;
-                this.$axios
-                    .get("/mintOrder/excel", { 
-                        responseType: "blob",
-                        params: { size: 10000 }
-                    })
-                    .then(res => {
-                        console.log(res);
-                        this.downloading = false;
-                        const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
-                        const link = document.createElement("a");
-                        link.href = downloadUrl;
-                        link.setAttribute(
-                            "download",
-                            res.headers["content-disposition"].split("filename=")[1]
-                        );
-                        document.body.appendChild(link);
-                        link.click();
-                        link.remove();
-                    })
-                    .catch(e => {
-                        console.log(e);
-                        this.downloading = false;
-                        this.$message.error(e.error);
-                    });
-            },
-            operation1() {
-                this.$notify({
-                    title: '提示',
-                    message: this.selection
+                }
+            });
+        },
+        download() {
+            this.downloading = true;
+            let params = this.beforeGetData();
+            params.size = 10000;
+            this.$axios
+                .post('/mintOrder/excelPhone', params, {
+                    responseType: 'blob'
+                })
+                .then(res => {
+                    console.log(res);
+                    this.downloading = false;
+                    const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                    const link = document.createElement('a');
+                    link.href = downloadUrl;
+                    link.setAttribute('download', '铸造订单.xlsx');
+                    document.body.appendChild(link);
+                    link.click();
+                    link.remove();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.downloading = false;
+                    this.$message.error(e.error);
                 });
-            },
-            operation2() {
-                this.$message('操作2');
-            },
-            deleteRow(row) {
-                this.$alert('删除将无法恢复,确认要删除么?', '警告', {type: 'error'}).then(() => {
-                    return this.$http.post(`/mintOrder/del/${row.id}`)
-                }).then(() => {
+        },
+        operation1() {
+            this.$notify({
+                title: '提示',
+                message: this.selection
+            });
+        },
+        operation2() {
+            this.$message('操作2');
+        },
+        deleteRow(row) {
+            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
+                .then(() => {
+                    return this.$http.post(`/mintOrder/del/${row.id}`);
+                })
+                .then(() => {
                     this.$message.success('删除成功');
                     this.getData();
-                }).catch(e => {
+                })
+                .catch(e => {
                     if (e !== 'cancel') {
                         this.$message.error(e.error);
                     }
-                })
-            },
+                });
         }
     }
+};
 </script>
 <style lang="less" scoped>
 </style>

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