Author | SHA1 | Message | Date |
---|---|---|---|
|
59afd0f0c9 | 充值修改sql | 2 months ago |
|
5a68f72b87 | 后台管理系统调整 | 2 months ago |
@ -1,5 +1,5 @@ | |||
NODE_ENV=production | |||
VUE_APP_PLATFORM_NAME=工种平台后台管理系统 | |||
VUE_APP_PLATFORM_NAME=智选猎头后台管理系统 | |||
# 开启单点登录 | |||
VUE_APP_SSO=false | |||
# 开启微应用模式 | |||
@ -0,0 +1,290 @@ | |||
<template> | |||
<a-card :bordered="false"> | |||
<!-- 查询区域 --> | |||
<div class="table-page-search-wrapper"> | |||
<a-form layout="inline" @keyup.enter.native="searchQuery"> | |||
<a-row :gutter="24"> | |||
<a-col :xl="6" :lg="7" :md="8" :sm="24"> | |||
<a-form-item label="用户名"> | |||
<a-input placeholder="请输入用户名" v-model="queryParam.userName"></a-input> | |||
</a-form-item> | |||
</a-col> | |||
<a-col :xl="6" :lg="7" :md="8" :sm="24"> | |||
<a-form-item label="工人名"> | |||
<a-input placeholder="请输入工人名" v-model="queryParam.workName"></a-input> | |||
</a-form-item> | |||
</a-col> | |||
<template v-if="toggleSearchStatus"> | |||
<a-col :xl="6" :lg="7" :md="8" :sm="24"> | |||
<a-form-item label="工人联系方式"> | |||
<a-input placeholder="请输入工人联系方式" v-model="queryParam.phone"></a-input> | |||
</a-form-item> | |||
</a-col> | |||
</template> | |||
<a-col :xl="6" :lg="7" :md="8" :sm="24"> | |||
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> | |||
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button> | |||
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button> | |||
<a @click="handleToggleSearch" style="margin-left: 8px"> | |||
{{ toggleSearchStatus ? '收起' : '展开' }} | |||
<a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> | |||
</a> | |||
</span> | |||
</a-col> | |||
</a-row> | |||
</a-form> | |||
</div> | |||
<!-- 查询区域-END --> | |||
<!-- 操作按钮区域 --> | |||
<div class="table-operator"> | |||
</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> | |||
<tb-task-modal ref="modalForm" @ok="modalFormOk"></tb-task-modal> | |||
</a-card> | |||
</template> | |||
<script> | |||
import '@/assets/less/TableExpand.less' | |||
import { mixinDevice } from '@/utils/mixin' | |||
import { JeecgListMixin } from '@/mixins/JeecgListMixin' | |||
import TbTaskModal from './modules/TbTaskModal' | |||
import {filterMultiDictText} from '@/components/dict/JDictSelectUtil' | |||
export default { | |||
name: 'TbTaskList', | |||
mixins:[JeecgListMixin, mixinDevice], | |||
components: { | |||
TbTaskModal | |||
}, | |||
data () { | |||
return { | |||
description: 'tb_task管理页面', | |||
// 表头 | |||
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: 'workName' | |||
}, | |||
{ | |||
title:'头像图片', | |||
align:"center", | |||
dataIndex: 'headPic', | |||
scopedSlots: {customRender: 'imgSlot'} | |||
}, | |||
{ | |||
title:'工人出发地址', | |||
align:"center", | |||
dataIndex: 'workerAddress' | |||
}, | |||
{ | |||
title:'行业/工种', | |||
align:"center", | |||
dataIndex: 'industryName' | |||
}, | |||
{ | |||
title:'工人个人简介', | |||
align:"center", | |||
dataIndex: 'detail', | |||
scopedSlots: {customRender: 'htmlSlot'} | |||
}, | |||
{ | |||
title:'图片上传', | |||
align:"center", | |||
dataIndex: 'workPic', | |||
scopedSlots: {customRender: 'imgSlot'} | |||
}, | |||
{ | |||
title:'工人联系方式', | |||
align:"center", | |||
dataIndex: 'phone' | |||
}, | |||
{ | |||
title:'年龄', | |||
align:"center", | |||
dataIndex: 'age' | |||
}, | |||
{ | |||
title:'性别', | |||
align:"center", | |||
dataIndex: 'gender_dictText' | |||
}, | |||
{ | |||
title:'期望日薪', | |||
align:"center", | |||
dataIndex: 'dayMoney' | |||
}, | |||
{ | |||
title:'工作时长', | |||
align:"center", | |||
dataIndex: 'workTime' | |||
}, | |||
{ | |||
title:'期望薪资最小值', | |||
align:"center", | |||
dataIndex: 'moneymin' | |||
}, | |||
{ | |||
title:'期望薪资最大值', | |||
align:"center", | |||
dataIndex: 'moneymax' | |||
}, | |||
{ | |||
title:'审核状态', | |||
align:"center", | |||
dataIndex: 'auditStatus_dictText' | |||
}, | |||
{ | |||
title:'结算方式', | |||
align:"center", | |||
dataIndex: 'payType_dictText' | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'action', | |||
align:"center", | |||
fixed:"right", | |||
width:147, | |||
scopedSlots: { customRender: 'action' } | |||
} | |||
], | |||
url: { | |||
list: "/tbTask/tbTask/list1", | |||
delete: "/tbTask/tbTask/delete", | |||
deleteBatch: "/tbTask/tbTask/deleteBatch", | |||
exportXlsUrl: "/tbTask/tbTask/exportXls", | |||
importExcelUrl: "tbTask/tbTask/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:'workName',text:'工人名',dictCode:''}) | |||
fieldList.push({type:'Text',value:'headPic',text:'头像图片',dictCode:''}) | |||
fieldList.push({type:'string',value:'title',text:'工作标题',dictCode:''}) | |||
fieldList.push({type:'string',value:'companyName',text:'公司名称',dictCode:''}) | |||
fieldList.push({type:'string',value:'workerAddress',text:'工人出发地址',dictCode:''}) | |||
fieldList.push({type:'int',value:'travelType',text:'出行方式 0出租车 1 网约车 2 公交地铁 3无',dictCode:'travel_type'}) | |||
fieldList.push({type:'string',value:'workAddress',text:'上班地址',dictCode:''}) | |||
fieldList.push({type:'string',value:'industryName',text:'行业/工种',dictCode:''}) | |||
fieldList.push({type:'Text',value:'detail',text:'工人个人简介',dictCode:''}) | |||
fieldList.push({type:'Text',value:'workDetail',text:'工作内容',dictCode:''}) | |||
fieldList.push({type:'Text',value:'workPic',text:'图片上传',dictCode:''}) | |||
fieldList.push({type:'string',value:'phone',text:'工人联系方式',dictCode:''}) | |||
fieldList.push({type:'string',value:'bossPhone',text:'招聘方联系方式',dictCode:''}) | |||
fieldList.push({type:'int',value:'role',text:'角色 0招聘方 1 求职方',dictCode:'user_role'}) | |||
fieldList.push({type:'int',value:'age',text:'年龄',dictCode:''}) | |||
fieldList.push({type:'int',value:'gender',text:'性别',dictCode:'sex'}) | |||
fieldList.push({type:'int',value:'dayMoney',text:'期望日薪',dictCode:''}) | |||
fieldList.push({type:'datetime',value:'startTime',text:'时间范围'}) | |||
fieldList.push({type:'datetime',value:'endTime',text:'时间范围'}) | |||
fieldList.push({type:'string',value:'workTime',text:'工作时长',dictCode:''}) | |||
fieldList.push({type:'int',value:'moneymin',text:'期望薪资最小值',dictCode:''}) | |||
fieldList.push({type:'int',value:'moneymax',text:'期望薪资最大值',dictCode:''}) | |||
fieldList.push({type:'int',value:'auditStatus',text:'审核状态 0审核中 1 审核通过 2审核未通过',dictCode:'audit_status'}) | |||
fieldList.push({type:'int',value:'payType',text:'结算方式 0提前支付 1 试用后支付',dictCode:'pay_type'}) | |||
this.superFieldList = fieldList | |||
} | |||
} | |||
} | |||
</script> | |||
<style scoped> | |||
@import '~@assets/less/common.less'; | |||
</style> |
@ -0,0 +1,224 @@ | |||
<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="workName"> | |||
<a-input v-model="model.workName" placeholder="请输入工人名" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="头像图片" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="headPic"> | |||
<j-image-upload isMultiple v-model="model.headPic" ></j-image-upload> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="工作标题" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="title"> | |||
<a-input v-model="model.title" placeholder="请输入工作标题" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="公司名称" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="companyName"> | |||
<a-input v-model="model.companyName" placeholder="请输入公司名称" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="工人出发地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workerAddress"> | |||
<a-input v-model="model.workerAddress" placeholder="请输入工人出发地址" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="出行方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="travelType"> | |||
<j-dict-select-tag type="list" v-model="model.travelType" dictCode="travel_type" placeholder="请选择出行方式" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="上班地址" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workAddress"> | |||
<a-input v-model="model.workAddress" placeholder="请输入上班地址" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="行业/工种" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="industryName"> | |||
<a-input v-model="model.industryName" placeholder="请输入行业/工种" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="工人个人简介" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="detail"> | |||
<j-editor v-model="model.detail" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="工作内容" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workDetail"> | |||
<j-editor v-model="model.workDetail" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="图片上传" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="workPic"> | |||
<j-image-upload isMultiple v-model="model.workPic" ></j-image-upload> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="工人联系方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="phone"> | |||
<a-input v-model="model.phone" placeholder="请输入工人联系方式" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="招聘方联系方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="bossPhone"> | |||
<a-input v-model="model.bossPhone" placeholder="请输入招聘方联系方式" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="角色" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="role"> | |||
<j-dict-select-tag type="list" v-model="model.role" dictCode="user_role" placeholder="请选择角色" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="年龄" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="age"> | |||
<a-input-number v-model="model.age" placeholder="请输入年龄" style="width: 100%" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="性别" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="gender"> | |||
<j-dict-select-tag type="list" v-model="model.gender" dictCode="sex" placeholder="请选择性别" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="期望日薪" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="dayMoney"> | |||
<a-input-number v-model="model.dayMoney" placeholder="请输入期望日薪" style="width: 100%" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="时间范围" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="startTime"> | |||
<j-date placeholder="请选择时间范围" v-model="model.startTime" :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="endTime"> | |||
<j-date placeholder="请选择时间范围" v-model="model.endTime" :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="workTime"> | |||
<a-input v-model="model.workTime" placeholder="请输入工作时长" ></a-input> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="期望薪资最小值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="moneymin"> | |||
<a-input-number v-model="model.moneymin" placeholder="请输入期望薪资最小值" style="width: 100%" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="期望薪资最大值" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="moneymax"> | |||
<a-input-number v-model="model.moneymax" placeholder="请输入期望薪资最大值" style="width: 100%" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="审核状态" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="auditStatus"> | |||
<j-dict-select-tag type="list" v-model="model.auditStatus" dictCode="audit_status" placeholder="请选择审核状态" /> | |||
</a-form-model-item> | |||
</a-col> | |||
<a-col :span="24"> | |||
<a-form-model-item label="结算方式" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="payType"> | |||
<j-dict-select-tag type="list" v-model="model.payType" dictCode="pay_type" 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: 'TbTaskForm', | |||
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: "/tbTask/tbTask/add", | |||
edit: "/tbTask/tbTask/edit", | |||
queryById: "/tbTask/tbTask/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> |
@ -1,171 +0,0 @@ | |||
package org.jeecg.modules.tbSpecs.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.tbSpecs.entity.TbSpecs; | |||
import org.jeecg.modules.tbSpecs.service.ITbSpecsService; | |||
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: tb_specs | |||
* @Author: jeecg-boot | |||
* @Date: 2024-12-13 | |||
* @Version: V1.0 | |||
*/ | |||
@Api(tags="tb_specs") | |||
@RestController | |||
@RequestMapping("/tbSpecs/tbSpecs") | |||
@Slf4j | |||
public class TbSpecsController extends JeecgController<TbSpecs, ITbSpecsService> { | |||
@Autowired | |||
private ITbSpecsService tbSpecsService; | |||
/** | |||
* 分页列表查询 | |||
* | |||
* @param tbSpecs | |||
* @param pageNo | |||
* @param pageSize | |||
* @param req | |||
* @return | |||
*/ | |||
//@AutoLog(value = "tb_specs-分页列表查询") | |||
@ApiOperation(value="tb_specs-分页列表查询", notes="tb_specs-分页列表查询") | |||
@GetMapping(value = "/list") | |||
public Result<IPage<TbSpecs>> queryPageList(TbSpecs tbSpecs, | |||
@RequestParam(name="pageNo", defaultValue="1") Integer pageNo, | |||
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize, | |||
HttpServletRequest req) { | |||
QueryWrapper<TbSpecs> queryWrapper = QueryGenerator.initQueryWrapper(tbSpecs, req.getParameterMap()); | |||
Page<TbSpecs> page = new Page<TbSpecs>(pageNo, pageSize); | |||
IPage<TbSpecs> pageList = tbSpecsService.page(page, queryWrapper); | |||
return Result.OK(pageList); | |||
} | |||
/** | |||
* 添加 | |||
* | |||
* @param tbSpecs | |||
* @return | |||
*/ | |||
@AutoLog(value = "tb_specs-添加") | |||
@ApiOperation(value="tb_specs-添加", notes="tb_specs-添加") | |||
@PostMapping(value = "/add") | |||
public Result<String> add(@RequestBody TbSpecs tbSpecs) { | |||
tbSpecsService.save(tbSpecs); | |||
return Result.OK("添加成功!"); | |||
} | |||
/** | |||
* 编辑 | |||
* | |||
* @param tbSpecs | |||
* @return | |||
*/ | |||
@AutoLog(value = "tb_specs-编辑") | |||
@ApiOperation(value="tb_specs-编辑", notes="tb_specs-编辑") | |||
@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) | |||
public Result<String> edit(@RequestBody TbSpecs tbSpecs) { | |||
tbSpecsService.updateById(tbSpecs); | |||
return Result.OK("编辑成功!"); | |||
} | |||
/** | |||
* 通过id删除 | |||
* | |||
* @param id | |||
* @return | |||
*/ | |||
@AutoLog(value = "tb_specs-通过id删除") | |||
@ApiOperation(value="tb_specs-通过id删除", notes="tb_specs-通过id删除") | |||
@DeleteMapping(value = "/delete") | |||
public Result<String> delete(@RequestParam(name="id",required=true) String id) { | |||
tbSpecsService.removeById(id); | |||
return Result.OK("删除成功!"); | |||
} | |||
/** | |||
* 批量删除 | |||
* | |||
* @param ids | |||
* @return | |||
*/ | |||
@AutoLog(value = "tb_specs-批量删除") | |||
@ApiOperation(value="tb_specs-批量删除", notes="tb_specs-批量删除") | |||
@DeleteMapping(value = "/deleteBatch") | |||
public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { | |||
this.tbSpecsService.removeByIds(Arrays.asList(ids.split(","))); | |||
return Result.OK("批量删除成功!"); | |||
} | |||
/** | |||
* 通过id查询 | |||
* | |||
* @param id | |||
* @return | |||
*/ | |||
//@AutoLog(value = "tb_specs-通过id查询") | |||
@ApiOperation(value="tb_specs-通过id查询", notes="tb_specs-通过id查询") | |||
@GetMapping(value = "/queryById") | |||
public Result<TbSpecs> queryById(@RequestParam(name="id",required=true) String id) { | |||
TbSpecs tbSpecs = tbSpecsService.getById(id); | |||
if(tbSpecs==null) { | |||
return Result.error("未找到对应数据"); | |||
} | |||
return Result.OK(tbSpecs); | |||
} | |||
/** | |||
* 导出excel | |||
* | |||
* @param request | |||
* @param tbSpecs | |||
*/ | |||
@RequestMapping(value = "/exportXls") | |||
public ModelAndView exportXls(HttpServletRequest request, TbSpecs tbSpecs) { | |||
return super.exportXls(request, tbSpecs, TbSpecs.class, "tb_specs"); | |||
} | |||
/** | |||
* 通过excel导入数据 | |||
* | |||
* @param request | |||
* @param response | |||
* @return | |||
*/ | |||
@RequestMapping(value = "/importExcel", method = RequestMethod.POST) | |||
public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { | |||
return super.importExcel(request, response, TbSpecs.class); | |||
} | |||
} |
@ -1,69 +0,0 @@ | |||
package org.jeecg.modules.tbSpecs.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: tb_specs | |||
* @Author: jeecg-boot | |||
* @Date: 2024-12-13 | |||
* @Version: V1.0 | |||
*/ | |||
@Data | |||
@TableName("tb_specs") | |||
@Accessors(chain = true) | |||
@EqualsAndHashCode(callSuper = false) | |||
@ApiModel(value="tb_specs对象", description="tb_specs") | |||
public class TbSpecs implements Serializable { | |||
private static final long serialVersionUID = 1L; | |||
/**id*/ | |||
@TableId(type = IdType.ASSIGN_ID) | |||
@ApiModelProperty(value = "id") | |||
private java.lang.String id; | |||
/**规格名*/ | |||
@Excel(name = "规格名", width = 15) | |||
@ApiModelProperty(value = "规格名") | |||
private java.lang.String specsName; | |||
/**图片*/ | |||
@Excel(name = "图片", width = 15) | |||
@ApiModelProperty(value = "图片") | |||
private java.lang.String pic; | |||
/**创建人*/ | |||
@ApiModelProperty(value = "创建人") | |||
private java.lang.String createBy; | |||
/**创建日期*/ | |||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") | |||
@DateTimeFormat(pattern="yyyy-MM-dd") | |||
@ApiModelProperty(value = "创建日期") | |||
private java.util.Date createTime; | |||
/**更新人*/ | |||
@ApiModelProperty(value = "更新人") | |||
private java.lang.String updateBy; | |||
/**更新日期*/ | |||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") | |||
@DateTimeFormat(pattern="yyyy-MM-dd") | |||
@ApiModelProperty(value = "更新日期") | |||
private java.util.Date updateTime; | |||
/**所属部门*/ | |||
@ApiModelProperty(value = "所属部门") | |||
private java.lang.String sysOrgCode; | |||
/**删除标识0-正常,1-已删除*/ | |||
@Excel(name = "删除标识0-正常,1-已删除", width = 15) | |||
@ApiModelProperty(value = "删除标识0-正常,1-已删除") | |||
private java.lang.Integer delFlag; | |||
} |
@ -1,17 +0,0 @@ | |||
package org.jeecg.modules.tbSpecs.mapper; | |||
import java.util.List; | |||
import org.apache.ibatis.annotations.Param; | |||
import org.jeecg.modules.tbSpecs.entity.TbSpecs; | |||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||
/** | |||
* @Description: tb_specs | |||
* @Author: jeecg-boot | |||
* @Date: 2024-12-13 | |||
* @Version: V1.0 | |||
*/ | |||
public interface TbSpecsMapper extends BaseMapper<TbSpecs> { | |||
} |
@ -1,5 +0,0 @@ | |||
<?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.tbSpecs.mapper.TbSpecsMapper"> | |||
</mapper> |
@ -1,14 +0,0 @@ | |||
package org.jeecg.modules.tbSpecs.service; | |||
import org.jeecg.modules.tbSpecs.entity.TbSpecs; | |||
import com.baomidou.mybatisplus.extension.service.IService; | |||
/** | |||
* @Description: tb_specs | |||
* @Author: jeecg-boot | |||
* @Date: 2024-12-13 | |||
* @Version: V1.0 | |||
*/ | |||
public interface ITbSpecsService extends IService<TbSpecs> { | |||
} |
@ -1,19 +0,0 @@ | |||
package org.jeecg.modules.tbSpecs.service.impl; | |||
import org.jeecg.modules.tbSpecs.entity.TbSpecs; | |||
import org.jeecg.modules.tbSpecs.mapper.TbSpecsMapper; | |||
import org.jeecg.modules.tbSpecs.service.ITbSpecsService; | |||
import org.springframework.stereotype.Service; | |||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||
/** | |||
* @Description: tb_specs | |||
* @Author: jeecg-boot | |||
* @Date: 2024-12-13 | |||
* @Version: V1.0 | |||
*/ | |||
@Service | |||
public class TbSpecsServiceImpl extends ServiceImpl<TbSpecsMapper, TbSpecs> implements ITbSpecsService { | |||
} |
@ -1,171 +0,0 @@ | |||
<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('tb_specs')">导出</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> | |||
<tb-specs-modal ref="modalForm" @ok="modalFormOk"></tb-specs-modal> | |||
</a-card> | |||
</template> | |||
<script> | |||
import '@/assets/less/TableExpand.less' | |||
import { mixinDevice } from '@/utils/mixin' | |||
import { JeecgListMixin } from '@/mixins/JeecgListMixin' | |||
import TbSpecsModal from './modules/TbSpecsModal' | |||
export default { | |||
name: 'TbSpecsList', | |||
mixins:[JeecgListMixin, mixinDevice], | |||
components: { | |||
TbSpecsModal | |||
}, | |||
data () { | |||
return { | |||
description: 'tb_specs管理页面', | |||
// 表头 | |||
columns: [ | |||
{ | |||
title: '#', | |||
dataIndex: '', | |||
key:'rowIndex', | |||
width:60, | |||
align:"center", | |||
customRender:function (t,r,index) { | |||
return parseInt(index)+1; | |||
} | |||
}, | |||
{ | |||
title:'规格名', | |||
align:"center", | |||
dataIndex: 'specsName' | |||
}, | |||
{ | |||
title: '操作', | |||
dataIndex: 'action', | |||
align:"center", | |||
fixed:"right", | |||
width:147, | |||
scopedSlots: { customRender: 'action' } | |||
} | |||
], | |||
url: { | |||
list: "/tbSpecs/tbSpecs/list", | |||
delete: "/tbSpecs/tbSpecs/delete", | |||
deleteBatch: "/tbSpecs/tbSpecs/deleteBatch", | |||
exportXlsUrl: "/tbSpecs/tbSpecs/exportXls", | |||
importExcelUrl: "tbSpecs/tbSpecs/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:'specsName',text:'规格名',dictCode:''}) | |||
this.superFieldList = fieldList | |||
} | |||
} | |||
} | |||
</script> | |||
<style scoped> | |||
@import '~@assets/less/common.less'; | |||
</style> |
@ -1,104 +0,0 @@ | |||
<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="specsName"> | |||
<a-input v-model="model.specsName" placeholder="请输入规格名" ></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: 'TbSpecsForm', | |||
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: "/tbSpecs/tbSpecs/add", | |||
edit: "/tbSpecs/tbSpecs/edit", | |||
queryById: "/tbSpecs/tbSpecs/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> |