This commit is contained in:
yangduo 2024-08-14 11:33:32 +08:00
parent ec294b5713
commit 5ab32ba017
3 changed files with 175 additions and 39 deletions

View File

@ -51,6 +51,55 @@ export function parseTime(time, cFormat) {
return time_str return time_str
} }
/**
* Parse the time to string
* @param {(Object|string|number)} time
* @param {string} cFormat
* @returns {string | null}
*/
export function parseUTCTime(time, cFormat) {
if (arguments.length === 0 || !time) {
return null
}
const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string')) {
if ((/^[0-9]+$/.test(time))) {
// support "1548221490638"
time = parseInt(time)
} else {
// support safari
// https://stackoverflow.com/questions/4310953/invalid-date-in-safari
time = time.replace(new RegExp(/-/gm), '/')
}
}
if ((typeof time === 'number')) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getUTCFullYear(),
m: date.getUTCMonth() + 1,
d: date.getUTCDate(),
h: date.getUTCHours(),
i: date.getUTCMinutes(),
s: date.getUTCSeconds(),
a: date.getUTCDay()
}
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
const value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
return value.toString().padStart(2, '0')
})
return time_str
}
/** /**
* @param {number} time * @param {number} time
* @param {string} option * @param {string} option

View File

@ -1,10 +1,10 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<div class="filter-container"> <!--div class="filter-container">
<el-button v-show="visibleAddannouncement" class="filter-item" style="margin-left: 10px;" type="primary" @click="handleCreate"> <el-button v-show="visibleAddannouncement" class="filter-item" style="margin-left: 10px;" type="primary" @click="handleCreate">
新增公告 新增公告
</el-button> </el-button>
</div> </div-->
<el-table <el-table
:data="anncList" :data="anncList"
border border
@ -18,34 +18,46 @@
<!-- label="日期"--> <!-- label="日期"-->
<!-- >--> <!-- >-->
<!-- </el-table-column>--> <!-- </el-table-column>-->
<el-table-column
prop="annc_type"
label="公告类型"
width="150"
align="center"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.annc_type === 1" effect="plain" type="">最低版本支持公告</el-tag>
<el-tag v-if="scope.row.annc_type === 2" effect="plain" type="">白名单版本公告</el-tag>
<el-tag v-if="scope.row.annc_type === 3" effect="plain" type="">当前版本公告</el-tag>
</template>
</el-table-column>
<el-table-column <el-table-column
prop="title" prop="title"
label="标题" label="标题"
width="180" width="100"
/> />
<el-table-column <el-table-column
prop="version" prop="version"
label="版本" label="版本"
width="100" width="60"
/> />
<el-table-column <el-table-column
label="型号" label="平台"
width="80" width="80"
align="center" align="center"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<svg-icon v-if="scope.row.model === 1" style="font-size: 20px;color: #4A9FF9" icon-class="Android" /> <svg-icon v-if="scope.row.platform === 1" style="font-size: 20px;color: #4A9FF9" icon-class="Android" />
<svg-icon v-if="scope.row.model === 2" style="font-size: 20px;color: #333333" icon-class="IOS" /> <svg-icon v-if="scope.row.platform === 2" style="font-size: 20px;color: #333333" icon-class="IOS" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="类型" label="类型"
width="80" width="120"
align="center" align="center"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<el-tag v-if="scope.row.type === 1" effect="plain" type="warning">停服</el-tag> <el-tag v-if="scope.row.click_type === 0" effect="plain" type="warning">不能进游戏</el-tag>
<el-tag v-if="scope.row.type === 2" effect="plain" type="">普通</el-tag> <el-tag v-if="scope.row.click_type === 1" effect="plain" type="">可以进游戏</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
@ -54,10 +66,15 @@
align="center" align="center"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<svg-icon v-if="scope.row.is_effect === 1" icon-class="ok" style="font-size: 20px;" /> <svg-icon v-if="scope.row.enable === 1" icon-class="ok" style="font-size: 20px;" />
<svg-icon v-else icon-class="no" style="font-size: 20px;" /> <svg-icon v-else icon-class="no" style="font-size: 20px;" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
prop="desc"
label="描述"
width="195"
/>
<el-table-column <el-table-column
label="公告内容" label="公告内容"
prop="content" prop="content"
@ -82,21 +99,21 @@
<el-form-item label="Version" prop="version"> <el-form-item label="Version" prop="version">
<el-input v-model="form.version" /> <el-input v-model="form.version" />
</el-form-item> </el-form-item>
<el-form-item label="型号" prop="model"> <el-form-item label="型号" prop="platform">
<el-radio-group v-model="form.model"> <el-radio-group v-model="form.platform">
<el-radio :label="1">Android</el-radio> <el-radio :label="1">Android</el-radio>
<el-radio :label="2">IOS</el-radio> <el-radio :label="2">IOS</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="公告类型" prop="type"> <el-form-item label="类型" prop="click_type">
<el-radio-group v-model="form.type"> <el-radio-group v-model="form.click_type">
<el-radio :label="1">停服公告</el-radio> <el-radio :label="0">不能进游戏</el-radio>
<el-radio :label="2">普通公告</el-radio> <el-radio :label="1">可以进游戏</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="是否生效"> <el-form-item label="是否生效">
<el-switch <el-switch
v-model="form.is_effect" v-model="form.enable"
:active-value="1" :active-value="1"
:inactive-value="0" :inactive-value="0"
active-color="#13ce66" active-color="#13ce66"
@ -143,12 +160,13 @@ export default {
data() { data() {
return { return {
form: { form: {
annc_type: '',
title: '', title: '',
type: '', click_type: '',
content: '', content: '',
version: '', version: '',
model: '', platform: '',
is_effect: 1 enable: 1
}, },
dialogFormVisible: false, dialogFormVisible: false,
dialogStatus: '', dialogStatus: '',
@ -160,8 +178,8 @@ export default {
rules: { rules: {
title: [{ required: true, message: 'title is required', trigger: 'blur' }], title: [{ required: true, message: 'title is required', trigger: 'blur' }],
version: [{ required: true, message: 'version is required', trigger: 'blur' }], version: [{ required: true, message: 'version is required', trigger: 'blur' }],
model: [{ required: true, message: '请选择型号', trigger: 'blur' }], platform: [{ required: true, message: '请选择型号', trigger: 'blur' }],
type: [{ required: true, message: '请选择公告类型', trigger: 'blur' }], click_type: [{ required: true, message: '是否可进游戏', trigger: 'blur' }],
content: [{ required: true, message: '请输入公告内容', trigger: 'blur' }] content: [{ required: true, message: '请输入公告内容', trigger: 'blur' }]
} }
} }
@ -183,12 +201,13 @@ export default {
methods: { methods: {
handleUpdate(row) { handleUpdate(row) {
console.log(row) console.log(row)
this.form.annc_type = row.annc_type
this.form.title = row.title this.form.title = row.title
this.form.version = row.version this.form.version = row.version
this.form.model = row.model this.form.platform = row.platform
this.form.type = row.type this.form.click_type = row.click_type
this.form.content = row.content this.form.content = row.content
this.form.is_effect = row.is_effect this.form.enable = row.enable
this.form.idx = row.idx this.form.idx = row.idx
this.dialogStatus = 'update' this.dialogStatus = 'update'
@ -216,12 +235,13 @@ export default {
}, },
resetTemp() { resetTemp() {
this.form = { this.form = {
annc_type: '',
title: '', title: '',
type: '', click_type: '',
content: '', content: '',
version: '', version: '',
model: '', platform: '',
is_effect: 1 enable: 1
} }
}, },
createData() { createData() {

View File

@ -20,22 +20,44 @@
<el-table-column <el-table-column
prop="begin_time" prop="begin_time"
label="发送时间" label="发送时间"
width="160" width="80"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ parseTime(scope.row.begin_time) }} {{ parseUTCTime(scope.row.begin_time, '{h}:{i}:{s}') }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="end_time" prop="end_time"
label="停止时间" label="停止时间"
width="160" width="80"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span> <span>
{{ parseTime(scope.row.end_time) }} {{ parseUTCTime(scope.row.end_time, '{h}:{i}:{s}') }}
</span>
</template>
</el-table-column>
<el-table-column
prop="begin_date"
label="开始日期"
width="95"
>
<template slot-scope="scope">
<span>
{{ parseUTCTime(scope.row.begin_date, '{y}-{m}-{d}') }}
</span>
</template>
</el-table-column>
<el-table-column
prop="end_date"
label="结束日期"
width="95"
>
<template slot-scope="scope">
<span>
{{ parseUTCTime(scope.row.end_date, '{y}-{m}-{d}') }}
</span> </span>
</template> </template>
</el-table-column> </el-table-column>
@ -70,10 +92,16 @@
<el-input v-model="form.title" /> <el-input v-model="form.title" />
</el-form-item> </el-form-item>
<el-form-item label-width="120px" label="发送时间>=:" prop="begin_time"> <el-form-item label-width="120px" label="发送时间>=:" prop="begin_time">
<el-date-picker v-model.number="form.begin_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required /> <el-date-picker v-model.number="form.begin_time" type="datetime" :format="formattedUTCBeginTime" value-format="timestamp" placeholder="Select time" required />
</el-form-item> </el-form-item>
<el-form-item label-width="120px" label="发送时间<=:" class="postInfo-container-item" prop="end_time"> <el-form-item label-width="120px" label="发送时间<=:" prop="end_time">
<el-date-picker v-model.number="form.end_time" type="datetime" format="yyyy-MM-dd HH:mm:ss" value-format="timestamp" placeholder="Select date and time" required /> <el-date-picker v-model.number="form.end_time" type="datetime" :format="formattedUTCEndTime" value-format="timestamp" placeholder="Select time" required />
</el-form-item>
<el-form-item label-width="120px" label="开始日期>=:" prop="begin_date">
<el-date-picker v-model.number="form.begin_date" type="datetime" :format="formattedUTCBeginDate" value-format="timestamp" placeholder="Select date" required />
</el-form-item>
<el-form-item label-width="120px" label="结束日期<=:" prop="end_date">
<el-date-picker v-model.number="form.end_date" type="datetime" :format="formattedUTCEndDate" value-format="timestamp" placeholder="Select date" required />
</el-form-item> </el-form-item>
<el-form-item label="是否生效"> <el-form-item label="是否生效">
<el-switch <el-switch
@ -106,7 +134,7 @@
import { addIngameAnnc, getIngameAnncList, updateIngameAnnc } from '@/api/announcement' import { addIngameAnnc, getIngameAnncList, updateIngameAnnc } from '@/api/announcement'
import { Message } from 'element-ui' import { Message } from 'element-ui'
import { checkuipermission } from '@/store/modules/permission' import { checkuipermission } from '@/store/modules/permission'
import { parseTime } from '@/utils' import { parseUTCTime } from '@/utils'
export default { export default {
components: { components: {
@ -119,6 +147,8 @@ export default {
title: '', title: '',
begin_time: '', begin_time: '',
end_time: '', end_time: '',
begin_date: '',
end_date: '',
content: '', content: '',
is_open: 1 is_open: 1
}, },
@ -133,11 +163,43 @@ export default {
title: [{ required: true, message: 'required', trigger: 'blur' }], title: [{ required: true, message: 'required', trigger: 'blur' }],
begin_time: [{ required: true, message: 'required', trigger: 'blur' }], begin_time: [{ required: true, message: 'required', trigger: 'blur' }],
end_time: [{ required: true, message: 'required', trigger: 'blur' }], end_time: [{ required: true, message: 'required', trigger: 'blur' }],
begin_date: [{ required: true, message: 'required', trigger: 'blur' }],
end_date: [{ required: true, message: 'required', trigger: 'blur' }],
content: [{ required: true, message: 'required', trigger: 'blur' }] content: [{ required: true, message: 'required', trigger: 'blur' }]
}, },
data: '' data: ''
} }
}, },
computed: {
formattedUTCBeginDate() {
if (!this.form.begin_date) {
return ''
}
return 'UTC: ' + parseUTCTime(this.form.begin_date / 1000, '{y}-{m}-{d}')
},
formattedUTCEndDate() {
if (!this.form.end_date) {
return ''
}
return 'UTC: ' + parseUTCTime(this.form.end_date / 1000, '{y}-{m}-{d}')
},
formattedUTCBeginTime() {
if (!this.form.begin_time) {
return ''
}
return 'UTC: ' + parseUTCTime(this.form.begin_time / 1000, '{h}:{i}:{s}')
},
formattedUTCEndTime() {
if (!this.form.end_time) {
return ''
}
return 'UTC: ' + parseUTCTime(this.form.end_time / 1000, '{h}:{i}:{s}')
}
},
created() { created() {
this.getList() this.getList()
if (checkuipermission('addannouncement')) { if (checkuipermission('addannouncement')) {
@ -153,12 +215,13 @@ export default {
} }
}, },
methods: { methods: {
parseTime, parseUTCTime,
handleUpdate(row) { handleUpdate(row) {
console.log(row)
this.form.title = row.title this.form.title = row.title
this.form.begin_time = row.begin_time * 1000 this.form.begin_time = row.begin_time * 1000
this.form.end_time = row.end_time * 1000 this.form.end_time = row.end_time * 1000
this.form.begin_date = row.begin_date * 1000
this.form.end_date = row.end_date * 1000
this.form.content = row.content this.form.content = row.content
this.form.is_open = row.is_open this.form.is_open = row.is_open
this.form.idx = row.idx this.form.idx = row.idx
@ -201,6 +264,8 @@ export default {
this.data = JSON.parse(JSON.stringify(this.form)) this.data = JSON.parse(JSON.stringify(this.form))
this.data.begin_time /= 1000 this.data.begin_time /= 1000
this.data.end_time /= 1000 this.data.end_time /= 1000
this.data.begin_date /= 1000
this.data.end_date /= 1000
addIngameAnnc(this.data).then(response => { addIngameAnnc(this.data).then(response => {
if (response.code === 0) { if (response.code === 0) {
this.dialogFormVisible = false this.dialogFormVisible = false
@ -221,6 +286,8 @@ export default {
this.data = JSON.parse(JSON.stringify(this.form)) this.data = JSON.parse(JSON.stringify(this.form))
this.data.begin_time /= 1000 this.data.begin_time /= 1000
this.data.end_time /= 1000 this.data.end_time /= 1000
this.data.begin_date /= 1000
this.data.end_date /= 1000
updateIngameAnnc(this.data).then(response => { updateIngameAnnc(this.data).then(response => {
if (response.code === 0) { if (response.code === 0) {
this.dialogFormVisible = false this.dialogFormVisible = false