| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
59afd0f0c9 | 充值修改sql | 8 months ago |
|
|
5a68f72b87 | 后台管理系统调整 | 8 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> | |||