Commit 88b5b090 authored by Zhang Xiaojie's avatar Zhang Xiaojie

Merge branch 'dev' of gitlab.33.cn:CassiniatSaturn/fns_backend into dev

parents 838c98df 63d5edf2
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
<a-form-model-item label="手机号" prop="tel"> <a-form-model-item label="手机号" prop="tel">
<a-input <a-input
v-model="form.tel" v-model="form.tel"
:maxLength="11"
placeholder="请输入手机号" placeholder="请输入手机号"
style="width: 200px;" style="width: 200px;"
/> />
...@@ -93,7 +94,7 @@ export default Vue.extend({ ...@@ -93,7 +94,7 @@ export default Vue.extend({
{ required: true, message: '请输入名称', max: 6, trigger: 'blur' }, { required: true, message: '请输入名称', max: 6, trigger: 'blur' },
], ],
tel: [ tel: [
{ required: true, message: '请输入手机号', max: 11, trigger: 'blur' }, { required: true, message: '请输入手机号', len: 11, trigger: 'blur' },
], ],
bank: [{ required: true, message: '请输入所属银行', trigger: 'blur' }], bank: [{ required: true, message: '请输入所属银行', trigger: 'blur' }],
} }
...@@ -142,6 +143,7 @@ export default Vue.extend({ ...@@ -142,6 +143,7 @@ export default Vue.extend({
) )
if (ret && ret.code === 200) { if (ret && ret.code === 200) {
message.success('发布成功') message.success('发布成功')
this.$store.dispatch('platformUserManagement/query')
} }
} else { } else {
return false return false
......
...@@ -8,29 +8,40 @@ ...@@ -8,29 +8,40 @@
style="text-align: center;" style="text-align: center;"
bordered bordered
> >
<span slot="level">超级管理员</span> <span slot="level">银行管理员</span>
<template #created_at="text"> <template #created_at="text">
{{ text | formatDate }} {{ text | formatDate }}
</template> </template>
<template #status="text"> <template #status="text">
{{ text | filterUserStatus }} {{ text | platformfilterUserStatus }}
</template> </template>
<div slot="action" slot-scope="text, record"> <div slot="action" slot-scope="text, record">
<a <a
:class="record.status == eUserStatus.enable ? 'undeleteable' : ' '" :class="
record.status == eUserResStatus.enable_notOnPosition ||
record.status === eUserResStatus.enable_onPosition
? 'undeleteable'
: ' '
"
@click="showModal(record, 0)" @click="showModal(record, 0)"
> >
删除 删除
</a> </a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a <a
v-if="record.status == eUserStatus.disable" v-if="
record.status == eUserResStatus.disable_noPosition ||
record.status === eUserResStatus.disable_notOnPosition
"
@click="showModal(record, 1)" @click="showModal(record, 1)"
> >
启用 启用
</a> </a>
<a <a
v-else-if="eUserStatus.enable === record.status" v-else-if="
record.status === eUserResStatus.enable_notOnPosition ||
eUserResStatus.enable_onPosition
"
@click="showModal(record, 2)" @click="showModal(record, 2)"
> >
禁用 禁用
...@@ -65,7 +76,7 @@ import { modalType } from './const' ...@@ -65,7 +76,7 @@ import { modalType } from './const'
import { getPlatformUserManagementTableColumns } from '@/const/columns/superManagerColumn' import { getPlatformUserManagementTableColumns } from '@/const/columns/superManagerColumn'
import { mapActions, mapMutations, mapState } from 'vuex' import { mapActions, mapMutations, mapState } from 'vuex'
import StaffService from '@/service/StaffService' import StaffService from '@/service/StaffService'
import { eUserStatus } from '@/types/user' import { eUserReqStatus, eUserResStatus } from '@/types/user'
export default Vue.extend({ export default Vue.extend({
computed: { computed: {
...@@ -90,7 +101,8 @@ export default Vue.extend({ ...@@ -90,7 +101,8 @@ export default Vue.extend({
show: false, show: false,
content: '', content: '',
title: '', title: '',
eUserStatus, eUserReqStatus,
eUserResStatus,
} }
}, },
methods: { methods: {
...@@ -121,19 +133,24 @@ export default Vue.extend({ ...@@ -121,19 +133,24 @@ export default Vue.extend({
} }
this.show = true this.show = true
}, },
handleOk() { async handleOk() {
if (this.type == modalType.delete) { if (this.type == modalType.delete) {
await StaffService.getInstance().deleteStaff(this.uuid)
} else if (this.type == modalType.on) { } else if (this.type == modalType.on) {
StaffService.getInstance().modifyStaffStatus({ await StaffService.getInstance().modifyStaffStatus({
uuid: this.uuid, uuid: this.uuid,
status: eUserStatus.enable, status: eUserReqStatus.enable,
}) })
} else if (this.type == modalType.off) { } else if (this.type == modalType.off) {
StaffService.getInstance().modifyStaffStatus({ await StaffService.getInstance().modifyStaffStatus({
uuid: this.uuid, uuid: this.uuid,
status: eUserStatus.disable, status: eUserReqStatus.disable,
}) })
} }
this.$store.commit('/platformUserManagement/save', {
page: 1,
})
this.$store.dispatch('/platformUserManagement/query')
this.show = false this.show = false
}, },
}, },
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
class="my-1" class="my-1"
:is="type == 1 ? 'addNormalManagerModal' : 'addSuperManagerModal'" :is="type == 1 ? 'addNormalManagerModal' : 'addSuperManagerModal'"
ref="addrModal" ref="addrModal"
:userType="type"
:level="level" :level="level"
/> />
</div> </div>
......
import { column } from "@/types/column" import { column } from '@/types/column'
const columns:Array<column>= const columns: Array<column> = [
[
{ {
title: '发布时间', title: '发布时间',
align:'center', align: 'center',
dataIndex: 'time', dataIndex: 'created_at',
scopedSlots: { customRender: 'created_at' },
}, },
{ {
title: 'banner名称', title: 'banner名称',
align:'center', align: 'center',
dataIndex: 'name', dataIndex: 'title',
}, },
{ {
title: 'banner位置', title: 'banner位置',
align:'center', align: 'center',
dataIndex: 'location', dataIndex: 'location',
scopedSlots: { customRender: 'location' },
}, },
{ {
title: '图片', title: '图片',
align:'center', align: 'center',
dataIndex: 'path', dataIndex: 'file_name',
scopedSlots: { customRender: 'path' }, scopedSlots: { customRender: 'file_name' },
}, },
{ {
title: '状态', title: '状态',
align:'center', align: 'center',
dataIndex: 'state', dataIndex: 'banner_status',
scopedSlots: { customRender: 'banner_status' },
}, },
{ {
title: '操作', title: '操作',
align:'center', align: 'center',
key: 'action', key: 'action',
scopedSlots: { customRender: 'action' }, scopedSlots: { customRender: 'action' },
} },
] ]
export { export { columns }
columns
}
\ No newline at end of file
export const ACCEPT_IMAGE_TYPE = '.jpg,.jpep,.png'
export function isAcceptImageType(file: File) {
const isCorrectType = file.name.match(/(\.jpg|\.jpep|\.png)$/)
return !!isCorrectType
}
export const TOAST_TEXT = '请上传jpg或jpep或png文件'
// 最大上传大小 40M
export const MAX_IMAGE_SIZE = 1024 * 1024 * 40
export const TOAST_TEXT2 = '请上传小于40M的图片'
import { eUserStatus } from '@/types/user' import { eBannerLocation, eBannerStatus } from '@/types/banner'
import { eUserResStatus } from '@/types/user'
import moment from 'moment' import moment from 'moment'
export default { export default {
...@@ -10,16 +11,44 @@ export default { ...@@ -10,16 +11,44 @@ export default {
return '' return ''
} }
}, },
filterUserStatus(status: eUserStatus) { filterUserStatus(status: eUserResStatus) {
switch (status) { switch (status) {
case eUserStatus.disable: case eUserResStatus.disable_noPosition:
return '禁用' return '禁用'
case eUserStatus.enable: case eUserResStatus.disable_notOnPosition:
return '禁用'
case eUserResStatus.enable_notOnPosition:
return '启用/不在岗'
case eUserResStatus.enable_onPosition:
return '启用/在岗'
}
},
platformfilterUserStatus(status: eUserResStatus) {
switch (status) {
case eUserResStatus.disable_noPosition:
return '禁用'
case eUserResStatus.disable_notOnPosition:
return '禁用'
case eUserResStatus.enable_notOnPosition:
return '启用'
case eUserResStatus.enable_onPosition:
return '启用' return '启用'
case eUserStatus.onPosition: }
return '在岗' },
case eUserStatus.notOnPosition: filterBannerLocation(status: eBannerLocation) {
return '不在岗' switch (status) {
case eBannerLocation.home:
return '首页'
}
},
filtereBannerStatus(status: eBannerStatus) {
switch (status) {
case eBannerStatus.editable:
return '未发布'
case eBannerStatus.delete:
return '删除'
case eBannerStatus.published:
return '已发布'
} }
}, },
} as { } as {
......
import baseAxios from '../index' import baseAxios from '../index'
import { banner_status } from '@/views/Root/Banner/const' import { banner_status } from '@/views/Root/Banner/const'
import { iBannerItem } from './types'
import { eBannerStatus } from '@/types/banner'
const prefix = '/banner/admin' const prefix = '/banner/admin'
// 新增banner信息 // 新增banner信息
...@@ -17,12 +19,18 @@ export function bannerAdd(data: { ...@@ -17,12 +19,18 @@ export function bannerAdd(data: {
// 查询banner列表 // 查询banner列表
export function bannerQuery(data: { export function bannerQuery(data: {
banner_status: 0 banner_status: eBannerStatus
location:0 location: number
end_time: number end_time?: number
start_time: number start_time?: number
limit?: number
offset?: number
}) { }) {
return baseAxios({ return baseAxios<{
count: number
items: iBannerItem[]
total: number
}>({
url: prefix + '/list', url: prefix + '/list',
method: 'POST', method: 'POST',
data, data,
...@@ -31,12 +39,12 @@ export function bannerQuery(data: { ...@@ -31,12 +39,12 @@ export function bannerQuery(data: {
// 修改banner状态 // 修改banner状态
export function bannerModify(data: { export function bannerModify(data: {
banner_status: banner_status banner_status: eBannerStatus
uuid:string uuid: string
}) { }) {
return baseAxios({ return baseAxios({
url: prefix + '/modify', url: prefix + '/modify',
method: 'POST', method: 'POST',
data, data,
}) })
} }
\ No newline at end of file
export interface iBannerItem {
banner_status: number
created_at: number
file_name: string
location: number
title: string
update_at: number
uuid: string
}
import baseAxios from '../index'
export default class FileService {
static instance: FileService
static getInstance() {
if (!FileService.instance) {
FileService.instance = new FileService()
}
return FileService.instance
}
download(file_hash: string) {
return (baseAxios({
method: 'get',
url: '/image/download',
params: {
file_hash,
},
}) as unknown) as Promise<File>
}
getImageSrc(file_hash: string) {
return `/proxyApi/api/v1/image/show?file_hash=${file_hash}`
}
showImage(file_hash: string) {
return (baseAxios({
method: 'get',
url: '/image/show',
params: {
file_hash,
},
}) as unknown) as Promise<File>
}
uploadImage(uploadFile: File) {
const fd = new FormData()
fd.append('uploadFile', uploadFile)
return baseAxios<string>({
method: 'post',
url: '/image/upload',
data: fd,
})
}
}
import { eUserStatus } from '@/types/user' import { eUserReqStatus } from '@/types/user'
import baseAxios from '../index' import baseAxios from '../index'
export default class StaffService { export default class StaffService {
...@@ -10,11 +10,18 @@ export default class StaffService { ...@@ -10,11 +10,18 @@ export default class StaffService {
return StaffService.instance return StaffService.instance
} }
modifyStaffStatus(data: { status: eUserStatus; uuid: string }) { modifyStaffStatus(data: { status: eUserReqStatus; uuid: string }) {
return baseAxios({ return baseAxios({
url: '/staff/modifyStatus', url: '/staff/modifyStatus',
method: 'PUT', method: 'PUT',
data, data,
}) })
} }
deleteStaff(uuid: string) {
return baseAxios({
url: '/staff/' + uuid,
method: 'delete',
})
}
} }
import { eLevel } from '@/types/level' import { eLevel } from '@/types/level'
import { eNewRoleRelatedToBackEnd } from '@/types/role' import { eNewRoleRelatedToBackEnd } from '@/types/role'
import { eUserStatus } from '@/types/user' import { eUserReqStatus } from '@/types/user'
import { eUserType } from '@/types/userType' import { eUserType } from '@/types/userType'
import baseAxios from '../index' import baseAxios from '../index'
...@@ -142,7 +142,7 @@ export default class UserService { ...@@ -142,7 +142,7 @@ export default class UserService {
role: string role: string
second_branch: string second_branch: string
second_sub_branch: string second_sub_branch: string
status: eUserStatus status: eUserReqStatus
user_name: string user_name: string
uuid: string uuid: string
}[] }[]
......
...@@ -14,8 +14,8 @@ const baseAxios = axios.create({ ...@@ -14,8 +14,8 @@ const baseAxios = axios.create({
baseAxios.interceptors.response.use( baseAxios.interceptors.response.use(
(value: AxiosResponse<iRet>) => { (value: AxiosResponse<iRet>) => {
const ret = value.data const ret = value.data
if (ret.code !== 200) { if (ret.code !== undefined && ret.code !== 200) {
if(ret.code === 504){ if (ret.code === 504) {
// deleteUserMsg(); // deleteUserMsg();
} }
message.error(ret.msg) message.error(ret.msg)
......
export interface banner{ export interface banner {
key:string key: string
time:string, time: string
name:string, name: string
location:string, location: string
path:string, path: string
state:string state: string
} }
\ No newline at end of file
export enum eBannerLocation {
all = 0,
home = 1,
}
// 0:全部状态,1:可编辑,2:已发布,3:删除
export enum eBannerStatus {
all = 0,
editable = 1,
published = 2,
delete = 3,
}
export enum eRole { export enum eRole {
platform_management, // 平台管理员 platform_management, // 平台管理员
superManager, // 超级管理员 也 叫 银行管理员 superManager, // 超级管理员 也叫 银行管理员
firstLevel_branch, // 一级分行管理员 firstLevel_branch, // 一级分行管理员
secondary_branch, // 二级分行管理员 secondary_branch, // 二级分行管理员
......
...@@ -7,9 +7,16 @@ export interface user { ...@@ -7,9 +7,16 @@ export interface user {
note?: string note?: string
} }
export enum eUserStatus { export enum eUserReqStatus {
disable = 0, disable = 1,
enable = 1, enable = 2,
onPosition = 2, onPosition = 3,
notOnPosition = 4, notOnPosition = 4,
} }
export enum eUserResStatus {
disable_notOnPosition = 0,
disable_noPosition = 1,
enable_notOnPosition = 2,
enable_onPosition = 3,
}
...@@ -235,8 +235,6 @@ export default Vue.extend({ ...@@ -235,8 +235,6 @@ export default Vue.extend({
this.$router.push({ this.$router.push({
name: "home", name: "home",
}); });
} else {
message.warn(ret.msg);
} }
}, },
async handleClickLogin() { async handleClickLogin() {
...@@ -256,15 +254,6 @@ export default Vue.extend({ ...@@ -256,15 +254,6 @@ export default Vue.extend({
console.log(err); console.log(err);
} }
this.loading = false; this.loading = false;
// setUserMsg({
// userInfo: 'lakds',
// token: 'aldksfj',
// role: eRole.superManager,
// })
// this.$router.push({
// name: 'home'
// })
} else { } else {
return false; return false;
} }
......
<template> <template>
<div> <div>
<p class=" text-2xl font-bold mb-5">Banner管理</p> <p class="text-2xl font-bold mb-5">Banner管理</p>
<!-- timepicker --> <!-- timepicker -->
<span class=" font-semibold">发布时间:</span> <span class="font-semibold">发布时间:</span>
<timerange class=" mr-3" <timerange
@getNewTime="getNewTime"/> class="mr-3"
<a-button type="primary" style=" margin-right:10px;" @click="query">查询</a-button> @getNewTime="getNewTime"
:startTime="queryParam.startTime"
:endTime="queryParam.endTime"
/>
<a-button type="primary" style="margin-right: 10px;" @click="fetchList">
查询
</a-button>
<!-- 新增 --> <!-- 新增 -->
<a-button type="primary" @click="showModal">新增</a-button> <a-button type="primary" @click="showModal">新增</a-button>
<!-- 上传弹窗 --> <!-- 上传弹窗 -->
<a-modal <a-modal
:afterClose="afterAddNewBannerModalClose"
title="新增" title="新增"
v-model="visible" v-model="visible"
:centered="true" :centered="true"
footer="" footer=""
:closable="false" :closable="false"
> >
<a-form-model :model="form" <a-form-model
:label-col=" { span: 5 }" :model="form"
:wrapper-col=" { span: 10 }" :label-col="{ span: 5 }"
ref="ruleForm" :wrapper-col="{ span: 10 }"
:rules="rules"> ref="ruleForm"
:rules="rules"
>
<a-form-model-item label="Banner名称" prop="name"> <a-form-model-item label="Banner名称" prop="name">
<a-input style="width:200px" v-model="form.name" placeholder="请输入名称"/> <a-input
style="width: 200px;"
v-model="form.name"
placeholder="请输入名称"
/>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="Banner位置"> <a-form-model-item label="Banner位置">
<span class=" text-sm text-black">首页</span> <span class="text-sm text-black">首页</span>
</a-form-model-item> </a-form-model-item>
<a-form-model-item label="上传图片" :required="true" prop="file"> <a-form-model-item label="上传图片" :required="true" prop="fileList">
<a-upload <a-upload
name="file" :beforeUpload="beforeUpload"
action="#" name="uploadFile"
accept="image/*" action="/proxyApi/api/v1/image/upload"
:accept="ACCEPT_IMAGE_TYPE"
:file-list="form.fileList"
@change="handleChange" @change="handleChange"
required required
> >
<a-button style="width:200px"> <a-icon type="upload" /> 点击上传 </a-button> <a-button style="width: 200px;" :disabled="alreadlyHasOneImage">
<a-icon type="upload" />
点击上传
</a-button>
</a-upload> </a-upload>
</a-form-model-item> </a-form-model-item>
<a-form-model-item :wrapper-col="{ span: 9, offset: 5 }"> <a-form-model-item :wrapper-col="{ span: 9, offset: 5 }">
<a-button type="primary" @click="onSubmit">发布</a-button> <a-button type="primary" @click="onSubmit">发布</a-button>
<a-button style="margin-left: 10px;" @click="visible=false">取消</a-button> <a-button style="margin-left: 10px;" @click="visible = false">
取消
</a-button>
</a-form-model-item> </a-form-model-item>
</a-form-model> </a-form-model>
</a-modal> </a-modal>
<!-- banner列表 --> <!-- banner列表 -->
<a-table :columns="columns" <a-table
:data-source="list" :columns="columns"
style=" text-align: center; margin-top:40px;" :data-source="bannerList"
bordered> :loading="tableLoading"
<span slot="path" slot-scope="text,record"> :pagination="false"
<a-icon type="picture" @click="preview(record.path)" theme="twoTone" style="fontSize:20px"/> style="text-align: center; margin-top: 40px;"
bordered
>
<template #created_at="text">
{{ text | formatDate }}
</template>
<template #banner_status="text">
{{ text | filtereBannerStatus }}
</template>
<template #location="text">
{{ text | filterBannerLocation }}
</template>
<span slot="file_name" slot-scope="text, record">
<a-icon
type="picture"
@click="preview(record.file_name)"
theme="twoTone"
style="fontsize: 20px;"
/>
<el-image-viewer <el-image-viewer
v-if="showViewer" v-if="showViewer"
fit="scale-down" fit="scale-down"
:on-close="closeViewer" :on-close="closeViewer"
:url-list="[url]" /> :url-list="[url]"
/>
</span> </span>
<span slot="action" slot-scope="text,record"> <span slot="action" slot-scope="text, record">
<span v-if="record.state=='下架'"> <span v-if="record.banner_status == eBannerStatus.editable">
<a @click="addBanner">上架</a> <a @click="addBanner(record)">上架</a>
<a-divider type="vertical" /> <a-divider type="vertical" />
<a @click="deleteBanner">删除</a> <a @click="deleteBanner(record)">删除</a>
</span> </span>
<a v-else <a
@click="removeBanner">下架</a> v-else-if="(record.banner_status == eBannerStatus.published)"
@click="removeBanner(record)"
>
下架
</a>
</span> </span>
</a-table> </a-table>
<a-pagination
class="text-right mt-4"
:current="current"
:total="total"
@change="handlePaginationChange"
></a-pagination>
<!-- 操作Modal --> <!-- 操作Modal -->
<a-modal <a-modal
:title="title" :title="title"
v-model="show" v-model="show"
:centered="true" :centered="true"
:closable="false" :closable="false"
:confirmLoading="modalLoading"
@ok="handleOk" @ok="handleOk"
@cancle="show = false" @cancle="show = false"
> >
<p class=" text-center">{{text}}</p> <p class="text-center">{{ text }}</p>
</a-modal> </a-modal>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts">
import Vue from "vue" import Vue from 'vue'
import { FormModel } from 'ant-design-vue' import { FormModel, message } from 'ant-design-vue'
import timerange from '@/components/TimePicker/index.vue' import timerange from '@/components/TimePicker/index.vue'
import { bannerList } from '@/mock/index' import { bannerList } from '@/mock/index'
import { columns } from '@/const/columns/bannerColumns' import { columns } from '@/const/columns/bannerColumns'
import { modalType } from './const' import { modalType } from './const'
import { bannerQuery } from '@/service/BannerManagementService/index' import {
bannerQuery,
bannerModify,
} from '@/service/BannerManagementService/index'
import {
ACCEPT_IMAGE_TYPE,
isAcceptImageType,
TOAST_TEXT,
TOAST_TEXT2,
MAX_IMAGE_SIZE,
} from '@/const/config/upload'
import { bannerAdd } from '@/service/BannerManagementService/index'
import { PAGE_SIZE } from '@/const/config/page'
import { iBannerItem } from '@/service/BannerManagementService/types'
import { eBannerStatus } from '@/types/banner'
import FileService from '@/service/FileService/index'
export default Vue.extend({ export default Vue.extend({
components:{ components: {
'el-image-viewer':()=>import('element-ui/packages/image/src/image-viewer.vue'), 'el-image-viewer': () =>
timerange import('element-ui/packages/image/src/image-viewer.vue'),
timerange,
}, },
computed:{ computed: {
columns(){ columns() {
return columns return columns
} },
current(): number {
return this.queryParam.offset / this.queryParam.limit + 1
},
alreadlyHasOneImage(): boolean {
return this.form.fileList.length == 1
},
},
mounted() {
this.fetchList()
}, },
data() { data() {
let list = bannerList let list = bannerList
return{ return {
uuid: '',
eBannerStatus,
ACCEPT_IMAGE_TYPE,
visible: false, visible: false,
show:false, show: false,
title:'', modalLoading: false,
text:'', title: '',
modalType:modalType.on, text: '',
queryParam:{ modalType: modalType.on,
startTime:0, queryParam: {
endTime:0 startTime: undefined as undefined | number,
endTime: undefined as undefined | number,
limit: PAGE_SIZE,
offset: 0,
location: 0,
}, },
tableLoading: false,
bannerList: [] as iBannerItem[],
total: 0,
form: { form: {
name: '', name: '',
file_hash: '',
fileList: [],
}, },
rules:{ rules: {
name: [{ required: true, message: '请输入名称', trigger: 'blur' }], name: [{ required: true, message: '请输入名称', trigger: 'blur' }],
file: [{ required: true, message: '请上传文件', trigger: 'change' }], fileList: [
{ required: true, message: '请上传文件', trigger: 'change' },
],
}, },
showViewer:false, showViewer: false,
url:'', url: '',
list, list,
img:require('../../../assets/pic.png'), img: require('../../../assets/pic.png'),
} }
}, },
methods:{ methods: {
getNewTime(startTime:number,endTime:number){ handlePaginationChange(current: number) {
this.queryParam.offset = (current - 1) * this.queryParam.limit
this.fetchList()
},
async fetchList() {
this.tableLoading = true
const ret = await bannerQuery({
end_time: this.queryParam.endTime,
start_time: this.queryParam.startTime,
limit: this.queryParam.limit,
offset: this.queryParam.offset,
location: this.queryParam.location,
banner_status: 0,
})
if (ret.code === 200) {
this.bannerList = ret.data.items
this.total = ret.data.total
this.tableLoading = false
}
},
afterAddNewBannerModalClose() {
const ref = this.$refs.ruleForm as FormModel
ref.resetFields()
},
getNewTime(startTime: number, endTime: number) {
this.queryParam.startTime = startTime this.queryParam.startTime = startTime
this.queryParam.endTime = endTime this.queryParam.endTime = endTime
}, },
async query(){ addBanner(record: any) {
const ret = await bannerQuery( this.uuid = record.uuid
{
banner_status:0,
location:0,
start_time:this.queryParam.startTime,
end_time:this.queryParam.endTime
}
)
console.log(ret)
},
addBanner(record:any){
this.modalType = modalType.on this.modalType = modalType.on
this.show = true this.show = true
this.title = '上架Banner' this.title = '上架Banner'
this.text = '确定上架该Banner吗?' this.text = '确定上架该Banner吗?'
}, },
removeBanner(record:any){ removeBanner(record: any) {
this.uuid = record.uuid
this.modalType = modalType.off this.modalType = modalType.off
this.show = true this.show = true
this.title = '下架Banner' this.title = '下架Banner'
this.text = '确定下架该Banner吗?' this.text = '确定下架该Banner吗?'
}, },
deleteBanner(record:any){ deleteBanner(record: any) {
this.uuid = record.uuid
this.modalType = modalType.delete this.modalType = modalType.delete
this.show = true this.show = true
this.title = '删除Banner' this.title = '删除Banner'
this.text = '确定删除该Banner吗?' this.text = '确定删除该Banner吗?'
}, },
handleOk(record:any){ async handleOk(record: any) {
if( this.modalType == modalType.on){ this.modalLoading = true
try {
} else if( this.modalType == modalType.off){ if (this.modalType == modalType.on) {
await bannerModify({
} else if( this.modalType == modalType.delete){ banner_status: eBannerStatus.published,
uuid: this.uuid,
})
} else if (this.modalType == modalType.off) {
await bannerModify({
banner_status: eBannerStatus.editable,
uuid: this.uuid,
})
} else if (this.modalType == modalType.delete) {
await bannerModify({
banner_status: eBannerStatus.delete,
uuid: this.uuid,
})
}
this.show = false
this.fetchList()
} catch (err) {}
this.modalLoading = false
},
beforeUpload(file: File) {
const isAccpet = isAcceptImageType(file)
if (!isAccpet) {
message.error(TOAST_TEXT)
} }
const isLt4M = file.size < MAX_IMAGE_SIZE
if (!isLt4M) {
message.error(TOAST_TEXT2)
}
console.log(isAccpet && isLt4M)
this.show = false return isAccpet && isLt4M
}, },
handleChange(info:any) { handleChange(info: any) {
console.log(info, 'show info')
const fileList = (info.fileList || []).filter((item: any) => {
return item.status !== undefined
})
this.form.fileList = fileList
if (info.file.status !== 'uploading') { if (info.file.status !== 'uploading') {
console.log(info.file, info.fileList);
} }
if (info.file.status === 'done') { if (info.file.status === 'done') {
console.log(`${info.file.name} file uploaded successfully`); if (info.file.response.code === 200) {
this.form.file_hash = info.file.response.data
}
} else if (info.file.status === 'error') { } else if (info.file.status === 'error') {
console.log(`${info.file.name} file upload failed.`);
} }
}, },
showModal() { showModal() {
this.visible = true; this.visible = true
}, },
preview(src:string){ preview(file_name: string) {
this.showViewer = true this.showViewer = true
const src = FileService.getInstance().getImageSrc(file_name)
this.url = src this.url = src
}, },
closeViewer(){ closeViewer() {
this.showViewer = false this.showViewer = false
}, },
handleCancel(e:Event) { handleCancel(e: Event) {
this.visible = false; this.visible = false
}, },
onSubmit() { onSubmit() {
(this.$refs.ruleForm as FormModel).validate(valid => { ;(this.$refs.ruleForm as FormModel).validate((valid) => {
if (valid) { if (valid) {
this.visible = false this.visible = false
bannerAdd({
file_name: this.form.file_hash,
location: 1,
title: this.form.name,
}).then((ret) => {
if (ret.code === 200) {
this.fetchList()
message.success('发布成功')
}
})
} else { } else {
console.log('error submit!!'); console.log('error submit!!')
return false; return false
} }
}) })
}, },
} },
}); })
</script> </script>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div> <div>
<a-layout id="components-layout-demo-fixed-sider"> <a-layout id="components-layout-demo-fixed-sider">
<a-layout-sider width="256" style="background: white"> <a-layout-sider width="256" style="background: white">
<div class="text-center text-lg my-3">合同后台</div> <div class="text-center text-lg my-3">普惠金融后台</div>
<a-menu <a-menu
style="width: 256px" style="width: 256px"
:open-keys.sync="openKeys" :open-keys.sync="openKeys"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment