Browse Source

1、接口添加

master
Augcl 1 year ago
parent
commit
d44e59fc98
54 changed files with 3843 additions and 221 deletions
  1. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/controller/TravelAddressController.java
  2. +59
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/entity/TravelAddress.java
  3. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/mapper/TravelAddressMapper.java
  4. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/mapper/xml/TravelAddressMapper.xml
  5. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/service/ITravelAddressService.java
  6. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/service/impl/TravelAddressServiceImpl.java
  7. +196
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/TravelAddressList.vue
  8. +124
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/modules/TravelAddressForm.vue
  9. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/modules/TravelAddressModal.Style#Drawer.vue
  10. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/modules/TravelAddressModal.vue
  11. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/TravelAddress.api.ts
  12. +66
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/TravelAddress.data.ts
  13. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/TravelAddressList.vue
  14. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/components/TravelAddressModal.vue
  15. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/controller/TravelAmusementController.java
  16. +78
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/entity/TravelAmusement.java
  17. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/mapper/TravelAmusementMapper.java
  18. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/mapper/xml/TravelAmusementMapper.xml
  19. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/service/ITravelAmusementService.java
  20. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/service/impl/TravelAmusementServiceImpl.java
  21. +229
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/TravelAmusementList.vue
  22. +149
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/modules/TravelAmusementForm.vue
  23. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/modules/TravelAmusementModal.Style#Drawer.vue
  24. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/modules/TravelAmusementModal.vue
  25. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/TravelAmusement.api.ts
  26. +119
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/TravelAmusement.data.ts
  27. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/TravelAmusementList.vue
  28. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/components/TravelAmusementModal.vue
  29. +171
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/controller/TravelExperienceController.java
  30. +54
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/entity/TravelExperience.java
  31. +17
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/mapper/TravelExperienceMapper.java
  32. +5
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/mapper/xml/TravelExperienceMapper.xml
  33. +14
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/service/ITravelExperienceService.java
  34. +19
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/service/impl/TravelExperienceServiceImpl.java
  35. +191
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/TravelExperienceList.vue
  36. +119
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/modules/TravelExperienceForm.vue
  37. +84
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/modules/TravelExperienceModal.Style#Drawer.vue
  38. +60
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/modules/TravelExperienceModal.vue
  39. +61
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/TravelExperience.api.ts
  40. +57
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/TravelExperience.data.ts
  41. +162
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/TravelExperienceList.vue
  42. +58
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/components/TravelExperienceModal.vue
  43. +16
    -16
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/controller/TravelOrderController.java
  44. +38
    -42
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/entity/TravelOrder.java
  45. +2
    -2
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/mapper/TravelOrderMapper.java
  46. +2
    -2
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/service/ITravelOrderService.java
  47. +2
    -2
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/service/impl/TravelOrderServiceImpl.java
  48. +20
    -47
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue/TravelOrderList.vue
  49. +12
    -32
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue/modules/TravelOrderForm.vue
  50. +25
    -69
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue3/TravelOrder.data.ts
  51. +2
    -2
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue3/TravelOrderList.vue
  52. +74
    -2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/travelController/IndexApiController.java
  53. +32
    -2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/IndexApiService.java
  54. +224
    -3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/IndexApiServiceImpl.java

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/controller/TravelAddressController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.travelAddress.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import org.jeecg.modules.travelAddress.service.ITravelAddressService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 地址表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Api(tags="地址表")
@RestController
@RequestMapping("/travelAddress/travelAddress")
@Slf4j
public class TravelAddressController extends JeecgController<TravelAddress, ITravelAddressService> {
@Autowired
private ITravelAddressService travelAddressService;
/**
* 分页列表查询
*
* @param travelAddress
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "地址表-分页列表查询")
@ApiOperation(value="地址表-分页列表查询", notes="地址表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TravelAddress>> queryPageList(TravelAddress travelAddress,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<TravelAddress> queryWrapper = QueryGenerator.initQueryWrapper(travelAddress, req.getParameterMap());
Page<TravelAddress> page = new Page<TravelAddress>(pageNo, pageSize);
IPage<TravelAddress> pageList = travelAddressService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param travelAddress
* @return
*/
@AutoLog(value = "地址表-添加")
@ApiOperation(value="地址表-添加", notes="地址表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody TravelAddress travelAddress) {
travelAddressService.save(travelAddress);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param travelAddress
* @return
*/
@AutoLog(value = "地址表-编辑")
@ApiOperation(value="地址表-编辑", notes="地址表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody TravelAddress travelAddress) {
travelAddressService.updateById(travelAddress);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "地址表-通过id删除")
@ApiOperation(value="地址表-通过id删除", notes="地址表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
travelAddressService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "地址表-批量删除")
@ApiOperation(value="地址表-批量删除", notes="地址表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.travelAddressService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "地址表-通过id查询")
@ApiOperation(value="地址表-通过id查询", notes="地址表-通过id查询")
@GetMapping(value = "/queryById")
public Result<TravelAddress> queryById(@RequestParam(name="id",required=true) String id) {
TravelAddress travelAddress = travelAddressService.getById(id);
if(travelAddress==null) {
return Result.error("未找到对应数据");
}
return Result.OK(travelAddress);
}
/**
* 导出excel
*
* @param request
* @param travelAddress
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, TravelAddress travelAddress) {
return super.exportXls(request, travelAddress, TravelAddress.class, "地址表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, TravelAddress.class);
}
}

+ 59
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/entity/TravelAddress.java View File

@ -0,0 +1,59 @@
package org.jeecg.modules.travelAddress.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 地址表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Data
@TableName("travel_address")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="travel_address对象", description="地址表")
public class TravelAddress implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**联系人姓名*/
@Excel(name = "联系人姓名", width = 15)
@ApiModelProperty(value = "联系人姓名")
private java.lang.String userName;
/**联系人电话*/
@Excel(name = "联系人电话", width = 15)
@ApiModelProperty(value = "联系人电话")
private java.lang.String userPhone;
/**所属区域*/
@Excel(name = "所属区域", width = 15)
@ApiModelProperty(value = "所属区域")
private java.lang.String area;
/**详细地址*/
@Excel(name = "详细地址", width = 15)
@ApiModelProperty(value = "详细地址")
private java.lang.String address;
/**所属用户*/
@Excel(name = "所属用户", width = 15, dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id")
@Dict(dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id")
@ApiModelProperty(value = "所属用户")
private java.lang.String memberId;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/mapper/TravelAddressMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.travelAddress.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 地址表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface TravelAddressMapper extends BaseMapper<TravelAddress> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/mapper/xml/TravelAddressMapper.xml View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.travelAddress.mapper.TravelAddressMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/service/ITravelAddressService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.travelAddress.service;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 地址表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface ITravelAddressService extends IService<TravelAddress> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/service/impl/TravelAddressServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.travelAddress.service.impl;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import org.jeecg.modules.travelAddress.mapper.TravelAddressMapper;
import org.jeecg.modules.travelAddress.service.ITravelAddressService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 地址表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Service
public class TravelAddressServiceImpl extends ServiceImpl<TravelAddressMapper, TravelAddress> implements ITravelAddressService {
}

+ 196
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/TravelAddressList.vue View File

@ -0,0 +1,196 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('地址表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<travel-address-modal ref="modalForm" @ok="modalFormOk"></travel-address-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import TravelAddressModal from './modules/TravelAddressModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
export default {
name: 'TravelAddressList',
mixins:[JeecgListMixin, mixinDevice],
components: {
TravelAddressModal
},
data () {
return {
description: '地址表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'联系人姓名',
align:"center",
dataIndex: 'userName'
},
{
title:'联系人电话',
align:"center",
dataIndex: 'userPhone'
},
{
title:'所属区域',
align:"center",
dataIndex: 'area'
},
{
title:'详细地址',
align:"center",
dataIndex: 'address'
},
{
title:'所属用户',
align:"center",
dataIndex: 'memberId_dictText'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/travelAddress/travelAddress/list",
delete: "/travelAddress/travelAddress/delete",
deleteBatch: "/travelAddress/travelAddress/deleteBatch",
exportXlsUrl: "/travelAddress/travelAddress/exportXls",
importExcelUrl: "travelAddress/travelAddress/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'userName',text:'联系人姓名',dictCode:''})
fieldList.push({type:'string',value:'userPhone',text:'联系人电话',dictCode:''})
fieldList.push({type:'string',value:'area',text:'所属区域',dictCode:''})
fieldList.push({type:'string',value:'address',text:'详细地址',dictCode:''})
fieldList.push({type:'string',value:'memberId',text:'所属用户',dictCode:"han_hai_member,nick_name,id"})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 124
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/modules/TravelAddressForm.vue View File

@ -0,0 +1,124 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="联系人姓名" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userName">
<a-input v-model="model.userName" placeholder="请输入联系人姓名" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="联系人电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="userPhone">
<a-input v-model="model.userPhone" placeholder="请输入联系人电话" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="所属区域" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="area">
<a-input v-model="model.area" placeholder="请输入所属区域" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="详细地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="address">
<a-input v-model="model.address" placeholder="请输入详细地址" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="所属用户" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="memberId">
<j-dict-select-tag type="list" v-model="model.memberId" dictCode="han_hai_member,nick_name,id" placeholder="请选择所属用户" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'TravelAddressForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/travelAddress/travelAddress/add",
edit: "/travelAddress/travelAddress/edit",
queryById: "/travelAddress/travelAddress/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/modules/TravelAddressModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<travel-address-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></travel-address-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import TravelAddressForm from './TravelAddressForm'
export default {
name: 'TravelAddressModal',
components: {
TravelAddressForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue/modules/TravelAddressModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<travel-address-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></travel-address-form>
</j-modal>
</template>
<script>
import TravelAddressForm from './TravelAddressForm'
export default {
name: 'TravelAddressModal',
components: {
TravelAddressForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/TravelAddress.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/travelAddress/travelAddress/list',
save='/travelAddress/travelAddress/add',
edit='/travelAddress/travelAddress/edit',
deleteOne = '/travelAddress/travelAddress/delete',
deleteBatch = '/travelAddress/travelAddress/deleteBatch',
importExcel = '/travelAddress/travelAddress/importExcel',
exportXls = '/travelAddress/travelAddress/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 66
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/TravelAddress.data.ts View File

@ -0,0 +1,66 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '联系人姓名',
align:"center",
dataIndex: 'userName'
},
{
title: '联系人电话',
align:"center",
dataIndex: 'userPhone'
},
{
title: '所属区域',
align:"center",
dataIndex: 'area'
},
{
title: '详细地址',
align:"center",
dataIndex: 'address'
},
{
title: '所属用户',
align:"center",
dataIndex: 'memberId_dictText'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '联系人姓名',
field: 'userName',
component: 'Input',
},
{
label: '联系人电话',
field: 'userPhone',
component: 'Input',
},
{
label: '所属区域',
field: 'area',
component: 'Input',
},
{
label: '详细地址',
field: 'address',
component: 'Input',
},
{
label: '所属用户',
field: 'memberId',
component: 'JDictSelectTag',
componentProps:{
dictCode:"han_hai_member,nick_name,id"
},
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/TravelAddressList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<TravelAddressModal @register="registerModal" @success="handleSuccess"></TravelAddressModal>
</div>
</template>
<script lang="ts" name="travelAddress-travelAddress" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import TravelAddressModal from './components/TravelAddressModal.vue'
import {columns, searchFormSchema} from './travelAddress.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './travelAddress.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '地址表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"地址表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAddress/vue3/components/TravelAddressModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../travelAddress.data';
import {saveOrUpdate} from '../travelAddress.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/controller/TravelAmusementController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.travelAmusement.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.travelAmusement.entity.TravelAmusement;
import org.jeecg.modules.travelAmusement.service.ITravelAmusementService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 游玩项目表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Api(tags="游玩项目表")
@RestController
@RequestMapping("/travelAmusement/travelAmusement")
@Slf4j
public class TravelAmusementController extends JeecgController<TravelAmusement, ITravelAmusementService> {
@Autowired
private ITravelAmusementService travelAmusementService;
/**
* 分页列表查询
*
* @param travelAmusement
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "游玩项目表-分页列表查询")
@ApiOperation(value="游玩项目表-分页列表查询", notes="游玩项目表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TravelAmusement>> queryPageList(TravelAmusement travelAmusement,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<TravelAmusement> queryWrapper = QueryGenerator.initQueryWrapper(travelAmusement, req.getParameterMap());
Page<TravelAmusement> page = new Page<TravelAmusement>(pageNo, pageSize);
IPage<TravelAmusement> pageList = travelAmusementService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param travelAmusement
* @return
*/
@AutoLog(value = "游玩项目表-添加")
@ApiOperation(value="游玩项目表-添加", notes="游玩项目表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody TravelAmusement travelAmusement) {
travelAmusementService.save(travelAmusement);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param travelAmusement
* @return
*/
@AutoLog(value = "游玩项目表-编辑")
@ApiOperation(value="游玩项目表-编辑", notes="游玩项目表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody TravelAmusement travelAmusement) {
travelAmusementService.updateById(travelAmusement);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "游玩项目表-通过id删除")
@ApiOperation(value="游玩项目表-通过id删除", notes="游玩项目表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
travelAmusementService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "游玩项目表-批量删除")
@ApiOperation(value="游玩项目表-批量删除", notes="游玩项目表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.travelAmusementService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "游玩项目表-通过id查询")
@ApiOperation(value="游玩项目表-通过id查询", notes="游玩项目表-通过id查询")
@GetMapping(value = "/queryById")
public Result<TravelAmusement> queryById(@RequestParam(name="id",required=true) String id) {
TravelAmusement travelAmusement = travelAmusementService.getById(id);
if(travelAmusement==null) {
return Result.error("未找到对应数据");
}
return Result.OK(travelAmusement);
}
/**
* 导出excel
*
* @param request
* @param travelAmusement
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, TravelAmusement travelAmusement) {
return super.exportXls(request, travelAmusement, TravelAmusement.class, "游玩项目表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, TravelAmusement.class);
}
}

+ 78
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/entity/TravelAmusement.java View File

@ -0,0 +1,78 @@
package org.jeecg.modules.travelAmusement.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 游玩项目表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Data
@TableName("travel_amusement")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="travel_amusement对象", description="游玩项目表")
public class TravelAmusement implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**项目标题*/
@Excel(name = "项目标题", width = 15)
@ApiModelProperty(value = "项目标题")
private java.lang.String amusementTitle;
/**项目副标题*/
@Excel(name = "项目副标题", width = 15)
@ApiModelProperty(value = "项目副标题")
private java.lang.String amusementShortTitle;
/**项目图片*/
@Excel(name = "项目图片", width = 15)
@ApiModelProperty(value = "项目图片")
private java.lang.String amusementImage;
/**项目价格*/
@Excel(name = "项目价格", width = 15)
@ApiModelProperty(value = "项目价格")
private java.math.BigDecimal amusementPrice;
/**项目介绍*/
@Excel(name = "项目介绍", width = 15)
@ApiModelProperty(value = "项目介绍")
private java.lang.String amusementBrief;
/**关于行程*/
@Excel(name = "关于行程", width = 15)
@ApiModelProperty(value = "关于行程")
private java.lang.String amusementRoute;
/**注意事项*/
@Excel(name = "注意事项", width = 15)
@ApiModelProperty(value = "注意事项")
private java.lang.String amusementAttention;
/**出行说明*/
@Excel(name = "出行说明", width = 15)
@ApiModelProperty(value = "出行说明")
private java.lang.String amusementStatement;
/**是否付费项目(0-否 1-是)*/
@Excel(name = "是否付费项目(0-否 1-是)", width = 15)
@ApiModelProperty(value = "是否付费项目(0-否 1-是)")
private java.lang.String isPay;
/**项目类型(0-遗产路径 1-我要研学)*/
@Excel(name = "项目类型(0-遗产路径 1-我要研学)", width = 15)
@ApiModelProperty(value = "项目类型(0-遗产路径 1-我要研学)")
private java.lang.String amusementType;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/mapper/TravelAmusementMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.travelAmusement.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.travelAmusement.entity.TravelAmusement;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 游玩项目表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface TravelAmusementMapper extends BaseMapper<TravelAmusement> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/mapper/xml/TravelAmusementMapper.xml View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.travelAmusement.mapper.TravelAmusementMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/service/ITravelAmusementService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.travelAmusement.service;
import org.jeecg.modules.travelAmusement.entity.TravelAmusement;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 游玩项目表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface ITravelAmusementService extends IService<TravelAmusement> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/service/impl/TravelAmusementServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.travelAmusement.service.impl;
import org.jeecg.modules.travelAmusement.entity.TravelAmusement;
import org.jeecg.modules.travelAmusement.mapper.TravelAmusementMapper;
import org.jeecg.modules.travelAmusement.service.ITravelAmusementService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 游玩项目表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Service
public class TravelAmusementServiceImpl extends ServiceImpl<TravelAmusementMapper, TravelAmusement> implements ITravelAmusementService {
}

+ 229
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/TravelAmusementList.vue View File

@ -0,0 +1,229 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('游玩项目表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<travel-amusement-modal ref="modalForm" @ok="modalFormOk"></travel-amusement-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import TravelAmusementModal from './modules/TravelAmusementModal'
export default {
name: 'TravelAmusementList',
mixins:[JeecgListMixin, mixinDevice],
components: {
TravelAmusementModal
},
data () {
return {
description: '游玩项目表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'项目标题',
align:"center",
dataIndex: 'amusementTitle'
},
{
title:'项目副标题',
align:"center",
dataIndex: 'amusementShortTitle'
},
{
title:'项目图片',
align:"center",
dataIndex: 'amusementImage',
scopedSlots: {customRender: 'imgSlot'}
},
{
title:'项目价格',
align:"center",
dataIndex: 'amusementPrice'
},
{
title:'项目介绍',
align:"center",
dataIndex: 'amusementBrief'
},
{
title:'关于行程',
align:"center",
dataIndex: 'amusementRoute',
scopedSlots: {customRender: 'htmlSlot'}
},
{
title:'注意事项',
align:"center",
dataIndex: 'amusementAttention',
scopedSlots: {customRender: 'htmlSlot'}
},
{
title:'出行说明',
align:"center",
dataIndex: 'amusementStatement',
scopedSlots: {customRender: 'htmlSlot'}
},
{
title:'是否付费项目(0-否 1-是)',
align:"center",
dataIndex: 'isPay'
},
{
title:'项目类型(0-遗产路径 1-我要研学)',
align:"center",
dataIndex: 'amusementType'
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/travelAmusement/travelAmusement/list",
delete: "/travelAmusement/travelAmusement/delete",
deleteBatch: "/travelAmusement/travelAmusement/deleteBatch",
exportXlsUrl: "/travelAmusement/travelAmusement/exportXls",
importExcelUrl: "travelAmusement/travelAmusement/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'amusementTitle',text:'项目标题',dictCode:''})
fieldList.push({type:'string',value:'amusementShortTitle',text:'项目副标题',dictCode:''})
fieldList.push({type:'string',value:'amusementImage',text:'项目图片',dictCode:''})
fieldList.push({type:'BigDecimal',value:'amusementPrice',text:'项目价格',dictCode:''})
fieldList.push({type:'string',value:'amusementBrief',text:'项目介绍',dictCode:''})
fieldList.push({type:'string',value:'amusementRoute',text:'关于行程',dictCode:''})
fieldList.push({type:'string',value:'amusementAttention',text:'注意事项',dictCode:''})
fieldList.push({type:'string',value:'amusementStatement',text:'出行说明',dictCode:''})
fieldList.push({type:'string',value:'isPay',text:'是否付费项目(0-否 1-是)',dictCode:''})
fieldList.push({type:'string',value:'amusementType',text:'项目类型(0-遗产路径 1-我要研学)',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 149
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/modules/TravelAmusementForm.vue View File

@ -0,0 +1,149 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="项目标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementTitle">
<a-input v-model="model.amusementTitle" placeholder="请输入项目标题" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目副标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementShortTitle">
<a-input v-model="model.amusementShortTitle" placeholder="请输入项目副标题" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementImage">
<j-image-upload isMultiple v-model="model.amusementImage" ></j-image-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目价格" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementPrice">
<a-input-number v-model="model.amusementPrice" placeholder="请输入项目价格" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目介绍" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementBrief">
<a-input v-model="model.amusementBrief" placeholder="请输入项目介绍" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="关于行程" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementRoute">
<j-editor v-model="model.amusementRoute" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="注意事项" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementAttention">
<j-editor v-model="model.amusementAttention" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="出行说明" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementStatement">
<j-editor v-model="model.amusementStatement" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="是否付费项目(0-否 1-是)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="isPay">
<a-input v-model="model.isPay" placeholder="请输入是否付费项目(0-否 1-是)" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目类型(0-遗产路径 1-我要研学)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="amusementType">
<a-input v-model="model.amusementType" placeholder="请输入项目类型(0-遗产路径 1-我要研学)" ></a-input>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'TravelAmusementForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/travelAmusement/travelAmusement/add",
edit: "/travelAmusement/travelAmusement/edit",
queryById: "/travelAmusement/travelAmusement/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/modules/TravelAmusementModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<travel-amusement-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></travel-amusement-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import TravelAmusementForm from './TravelAmusementForm'
export default {
name: 'TravelAmusementModal',
components: {
TravelAmusementForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue/modules/TravelAmusementModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<travel-amusement-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></travel-amusement-form>
</j-modal>
</template>
<script>
import TravelAmusementForm from './TravelAmusementForm'
export default {
name: 'TravelAmusementModal',
components: {
TravelAmusementForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/TravelAmusement.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/travelAmusement/travelAmusement/list',
save='/travelAmusement/travelAmusement/add',
edit='/travelAmusement/travelAmusement/edit',
deleteOne = '/travelAmusement/travelAmusement/delete',
deleteBatch = '/travelAmusement/travelAmusement/deleteBatch',
importExcel = '/travelAmusement/travelAmusement/importExcel',
exportXls = '/travelAmusement/travelAmusement/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 119
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/TravelAmusement.data.ts View File

@ -0,0 +1,119 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '项目标题',
align:"center",
dataIndex: 'amusementTitle'
},
{
title: '项目副标题',
align:"center",
dataIndex: 'amusementShortTitle'
},
{
title: '项目图片',
align:"center",
dataIndex: 'amusementImage',
customRender:render.renderAvatar,
},
{
title: '项目价格',
align:"center",
dataIndex: 'amusementPrice'
},
{
title: '项目介绍',
align:"center",
dataIndex: 'amusementBrief'
},
{
title: '关于行程',
align:"center",
dataIndex: 'amusementRoute',
slots: { customRender: 'htmlSlot' },
},
{
title: '注意事项',
align:"center",
dataIndex: 'amusementAttention',
slots: { customRender: 'htmlSlot' },
},
{
title: '出行说明',
align:"center",
dataIndex: 'amusementStatement',
slots: { customRender: 'htmlSlot' },
},
{
title: '是否付费项目(0-否 1-是)',
align:"center",
dataIndex: 'isPay'
},
{
title: '项目类型(0-遗产路径 1-我要研学)',
align:"center",
dataIndex: 'amusementType'
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '项目标题',
field: 'amusementTitle',
component: 'Input',
},
{
label: '项目副标题',
field: 'amusementShortTitle',
component: 'Input',
},
{
label: '项目图片',
field: 'amusementImage',
component: 'JImageUpload',
componentProps:{
},
},
{
label: '项目价格',
field: 'amusementPrice',
component: 'InputNumber',
},
{
label: '项目介绍',
field: 'amusementBrief',
component: 'Input',
},
{
label: '关于行程',
field: 'amusementRoute',
component: 'JCodeEditor', //TODO String后缀暂未添加
},
{
label: '注意事项',
field: 'amusementAttention',
component: 'JCodeEditor', //TODO String后缀暂未添加
},
{
label: '出行说明',
field: 'amusementStatement',
component: 'JCodeEditor', //TODO String后缀暂未添加
},
{
label: '是否付费项目(0-否 1-是)',
field: 'isPay',
component: 'Input',
},
{
label: '项目类型(0-遗产路径 1-我要研学)',
field: 'amusementType',
component: 'Input',
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/TravelAmusementList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<TravelAmusementModal @register="registerModal" @success="handleSuccess"></TravelAmusementModal>
</div>
</template>
<script lang="ts" name="travelAmusement-travelAmusement" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import TravelAmusementModal from './components/TravelAmusementModal.vue'
import {columns, searchFormSchema} from './travelAmusement.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './travelAmusement.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '游玩项目表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"游玩项目表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelAmusement/vue3/components/TravelAmusementModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../travelAmusement.data';
import {saveOrUpdate} from '../travelAmusement.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 171
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/controller/TravelExperienceController.java View File

@ -0,0 +1,171 @@
package org.jeecg.modules.travelExperience.controller;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.system.query.QueryGenerator;
import org.jeecg.common.util.oConvertUtils;
import org.jeecg.modules.travelExperience.entity.TravelExperience;
import org.jeecg.modules.travelExperience.service.ITravelExperienceService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
import org.jeecgframework.poi.excel.ExcelImportUtil;
import org.jeecgframework.poi.excel.def.NormalExcelConstants;
import org.jeecgframework.poi.excel.entity.ExportParams;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
import org.jeecg.common.system.base.controller.JeecgController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;
import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 非遗体验表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Api(tags="非遗体验表")
@RestController
@RequestMapping("/travelExperience/travelExperience")
@Slf4j
public class TravelExperienceController extends JeecgController<TravelExperience, ITravelExperienceService> {
@Autowired
private ITravelExperienceService travelExperienceService;
/**
* 分页列表查询
*
* @param travelExperience
* @param pageNo
* @param pageSize
* @param req
* @return
*/
//@AutoLog(value = "非遗体验表-分页列表查询")
@ApiOperation(value="非遗体验表-分页列表查询", notes="非遗体验表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TravelExperience>> queryPageList(TravelExperience travelExperience,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<TravelExperience> queryWrapper = QueryGenerator.initQueryWrapper(travelExperience, req.getParameterMap());
Page<TravelExperience> page = new Page<TravelExperience>(pageNo, pageSize);
IPage<TravelExperience> pageList = travelExperienceService.page(page, queryWrapper);
return Result.OK(pageList);
}
/**
* 添加
*
* @param travelExperience
* @return
*/
@AutoLog(value = "非遗体验表-添加")
@ApiOperation(value="非遗体验表-添加", notes="非遗体验表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody TravelExperience travelExperience) {
travelExperienceService.save(travelExperience);
return Result.OK("添加成功!");
}
/**
* 编辑
*
* @param travelExperience
* @return
*/
@AutoLog(value = "非遗体验表-编辑")
@ApiOperation(value="非遗体验表-编辑", notes="非遗体验表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody TravelExperience travelExperience) {
travelExperienceService.updateById(travelExperience);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param id
* @return
*/
@AutoLog(value = "非遗体验表-通过id删除")
@ApiOperation(value="非遗体验表-通过id删除", notes="非遗体验表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
travelExperienceService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 批量删除
*
* @param ids
* @return
*/
@AutoLog(value = "非遗体验表-批量删除")
@ApiOperation(value="非遗体验表-批量删除", notes="非遗体验表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.travelExperienceService.removeByIds(Arrays.asList(ids.split(",")));
return Result.OK("批量删除成功!");
}
/**
* 通过id查询
*
* @param id
* @return
*/
//@AutoLog(value = "非遗体验表-通过id查询")
@ApiOperation(value="非遗体验表-通过id查询", notes="非遗体验表-通过id查询")
@GetMapping(value = "/queryById")
public Result<TravelExperience> queryById(@RequestParam(name="id",required=true) String id) {
TravelExperience travelExperience = travelExperienceService.getById(id);
if(travelExperience==null) {
return Result.error("未找到对应数据");
}
return Result.OK(travelExperience);
}
/**
* 导出excel
*
* @param request
* @param travelExperience
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, TravelExperience travelExperience) {
return super.exportXls(request, travelExperience, TravelExperience.class, "非遗体验表");
}
/**
* 通过excel导入数据
*
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/importExcel", method = RequestMethod.POST)
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
return super.importExcel(request, response, TravelExperience.class);
}
}

+ 54
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/entity/TravelExperience.java View File

@ -0,0 +1,54 @@
package org.jeecg.modules.travelExperience.entity;
import java.io.Serializable;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.format.annotation.DateTimeFormat;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecg.common.aspect.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 非遗体验表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Data
@TableName("travel_experience")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="travel_experience对象", description="非遗体验表")
public class TravelExperience implements Serializable {
private static final long serialVersionUID = 1L;
/**主键*/
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**非遗体验标题*/
@Excel(name = "非遗体验标题", width = 15)
@ApiModelProperty(value = "非遗体验标题")
private java.lang.String experienceTitle;
/**非遗体验封面*/
@Excel(name = "非遗体验封面", width = 15)
@ApiModelProperty(value = "非遗体验封面")
private java.lang.String experienceImage;
/**开放时间*/
@Excel(name = "开放时间", width = 15)
@ApiModelProperty(value = "开放时间")
private java.lang.String experienceOpentime;
/**非遗体验详情*/
@Excel(name = "非遗体验详情", width = 15)
@ApiModelProperty(value = "非遗体验详情")
private java.lang.String experienceDetail;
}

+ 17
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/mapper/TravelExperienceMapper.java View File

@ -0,0 +1,17 @@
package org.jeecg.modules.travelExperience.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.jeecg.modules.travelExperience.entity.TravelExperience;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 非遗体验表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface TravelExperienceMapper extends BaseMapper<TravelExperience> {
}

+ 5
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/mapper/xml/TravelExperienceMapper.xml View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.jeecg.modules.travelExperience.mapper.TravelExperienceMapper">
</mapper>

+ 14
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/service/ITravelExperienceService.java View File

@ -0,0 +1,14 @@
package org.jeecg.modules.travelExperience.service;
import org.jeecg.modules.travelExperience.entity.TravelExperience;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 非遗体验表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface ITravelExperienceService extends IService<TravelExperience> {
}

+ 19
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/service/impl/TravelExperienceServiceImpl.java View File

@ -0,0 +1,19 @@
package org.jeecg.modules.travelExperience.service.impl;
import org.jeecg.modules.travelExperience.entity.TravelExperience;
import org.jeecg.modules.travelExperience.mapper.TravelExperienceMapper;
import org.jeecg.modules.travelExperience.service.ITravelExperienceService;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 非遗体验表
* @Author: jeecg-boot
* @Date: 2024-09-23
* @Version: V1.0
*/
@Service
public class TravelExperienceServiceImpl extends ServiceImpl<TravelExperienceMapper, TravelExperience> implements ITravelExperienceService {
}

+ 191
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/TravelExperienceList.vue View File

@ -0,0 +1,191 @@
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline" @keyup.enter.native="searchQuery">
<a-row :gutter="24">
</a-row>
</a-form>
</div>
<!-- 查询区域-END -->
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('非遗体验表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
<!-- 高级查询区域 -->
<j-super-query :fieldList="superFieldList" ref="superQueryModal" @handleSuperQuery="handleSuperQuery"></j-super-query>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>删除</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作 <a-icon type="down" /></a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i> 已选择 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
:scroll="{x:true}"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
class="j-table-force-nowrap"
@change="handleTableChange">
<template slot="htmlSlot" slot-scope="text">
<div v-html="text"></div>
</template>
<template slot="imgSlot" slot-scope="text,record">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无图片</span>
<img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/>
</template>
<template slot="fileSlot" slot-scope="text">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button
v-else
:ghost="true"
type="primary"
icon="download"
size="small"
@click="downloadFile(text)">
下载
</a-button>
</template>
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical" />
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down" /></a>
<a-menu slot="overlay">
<a-menu-item>
<a @click="handleDetail(record)">详情</a>
</a-menu-item>
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<travel-experience-modal ref="modalForm" @ok="modalFormOk"></travel-experience-modal>
</a-card>
</template>
<script>
import '@/assets/less/TableExpand.less'
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import TravelExperienceModal from './modules/TravelExperienceModal'
export default {
name: 'TravelExperienceList',
mixins:[JeecgListMixin, mixinDevice],
components: {
TravelExperienceModal
},
data () {
return {
description: '非遗体验表管理页面',
//
columns: [
{
title: '#',
dataIndex: '',
key:'rowIndex',
width:60,
align:"center",
customRender:function (t,r,index) {
return parseInt(index)+1;
}
},
{
title:'非遗体验标题',
align:"center",
dataIndex: 'experienceTitle'
},
{
title:'非遗体验封面',
align:"center",
dataIndex: 'experienceImage',
scopedSlots: {customRender: 'imgSlot'}
},
{
title:'开放时间',
align:"center",
dataIndex: 'experienceOpentime'
},
{
title:'非遗体验详情',
align:"center",
dataIndex: 'experienceDetail',
scopedSlots: {customRender: 'htmlSlot'}
},
{
title: '操作',
dataIndex: 'action',
align:"center",
fixed:"right",
width:147,
scopedSlots: { customRender: 'action' }
}
],
url: {
list: "/travelExperience/travelExperience/list",
delete: "/travelExperience/travelExperience/delete",
deleteBatch: "/travelExperience/travelExperience/deleteBatch",
exportXlsUrl: "/travelExperience/travelExperience/exportXls",
importExcelUrl: "travelExperience/travelExperience/importExcel",
},
dictOptions:{},
superFieldList:[],
}
},
created() {
this.getSuperFieldList();
},
computed: {
importExcelUrl: function(){
return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
},
},
methods: {
initDictConfig(){
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'experienceTitle',text:'非遗体验标题',dictCode:''})
fieldList.push({type:'string',value:'experienceImage',text:'非遗体验封面',dictCode:''})
fieldList.push({type:'string',value:'experienceOpentime',text:'开放时间',dictCode:''})
fieldList.push({type:'string',value:'experienceDetail',text:'非遗体验详情',dictCode:''})
this.superFieldList = fieldList
}
}
}
</script>
<style scoped>
@import '~@assets/less/common.less';
</style>

+ 119
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/modules/TravelExperienceForm.vue View File

@ -0,0 +1,119 @@
<template>
<a-spin :spinning="confirmLoading">
<j-form-container :disabled="formDisabled">
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="非遗体验标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="experienceTitle">
<a-input v-model="model.experienceTitle" placeholder="请输入非遗体验标题" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="非遗体验封面" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="experienceImage">
<j-image-upload isMultiple v-model="model.experienceImage" ></j-image-upload>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="开放时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="experienceOpentime">
<a-input v-model="model.experienceOpentime" placeholder="请输入开放时间" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="非遗体验详情" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="experienceDetail">
<j-editor v-model="model.experienceDetail" />
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
</j-form-container>
</a-spin>
</template>
<script>
import { httpAction, getAction } from '@/api/manage'
import { validateDuplicateValue } from '@/utils/util'
export default {
name: 'TravelExperienceForm',
components: {
},
props: {
//
disabled: {
type: Boolean,
default: false,
required: false
}
},
data () {
return {
model:{
},
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 },
},
confirmLoading: false,
validatorRules: {
},
url: {
add: "/travelExperience/travelExperience/add",
edit: "/travelExperience/travelExperience/edit",
queryById: "/travelExperience/travelExperience/queryById"
}
}
},
computed: {
formDisabled(){
return this.disabled
},
},
created () {
//model
this.modelDefault = JSON.parse(JSON.stringify(this.model));
},
methods: {
add () {
this.edit(this.modelDefault);
},
edit (record) {
this.model = Object.assign({}, record);
this.visible = true;
},
submitForm () {
const that = this;
//
this.$refs.form.validate(valid => {
if (valid) {
that.confirmLoading = true;
let httpurl = '';
let method = '';
if(!this.model.id){
httpurl+=this.url.add;
method = 'post';
}else{
httpurl+=this.url.edit;
method = 'put';
}
httpAction(httpurl,this.model,method).then((res)=>{
if(res.success){
that.$message.success(res.message);
that.$emit('ok');
}else{
that.$message.warning(res.message);
}
}).finally(() => {
that.confirmLoading = false;
})
}
})
},
}
}
</script>

+ 84
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/modules/TravelExperienceModal.Style#Drawer.vue View File

@ -0,0 +1,84 @@
<template>
<a-drawer
:title="title"
:width="width"
placement="right"
:closable="false"
@close="close"
destroyOnClose
:visible="visible">
<travel-experience-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit" normal></travel-experience-form>
<div class="drawer-footer">
<a-button @click="handleCancel" style="margin-bottom: 0;">关闭</a-button>
<a-button v-if="!disableSubmit" @click="handleOk" type="primary" style="margin-bottom: 0;">提交</a-button>
</div>
</a-drawer>
</template>
<script>
import TravelExperienceForm from './TravelExperienceForm'
export default {
name: 'TravelExperienceModal',
components: {
TravelExperienceForm
},
data () {
return {
title:"操作",
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
});
},
close () {
this.$emit('close');
this.visible = false;
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
handleCancel () {
this.close()
}
}
}
</script>
<style lang="less" scoped>
/** Button按钮间距 */
.ant-btn {
margin-left: 30px;
margin-bottom: 30px;
float: right;
}
.drawer-footer{
position: absolute;
bottom: -8px;
width: 100%;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
left: 0;
background: #fff;
border-radius: 0 0 2px 2px;
}
</style>

+ 60
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue/modules/TravelExperienceModal.vue View File

@ -0,0 +1,60 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
switchFullscreen
@ok="handleOk"
:okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
@cancel="handleCancel"
cancelText="关闭">
<travel-experience-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></travel-experience-form>
</j-modal>
</template>
<script>
import TravelExperienceForm from './TravelExperienceForm'
export default {
name: 'TravelExperienceModal',
components: {
TravelExperienceForm
},
data () {
return {
title:'',
width:800,
visible: false,
disableSubmit: false
}
},
methods: {
add () {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.add();
})
},
edit (record) {
this.visible=true
this.$nextTick(()=>{
this.$refs.realForm.edit(record);
})
},
close () {
this.$emit('close');
this.visible = false;
},
handleOk () {
this.$refs.realForm.submitForm();
},
submitCallback(){
this.$emit('ok');
this.visible = false;
},
handleCancel () {
this.close()
}
}
}
</script>

+ 61
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/TravelExperience.api.ts View File

@ -0,0 +1,61 @@
import {defHttp} from '/@/utils/http/axios';
import {Modal} from 'ant-design-vue';
enum Api {
list = '/travelExperience/travelExperience/list',
save='/travelExperience/travelExperience/add',
edit='/travelExperience/travelExperience/edit',
deleteOne = '/travelExperience/travelExperience/delete',
deleteBatch = '/travelExperience/travelExperience/deleteBatch',
importExcel = '/travelExperience/travelExperience/importExcel',
exportXls = '/travelExperience/travelExperience/exportXls',
}
/**
* api
* @param params
*/
export const getExportUrl = Api.exportXls;
/**
* api
*/
export const getImportUrl = Api.importExcel;
/**
*
* @param params
*/
export const list = (params) =>
defHttp.get({url: Api.list, params});
/**
*
*/
export const deleteOne = (params,handleSuccess) => {
return defHttp.delete({url: Api.deleteOne, params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
/**
*
* @param params
*/
export const batchDelete = (params, handleSuccess) => {
Modal.confirm({
title: '确认删除',
content: '是否删除选中数据',
okText: '确认',
cancelText: '取消',
onOk: () => {
return defHttp.delete({url: Api.deleteBatch, data: params}, {joinParamsToUrl: true}).then(() => {
handleSuccess();
});
}
});
}
/**
*
* @param params
*/
export const saveOrUpdate = (params, isUpdate) => {
let url = isUpdate ? Api.edit : Api.save;
return defHttp.post({url: url, params});
}

+ 57
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/TravelExperience.data.ts View File

@ -0,0 +1,57 @@
import {BasicColumn} from '/@/components/Table';
import {FormSchema} from '/@/components/Table';
import { rules} from '/@/utils/helper/validator';
import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '非遗体验标题',
align:"center",
dataIndex: 'experienceTitle'
},
{
title: '非遗体验封面',
align:"center",
dataIndex: 'experienceImage',
customRender:render.renderAvatar,
},
{
title: '开放时间',
align:"center",
dataIndex: 'experienceOpentime'
},
{
title: '非遗体验详情',
align:"center",
dataIndex: 'experienceDetail',
slots: { customRender: 'htmlSlot' },
},
];
//查询数据
export const searchFormSchema: FormSchema[] = [
];
//表单数据
export const formSchema: FormSchema[] = [
{
label: '非遗体验标题',
field: 'experienceTitle',
component: 'Input',
},
{
label: '非遗体验封面',
field: 'experienceImage',
component: 'JImageUpload',
componentProps:{
},
},
{
label: '开放时间',
field: 'experienceOpentime',
component: 'Input',
},
{
label: '非遗体验详情',
field: 'experienceDetail',
component: 'JCodeEditor', //TODO String后缀暂未添加
},
];

+ 162
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/TravelExperienceList.vue View File

@ -0,0 +1,162 @@
<template>
<div>
<!--引用表格-->
<BasicTable @register="registerTable" :rowSelection="rowSelection">
<!--插槽:table标题-->
<template #tableTitle>
<a-button type="primary" @click="handleAdd" preIcon="ant-design:plus-outlined"> 新增</a-button>
<a-button type="primary" preIcon="ant-design:export-outlined" @click="onExportXls"> 导出</a-button>
<j-upload-button type="primary" preIcon="ant-design:import-outlined" @click="onImportXls">导入</j-upload-button>
<a-dropdown v-if="checkedKeys.length > 0">
<template #overlay>
<a-menu>
<a-menu-item key="1" @click="batchHandleDelete">
<Icon icon="ant-design:delete-outlined"></Icon>
删除
</a-menu-item>
</a-menu>
</template>
<a-button>批量操作
<Icon icon="mdi:chevron-down"></Icon>
</a-button>
</a-dropdown>
</template>
<!--操作栏-->
<template #action="{ record }">
<TableAction :actions="getTableAction(record)" :dropDownActions="getDropDownAction(record)"/>
</template>
<!--字段回显插槽-->
<template #htmlSlot="{text}">
<div v-html="text"></div>
</template>
<template #fileSlot="{text}">
<span v-if="!text" style="font-size: 12px;font-style: italic;">无文件</span>
<a-button v-else :ghost="true" type="primary" preIcon="ant-design:download-outlined" size="small" @click="downloadFile(text)">下载</a-button>
</template>
</BasicTable>
<!-- 表单区域 -->
<TravelExperienceModal @register="registerModal" @success="handleSuccess"></TravelExperienceModal>
</div>
</template>
<script lang="ts" name="travelExperience-travelExperience" setup>
import {ref, computed, unref} from 'vue';
import {BasicTable, useTable, TableAction} from '/@/components/Table';
import {useModal} from '/@/components/Modal';
import { useListPage } from '/@/hooks/system/useListPage'
import TravelExperienceModal from './components/TravelExperienceModal.vue'
import {columns, searchFormSchema} from './travelExperience.data';
import {list, deleteOne, batchDelete, getImportUrl,getExportUrl} from './travelExperience.api';
const checkedKeys = ref<Array<string | number>>([]);
//model
const [registerModal, {openModal}] = useModal();
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '非遗体验表',
api: list,
columns,
canResize:false,
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
autoSubmitOnEnter:true,
showAdvancedButton:true,
fieldMapToTime: [
],
},
actionColumn: {
width: 120,
},
},
exportConfig: {
name:"非遗体验表",
url: getExportUrl,
},
importConfig: {
url: getImportUrl
},
})
const [registerTable, {reload},{ rowSelection, selectedRowKeys }] = tableContext
/**
* 新增事件
*/
function handleAdd() {
openModal(true, {
isUpdate: false,
showFooter: true,
});
}
/**
* 编辑事件
*/
function handleEdit(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: true,
});
}
/**
* 详情
*/
function handleDetail(record: Recordable) {
openModal(true, {
record,
isUpdate: true,
showFooter: false,
});
}
/**
* 删除事件
*/
async function handleDelete(record) {
await deleteOne({id: record.id}, reload);
}
/**
* 批量删除事件
*/
async function batchHandleDelete() {
await batchDelete({ids: checkedKeys.value}, reload);
}
/**
* 成功回调
*/
function handleSuccess() {
reload();
}
/**
* 操作栏
*/
function getTableAction(record){
return [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
}
]
}
/**
* 下拉操作栏
*/
function getDropDownAction(record){
return [
{
label: '详情',
onClick: handleDetail.bind(null, record),
}, {
label: '删除',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
}
}
]
}
</script>
<style scoped>
</style>

+ 58
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelExperience/vue3/components/TravelExperienceModal.vue View File

@ -0,0 +1,58 @@
<template>
<BasicModal v-bind="$attrs" @register="registerModal" :title="title" @ok="handleSubmit">
<BasicForm @register="registerForm"/>
</BasicModal>
</template>
<script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {BasicForm, useForm} from '/@/components/Form/index';
import {formSchema} from '../travelExperience.data';
import {saveOrUpdate} from '../travelExperience.api';
// Emits
const emit = defineEmits(['register','success']);
const isUpdate = ref(true);
//
const [registerForm, {setProps,resetFields, setFieldsValue, validate}] = useForm({
labelWidth: 150,
schemas: formSchema,
showActionButtonGroup: false,
});
//
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => {
//
await resetFields();
setModalProps({confirmLoading: false,showCancelBtn:!!data?.showFooter,showOkBtn:!!data?.showFooter});
isUpdate.value = !!data?.isUpdate;
if (unref(isUpdate)) {
//
await setFieldsValue({
...data.record,
});
}
//
setProps({ disabled: !data?.showFooter })
});
//
const title = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
//
async function handleSubmit(v) {
try {
let values = await validate();
setModalProps({confirmLoading: true});
//
await saveOrUpdate(values, isUpdate.value);
//
closeModal();
//
emit('success');
} finally {
setModalProps({confirmLoading: false});
}
}
</script>
<style lang="less" scoped>
</style>

+ 16
- 16
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/controller/TravelOrderController.java View File

@ -37,12 +37,12 @@ import io.swagger.annotations.ApiOperation;
import org.jeecg.common.aspect.annotation.AutoLog;
/**
* @Description: 线上预定项目
* @Description: 预约订单
* @Author: jeecg-boot
* @Date: 2024-09-14
* @Date: 2024-09-23
* @Version: V1.0
*/
@Api(tags="线上预定项目表")
@Api(tags="预约订单表")
@RestController
@RequestMapping("/travelOrder/travelOrder")
@Slf4j
@ -59,8 +59,8 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
* @param req
* @return
*/
//@AutoLog(value = "线上预定项目表-分页列表查询")
@ApiOperation(value="线上预定项目表-分页列表查询", notes="线上预定项目表-分页列表查询")
//@AutoLog(value = "预约订单表-分页列表查询")
@ApiOperation(value="预约订单表-分页列表查询", notes="预约订单表-分页列表查询")
@GetMapping(value = "/list")
public Result<IPage<TravelOrder>> queryPageList(TravelOrder travelOrder,
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
@ -78,8 +78,8 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
* @param travelOrder
* @return
*/
@AutoLog(value = "线上预定项目表-添加")
@ApiOperation(value="线上预定项目表-添加", notes="线上预定项目表-添加")
@AutoLog(value = "预约订单表-添加")
@ApiOperation(value="预约订单表-添加", notes="预约订单表-添加")
@PostMapping(value = "/add")
public Result<String> add(@RequestBody TravelOrder travelOrder) {
travelOrderService.save(travelOrder);
@ -92,8 +92,8 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
* @param travelOrder
* @return
*/
@AutoLog(value = "线上预定项目表-编辑")
@ApiOperation(value="线上预定项目表-编辑", notes="线上预定项目表-编辑")
@AutoLog(value = "预约订单表-编辑")
@ApiOperation(value="预约订单表-编辑", notes="预约订单表-编辑")
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
public Result<String> edit(@RequestBody TravelOrder travelOrder) {
travelOrderService.updateById(travelOrder);
@ -106,8 +106,8 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
* @param id
* @return
*/
@AutoLog(value = "线上预定项目表-通过id删除")
@ApiOperation(value="线上预定项目表-通过id删除", notes="线上预定项目表-通过id删除")
@AutoLog(value = "预约订单表-通过id删除")
@ApiOperation(value="预约订单表-通过id删除", notes="预约订单表-通过id删除")
@DeleteMapping(value = "/delete")
public Result<String> delete(@RequestParam(name="id",required=true) String id) {
travelOrderService.removeById(id);
@ -120,8 +120,8 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
* @param ids
* @return
*/
@AutoLog(value = "线上预定项目表-批量删除")
@ApiOperation(value="线上预定项目表-批量删除", notes="线上预定项目表-批量删除")
@AutoLog(value = "预约订单表-批量删除")
@ApiOperation(value="预约订单表-批量删除", notes="预约订单表-批量删除")
@DeleteMapping(value = "/deleteBatch")
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
this.travelOrderService.removeByIds(Arrays.asList(ids.split(",")));
@ -134,8 +134,8 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
* @param id
* @return
*/
//@AutoLog(value = "线上预定项目表-通过id查询")
@ApiOperation(value="线上预定项目表-通过id查询", notes="线上预定项目表-通过id查询")
//@AutoLog(value = "预约订单表-通过id查询")
@ApiOperation(value="预约订单表-通过id查询", notes="预约订单表-通过id查询")
@GetMapping(value = "/queryById")
public Result<TravelOrder> queryById(@RequestParam(name="id",required=true) String id) {
TravelOrder travelOrder = travelOrderService.getById(id);
@ -153,7 +153,7 @@ public class TravelOrderController extends JeecgController<TravelOrder, ITravelO
*/
@RequestMapping(value = "/exportXls")
public ModelAndView exportXls(HttpServletRequest request, TravelOrder travelOrder) {
return super.exportXls(request, travelOrder, TravelOrder.class, "线上预定项目表");
return super.exportXls(request, travelOrder, TravelOrder.class, "预约订单表");
}
/**


+ 38
- 42
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/entity/TravelOrder.java View File

@ -18,16 +18,16 @@ import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* @Description: 线上预定项目
* @Description: 预约订单
* @Author: jeecg-boot
* @Date: 2024-09-14
* @Date: 2024-09-23
* @Version: V1.0
*/
@Data
@TableName("travel_order")
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="travel_order对象", description="线上预定项目表")
@ApiModel(value="travel_order对象", description="预约订单表")
public class TravelOrder implements Serializable {
private static final long serialVersionUID = 1L;
@ -35,44 +35,40 @@ public class TravelOrder implements Serializable {
@TableId(type = IdType.ASSIGN_ID)
@ApiModelProperty(value = "主键")
private java.lang.String id;
/**预约项目标题*/
@Excel(name = "预约项目标题", width = 15)
@ApiModelProperty(value = "预约项目标题")
/**创建人*/
@ApiModelProperty(value = "创建人")
private java.lang.String createBy;
/**创建日期*/
@ApiModelProperty(value = "创建日期")
private java.util.Date createTime;
/**更新人*/
@ApiModelProperty(value = "更新人")
private java.lang.String updateBy;
/**更新日期*/
@ApiModelProperty(value = "更新日期")
private java.util.Date updateTime;
/**订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)*/
@Excel(name = "订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)", width = 15)
@ApiModelProperty(value = "订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)")
private java.lang.String orderType;
/**主题*/
@Excel(name = "主题", width = 15)
@ApiModelProperty(value = "主题")
private java.lang.String orderTitle;
/**预约项目副标题*/
@Excel(name = "预约项目副标题", width = 15)
@ApiModelProperty(value = "预约项目副标题")
private java.lang.String orderShortTitle;
/**预约项目封面*/
@Excel(name = "预约项目封面", width = 15)
@ApiModelProperty(value = "预约项目封面")
private java.lang.String orderImage;
/**预约项目价格*/
@Excel(name = "预约项目价格", width = 15)
@ApiModelProperty(value = "预约项目价格")
private java.lang.String orderPrice;
/**预约项目简介*/
@Excel(name = "预约项目简介", width = 15)
@ApiModelProperty(value = "预约项目简介")
private java.lang.String orderBrief;
/**关于行程*/
@Excel(name = "关于行程", width = 15)
@ApiModelProperty(value = "关于行程")
private java.lang.String orderRoute;
/**注意事项*/
@Excel(name = "注意事项", width = 15)
@ApiModelProperty(value = "注意事项")
private java.lang.String orderAttention;
/**出行说明*/
@Excel(name = "出行说明", width = 15)
@ApiModelProperty(value = "出行说明")
private java.lang.String orderStatement;
/**项目详情介绍*/
@Excel(name = "项目详情介绍", width = 15)
@ApiModelProperty(value = "项目详情介绍")
private java.lang.String orderDetail;
/**项目所属分类*/
@Excel(name = "项目所属分类", width = 15)
@ApiModelProperty(value = "项目所属分类")
private java.lang.String categoryId;
/**电话*/
@Excel(name = "电话", width = 15)
@ApiModelProperty(value = "电话")
private java.lang.String orderPhone;
/**预约时间*/
@Excel(name = "预约时间", width = 15)
@ApiModelProperty(value = "预约时间")
private java.util.Date orderTime;
/**预约价格*/
@Excel(name = "预约价格", width = 15)
@ApiModelProperty(value = "预约价格")
private java.math.BigDecimal orderPrice;
/**预约项目编号*/
@Excel(name = "预约项目编号", width = 15)
@ApiModelProperty(value = "预约项目编号")
private java.lang.String itemId;
}

+ 2
- 2
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/mapper/TravelOrderMapper.java View File

@ -7,9 +7,9 @@ import org.jeecg.modules.travelOrder.entity.TravelOrder;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @Description: 线上预定项目
* @Description: 预约订单
* @Author: jeecg-boot
* @Date: 2024-09-14
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface TravelOrderMapper extends BaseMapper<TravelOrder> {


+ 2
- 2
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/service/ITravelOrderService.java View File

@ -4,9 +4,9 @@ import org.jeecg.modules.travelOrder.entity.TravelOrder;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @Description: 线上预定项目
* @Description: 预约订单
* @Author: jeecg-boot
* @Date: 2024-09-14
* @Date: 2024-09-23
* @Version: V1.0
*/
public interface ITravelOrderService extends IService<TravelOrder> {


+ 2
- 2
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/service/impl/TravelOrderServiceImpl.java View File

@ -8,9 +8,9 @@ import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
/**
* @Description: 线上预定项目
* @Description: 预约订单
* @Author: jeecg-boot
* @Date: 2024-09-14
* @Date: 2024-09-23
* @Version: V1.0
*/
@Service


+ 20
- 47
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue/TravelOrderList.vue View File

@ -12,7 +12,7 @@
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('线上预定项目表')">导出</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('预约订单表')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button>
</a-upload>
@ -99,7 +99,6 @@
import { mixinDevice } from '@/utils/mixin'
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import TravelOrderModal from './modules/TravelOrderModal'
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil'
export default {
name: 'TravelOrderList',
@ -109,7 +108,7 @@
},
data () {
return {
description: '线上预定项目表管理页面',
description: '预约订单表管理页面',
//
columns: [
{
@ -123,56 +122,34 @@
}
},
{
title:'预约项目标题',
title:'订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)',
align:"center",
dataIndex: 'orderTitle'
},
{
title:'预约项目副标题',
align:"center",
dataIndex: 'orderShortTitle'
},
{
title:'预约项目封面',
align:"center",
dataIndex: 'orderImage',
scopedSlots: {customRender: 'imgSlot'}
},
{
title:'预约项目价格',
align:"center",
dataIndex: 'orderPrice'
},
{
title:'预约项目简介',
align:"center",
dataIndex: 'orderBrief'
dataIndex: 'orderType'
},
{
title:'关于行程',
title:'主题',
align:"center",
dataIndex: 'orderRoute'
dataIndex: 'orderTitle'
},
{
title:'注意事项',
title:'电话',
align:"center",
dataIndex: 'orderAttention'
dataIndex: 'orderPhone'
},
{
title:'出行说明',
title:'预约时间',
align:"center",
dataIndex: 'orderStatement'
dataIndex: 'orderTime'
},
{
title:'项目详情介绍',
title:'预约价格',
align:"center",
dataIndex: 'orderDetail',
scopedSlots: {customRender: 'htmlSlot'}
dataIndex: 'orderPrice'
},
{
title:'项目所属分类',
title:'预约项目编号',
align:"center",
dataIndex: 'categoryId'
dataIndex: 'itemId'
},
{
title: '操作',
@ -208,16 +185,12 @@
},
getSuperFieldList(){
let fieldList=[];
fieldList.push({type:'string',value:'orderTitle',text:'预约项目标题',dictCode:''})
fieldList.push({type:'string',value:'orderShortTitle',text:'预约项目副标题',dictCode:''})
fieldList.push({type:'string',value:'orderImage',text:'预约项目封面',dictCode:''})
fieldList.push({type:'string',value:'orderPrice',text:'预约项目价格',dictCode:''})
fieldList.push({type:'string',value:'orderBrief',text:'预约项目简介',dictCode:''})
fieldList.push({type:'string',value:'orderRoute',text:'关于行程',dictCode:''})
fieldList.push({type:'string',value:'orderAttention',text:'注意事项',dictCode:''})
fieldList.push({type:'string',value:'orderStatement',text:'出行说明',dictCode:''})
fieldList.push({type:'string',value:'orderDetail',text:'项目详情介绍',dictCode:''})
fieldList.push({type:'string',value:'categoryId',text:'项目所属分类',dictCode:"travel_category,category_name,id"})
fieldList.push({type:'string',value:'orderType',text:'订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)',dictCode:''})
fieldList.push({type:'string',value:'orderTitle',text:'主题',dictCode:''})
fieldList.push({type:'string',value:'orderPhone',text:'电话',dictCode:''})
fieldList.push({type:'datetime',value:'orderTime',text:'预约时间'})
fieldList.push({type:'BigDecimal',value:'orderPrice',text:'预约价格',dictCode:''})
fieldList.push({type:'string',value:'itemId',text:'预约项目编号',dictCode:''})
this.superFieldList = fieldList
}
}


+ 12
- 32
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue/modules/TravelOrderForm.vue View File

@ -4,53 +4,33 @@
<a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
<a-row>
<a-col :span="24">
<a-form-model-item label="预约项目标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderTitle">
<a-input v-model="model.orderTitle" placeholder="请输入预约项目标题" ></a-input>
<a-form-model-item label="订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderType">
<a-input v-model="model.orderType" placeholder="请输入订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="预约项目副标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderShortTitle">
<a-input v-model="model.orderShortTitle" placeholder="请输入预约项目副标题" ></a-input>
<a-form-model-item label="题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderTitle">
<a-input v-model="model.orderTitle" placeholder="请输入题" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="预约项目封面" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderImage">
<j-image-upload isMultiple v-model="model.orderImage" ></j-image-upload>
<a-form-model-item label="电话" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderPhone">
<a-input v-model="model.orderPhone" placeholder="请输入电话" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="预约项目价格" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderPrice">
<a-input v-model="model.orderPrice" placeholder="请输入预约项目价格" ></a-input>
<a-form-model-item label="预约时间" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderTime">
<j-date placeholder="请选择预约时间" v-model="model.orderTime" :show-time="true" date-format="YYYY-MM-DD HH:mm:ss" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="预约项目简介" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderBrief">
<a-input v-model="model.orderBrief" placeholder="请输入预约项目简介" ></a-input>
<a-form-model-item label="预约价格" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderPrice">
<a-input-number v-model="model.orderPrice" placeholder="请输入预约价格" style="width: 100%" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="关于行程" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderRoute">
<a-input v-model="model.orderRoute" placeholder="请输入关于行程" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="注意事项" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderAttention">
<a-input v-model="model.orderAttention" placeholder="请输入注意事项" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="出行说明" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderStatement">
<a-input v-model="model.orderStatement" placeholder="请输入出行说明" ></a-input>
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目详情介绍" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orderDetail">
<j-editor v-model="model.orderDetail" />
</a-form-model-item>
</a-col>
<a-col :span="24">
<a-form-model-item label="项目所属分类" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="categoryId">
<a-input v-model="model.categoryId" placeholder="请输入项目所属分类" ></a-input>
<a-form-model-item label="预约项目编号" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="itemId">
<a-input v-model="model.itemId" placeholder="请输入预约项目编号" ></a-input>
</a-form-model-item>
</a-col>
</a-row>


+ 25
- 69
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue3/TravelOrder.data.ts View File

@ -5,56 +5,34 @@ import { render } from '/@/utils/common/renderUtils';
//列表数据
export const columns: BasicColumn[] = [
{
title: '预约项目标题',
title: '订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)',
align:"center",
dataIndex: 'orderTitle'
},
{
title: '预约项目副标题',
align:"center",
dataIndex: 'orderShortTitle'
},
{
title: '预约项目封面',
align:"center",
dataIndex: 'orderImage',
customRender:render.renderAvatar,
},
{
title: '预约项目价格',
align:"center",
dataIndex: 'orderPrice'
},
{
title: '预约项目简介',
align:"center",
dataIndex: 'orderBrief'
dataIndex: 'orderType'
},
{
title: '关于行程',
title: '主题',
align:"center",
dataIndex: 'orderRoute'
dataIndex: 'orderTitle'
},
{
title: '注意事项',
title: '电话',
align:"center",
dataIndex: 'orderAttention'
dataIndex: 'orderPhone'
},
{
title: '出行说明',
title: '预约时间',
align:"center",
dataIndex: 'orderStatement'
dataIndex: 'orderTime'
},
{
title: '项目详情介绍',
title: '预约价格',
align:"center",
dataIndex: 'orderDetail',
slots: { customRender: 'htmlSlot' },
dataIndex: 'orderPrice'
},
{
title: '项目所属分类',
title: '预约项目编号',
align:"center",
dataIndex: 'categoryId'
dataIndex: 'itemId'
},
];
//查询数据
@ -63,55 +41,33 @@ export const searchFormSchema: FormSchema[] = [
//表单数据
export const formSchema: FormSchema[] = [
{
label: '预约项目标题',
field: 'orderTitle',
component: 'Input',
},
{
label: '预约项目副标题',
field: 'orderShortTitle',
label: '订单类型(0-路径定制 1-遗产讲述 2-达人同游 3-我要跟拍 4-非遗体验)',
field: 'orderType',
component: 'Input',
},
{
label: '预约项目封面',
field: 'orderImage',
component: 'JImageUpload',
componentProps:{
},
},
{
label: '预约项目价格',
field: 'orderPrice',
component: 'Input',
},
{
label: '预约项目简介',
field: 'orderBrief',
component: 'Input',
},
{
label: '关于行程',
field: 'orderRoute',
label: '主题',
field: 'orderTitle',
component: 'Input',
},
{
label: '注意事项',
field: 'orderAttention',
label: '电话',
field: 'orderPhone',
component: 'Input',
},
{
label: '出行说明',
field: 'orderStatement',
label: '预约时间',
field: 'orderTime',
component: 'Input',
},
{
label: '项目详情介绍',
field: 'orderDetail',
component: 'JCodeEditor', //TODO String后缀暂未添加
label: '预约价格',
field: 'orderPrice',
component: 'InputNumber',
},
{
label: '项目所属分类',
field: 'categoryId',
label: '预约项目编号',
field: 'itemId',
component: 'Input',
},
];

+ 2
- 2
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/travelOrder/vue3/TravelOrderList.vue View File

@ -53,7 +53,7 @@
//table
const { prefixCls,tableContext,onExportXls,onImportXls } = useListPage({
tableProps:{
title: '线上预定项目表',
title: '预约订单表',
api: list,
columns,
canResize:false,
@ -70,7 +70,7 @@
},
},
exportConfig: {
name:"线上预定项目表",
name:"预约订单表",
url: getExportUrl,
},
importConfig: {


+ 74
- 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/travelController/IndexApiController.java View File

@ -6,6 +6,9 @@ import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiBean.PageBean;
import org.jeecg.modules.apiService.IndexApiService;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import org.jeecg.modules.travelOrder.entity.TravelOrder;
import org.jeecg.modules.travelTime.entity.TravelTime;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@ -103,9 +106,78 @@ public class IndexApiController {
return indexApiService.queryVedioById(roleInfoId, pageBean);
}
//遗产路径-待补充
//遗产路径/我要研学
@ApiOperation(value="小程序-获取游玩项目列表/详情", notes="amusementType:0-遗产路径 1-我要研学;isPay:0-免费 1-付费")
@RequestMapping(value = "/queryAmusement", method = {RequestMethod.GET})
public Result<?> queryAmusement(String amusementId, String amusementType, String isPay, PageBean pageBean){
return indexApiService.queryAmusement(amusementId, amusementType, isPay, pageBean);
}
//非遗体验
@ApiOperation(value="小程序-获取非遗体验列表/详情", notes="小程序-获取非遗体验列表/详情")
@RequestMapping(value = "/queryExperience", method = {RequestMethod.GET})
public Result<?> queryExperience(String experienceId, PageBean pageBean){
return indexApiService.queryExperience(experienceId, pageBean);
}
/*//我的收藏
@ApiOperation(value="小程序-获取我的收藏列表", notes="小程序-获取我的收藏列表")
@RequestMapping(value = "/queryCollection", method = {RequestMethod.GET})
public Result<?> queryCollection(String experienceId, PageBean pageBean){
return indexApiService.queryCollection(experienceId, pageBean);
}
//我的预约
@ApiOperation(value="小程序-获取我的预约列表", notes="小程序-获取我的预约列表")
@RequestMapping(value = "/queryPreOrder", method = {RequestMethod.GET})
public Result<?> queryPreOrder(String preOrderType, PageBean pageBean){
return indexApiService.queryPreOrder(preOrderType, pageBean);
}*/
//地址
//查询地址
@ApiOperation(value="小程序-查询地址", notes="小程序-查询地址")
@RequestMapping(value = "/queryAddress", method = {RequestMethod.GET})
public Result<?> queryAddress(TravelAddress travelAddress, PageBean pageBean){
return indexApiService.queryAddress(travelAddress, pageBean);
}
//新增地址
@ApiOperation(value="小程序-新增地址", notes="小程序-新增地址")
@RequestMapping(value = "/addAddress", method = {RequestMethod.POST})
public Result<?> addAddress(TravelAddress travelAddress){
return indexApiService.addAddress(travelAddress);
}
//删除地址
@ApiOperation(value="小程序-删除地址", notes="小程序-删除地址")
@RequestMapping(value = "/deleteAddress", method = {RequestMethod.DELETE})
public Result<?> deleteAddress(String AddressId){
return indexApiService.deleteAddress(AddressId);
}
//修改地址
@ApiOperation(value="小程序-修改地址", notes="小程序-修改地址")
@RequestMapping(value = "/updateAddress", method = {RequestMethod.POST})
public Result<?> updateAddress(TravelAddress travelAddress){
return indexApiService.updateAddress(travelAddress);
}
//时间段查询
@ApiOperation(value="小程序-查询预约时间段", notes="小程序-查询预约时间段")
@RequestMapping(value = "/queryOrderTime", method = {RequestMethod.GET})
public Result<?> queryOrderTime(TravelTime travelTime){
return indexApiService.queryOrderTime(travelTime);
}
//查询订单信息
@ApiOperation(value="小程序-查询订单列表", notes="小程序-查询订单列表")
@RequestMapping(value = "/queryOrderList", method = {RequestMethod.GET})
public Result<?> queryOrderList(TravelOrder travelOrder, PageBean pageBean){
return indexApiService.queryOrderList(travelOrder, pageBean);
}
//我要研学-待补充
//文创好物-待补充


+ 32
- 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/IndexApiService.java View File

@ -2,6 +2,9 @@ package org.jeecg.modules.apiService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiBean.PageBean;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import org.jeecg.modules.travelOrder.entity.TravelOrder;
import org.jeecg.modules.travelTime.entity.TravelTime;
public interface IndexApiService {
//获取小程序任一文章或服务
@ -39,9 +42,36 @@ public interface IndexApiService {
//根据角色id获取视频列表
public Result<?> queryVedioById(String roleInfoId, PageBean pageBean);
//遗产路径-待补充
//根据角色id获取视遗产路径/我要研学列表
public Result<?> queryAmusement(String amusementId, String amusementType, String isPay, PageBean pageBean);
//非遗体验
public Result<?> queryExperience(String experienceId, PageBean pageBean);
//我的收藏
public Result<?> queryCollection(String collectionType, PageBean pageBean);
//我的预约
public Result<?> queryPreOrder(String collectionType, PageBean pageBean);
//查询地址
public Result<?> queryAddress(TravelAddress travelAddress, PageBean pageBean);
//新增地址
public Result<?> addAddress(TravelAddress travelAddress);
//删除地址
public Result<?> deleteAddress(String addressId);
//修改地址
public Result<?> updateAddress(TravelAddress travelAddress);
//预约时段表
public Result<?> queryOrderTime(TravelTime travelTime);
//查询预约订单列表
public Result<?> queryOrderList(TravelOrder travelOrder, PageBean pageBean);
//我要研学-待补充
//文创好物-待补充


+ 224
- 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/IndexApiServiceImpl.java View File

@ -5,26 +5,37 @@ import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiBean.PageBean;
import org.jeecg.modules.apiService.IndexApiService;
import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService;
import org.jeecg.modules.travelAddress.entity.TravelAddress;
import org.jeecg.modules.travelAddress.service.ITravelAddressService;
import org.jeecg.modules.travelAmusement.entity.TravelAmusement;
import org.jeecg.modules.travelAmusement.service.ITravelAmusementService;
import org.jeecg.modules.travelArea.entity.TravelArea;
import org.jeecg.modules.travelArea.service.ITravelAreaService;
import org.jeecg.modules.travelArticle.entity.TravelArticle;
import org.jeecg.modules.travelArticle.service.ITravelArticleService;
import org.jeecg.modules.travelCategory.entity.TravelCategory;
import org.jeecg.modules.travelCategory.service.ITravelCategoryService;
import org.jeecg.modules.travelCertification.service.ITravelCertificationService;
import org.jeecg.modules.travelExperience.entity.TravelExperience;
import org.jeecg.modules.travelExperience.service.ITravelExperienceService;
import org.jeecg.modules.travelImage.entity.TravelImage;
import org.jeecg.modules.travelImage.service.ITravelImageService;
import org.jeecg.modules.travelOrder.entity.TravelOrder;
import org.jeecg.modules.travelOrder.service.ITravelOrderService;
import org.jeecg.modules.travelRole.service.ITravelRoleService;
import org.jeecg.modules.travelRoleInfo.entity.TravelRoleInfo;
import org.jeecg.modules.travelRoleInfo.service.ITravelRoleInfoService;
import org.jeecg.modules.travelSpot.entity.TravelSpot;
import org.jeecg.modules.travelSpot.service.ITravelSpotService;
import org.jeecg.modules.travelTime.entity.TravelTime;
import org.jeecg.modules.travelTime.service.ITravelTimeService;
import org.jeecg.modules.travelVideo.entity.TravelVideo;
import org.jeecg.modules.travelVideo.service.ITravelVideoService;
import org.jeecg.modules.travelVolunteer.service.ITravelVolunteerService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
@Service
@ -59,12 +70,33 @@ public class IndexApiServiceImpl implements IndexApiService {
//视频表
@Resource
private ITravelVideoService travelVideoService;
//证件
//游玩项目
@Resource
private ITravelCertificationService travelCertificationService;
//订单表
private ITravelAmusementService travelAmusementService;
//非遗体验表
@Resource
private ITravelExperienceService travelExperienceService;
//收货地址表
@Resource
private ITravelAddressService travelAddressService;
//预约时段表
@Resource
private ITravelTimeService travelTimeService;
//预约订单表
@Resource
private ITravelOrderService travelOrderService;
//证件表
@Resource
private ITravelCertificationService travelCertificationService;
//志愿者表
@Resource
private ITravelVolunteerService travelVolunteerService;
@ -363,6 +395,195 @@ public class IndexApiServiceImpl implements IndexApiService {
return Result.OK("视频列表", pageList);
}
//获取游玩项目列表
@Override
public Result<?> queryAmusement(String amusementId, String amusementType, String isPay, PageBean pageBean) {
Page<TravelAmusement> page = new Page<TravelAmusement>(pageBean.getPageNo(), pageBean.getPageSize());
Page<TravelAmusement> pageList;
if(null != amusementId && null != amusementType && null != isPay){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getId, amusementId)
.eq(TravelAmusement::getAmusementType, amusementType)
.eq(TravelAmusement::getIsPay, isPay)
.page(page);
}else if(null != amusementId && null != amusementType){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getId, amusementId)
.eq(TravelAmusement::getAmusementType, amusementType)
.page(page);
}else if(null != amusementId && null != isPay){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getId, amusementId)
.eq(TravelAmusement::getIsPay, isPay)
.page(page);
}else if(null != amusementType && null != isPay){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getAmusementType, amusementType)
.eq(TravelAmusement::getIsPay, isPay)
.page(page);
}else if(null != amusementId && null != amusementType){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getId, amusementId)
.eq(TravelAmusement::getAmusementType, amusementType)
.page(page);
}else if(null != amusementId){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getId, amusementId)
.page(page);
}else if(null != amusementType){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getAmusementType, amusementType)
.page(page);
}else if(null != isPay){
pageList = travelAmusementService
.lambdaQuery()
.eq(TravelAmusement::getIsPay, isPay)
.page(page);
}else {
pageList = travelAmusementService
.lambdaQuery()
.page(page);
}
return Result.OK("游玩项目列表/详情", pageList);
}
//获取非遗体验
@Override
public Result<?> queryExperience(String experienceId, PageBean pageBean) {
Page<TravelExperience> page = new Page<TravelExperience>(pageBean.getPageNo(), pageBean.getPageSize());
Page<TravelExperience> pageList;
if(null != experienceId){
pageList = travelExperienceService
.lambdaQuery()
.eq(TravelExperience::getId, experienceId)
.page(page);
}else {
pageList = travelExperienceService
.lambdaQuery()
.page(page);
}
return Result.OK("非遗体验列表/详情", pageList);
}
@Override
public Result<?> queryCollection(String collectionType, PageBean pageBean) {
return null;
}
@Override
public Result<?> queryPreOrder(String collectionType, PageBean pageBean) {
return null;
}
//获取地址列表
@Override
public Result<?> queryAddress(TravelAddress travelAddress, PageBean pageBean) {
Page<TravelAddress> page = new Page<TravelAddress>(pageBean.getPageNo(), pageBean.getPageSize());
Page<TravelAddress> pageList;
if(null != travelAddress.getMemberId()){
pageList = travelAddressService
.lambdaQuery()
.eq(TravelAddress::getMemberId,travelAddress.getMemberId())
.page(page);
}else {
pageList = travelAddressService
.lambdaQuery()
.page(page);
}
return Result.OK("地址列表", pageList);
}
//新增地址
@Override
public Result<?> addAddress(TravelAddress travelAddress) {
boolean flag = travelAddressService.save(travelAddress);
if(flag){
return Result.OK("新增地址成功!");
}else {
return Result.OK("新增地址失败!");
}
}
//删除地址
@Override
public Result<?> deleteAddress(String addressId) {
boolean flag = travelAddressService.removeById(addressId);
if(flag){
return Result.OK("删除地址成功!");
}else {
return Result.OK("删除地址失败!");
}
}
//修改地址
@Override
public Result<?> updateAddress(TravelAddress travelAddress) {
boolean flag = travelAddressService.updateById(travelAddress);
if(flag){
return Result.OK("修改地址成功!");
}else {
return Result.OK("修改地址失败!");
}
}
//查询预约时间段
@Override
public Result<?> queryOrderTime(TravelTime travelTime) {
List<TravelTime> list;
if(null != travelTime.getTimeType()){
list = travelTimeService
.lambdaQuery()
.eq(TravelTime::getTimeType, travelTime.getTimeType())
.orderByAsc(TravelTime::getTimeDot)
.list();
}else {
list = travelTimeService
.lambdaQuery()
.orderByAsc(TravelTime::getTimeDot)
.list();
}
return Result.OK("时段列表", list);
}
//查询预约订单列表
@Override
public Result<?> queryOrderList(TravelOrder travelOrder, PageBean pageBean) {
Page<TravelOrder> page = new Page<TravelOrder>(pageBean.getPageNo(), pageBean.getPageSize());
Page<TravelOrder> pageList;
if(null != travelOrder.getOrderType()){
pageList = travelOrderService
.lambdaQuery()
.eq(TravelOrder::getOrderType, travelOrder.getOrderType())
.orderByDesc(TravelOrder::getCreateTime)
.page(page);
}else {
pageList = travelOrderService
.lambdaQuery()
.orderByDesc(TravelOrder::getCreateTime)
.page(page);
}
return Result.OK("订单列表", pageList);
}
//添加建议
@Override
public Result<?> addAdvice() {


Loading…
Cancel
Save