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
}
/**
* 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 {string} option

View File

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

View File

@ -20,22 +20,44 @@
<el-table-column
prop="begin_time"
label="发送时间"
width="160"
width="80"
>
<template slot-scope="scope">
<span>
{{ parseTime(scope.row.begin_time) }}
{{ parseUTCTime(scope.row.begin_time, '{h}:{i}:{s}') }}
</span>
</template>
</el-table-column>
<el-table-column
prop="end_time"
label="停止时间"
width="160"
width="80"
>
<template slot-scope="scope">
<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>
</template>
</el-table-column>
@ -70,10 +92,16 @@
<el-input v-model="form.title" />
</el-form-item>
<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 label-width="120px" label="发送时间<=:" class="postInfo-container-item" 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-form-item label-width="120px" label="发送时间<=:" prop="end_time">
<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 label="是否生效">
<el-switch
@ -106,7 +134,7 @@
import { addIngameAnnc, getIngameAnncList, updateIngameAnnc } from '@/api/announcement'
import { Message } from 'element-ui'
import { checkuipermission } from '@/store/modules/permission'
import { parseTime } from '@/utils'
import { parseUTCTime } from '@/utils'
export default {
components: {
@ -119,6 +147,8 @@ export default {
title: '',
begin_time: '',
end_time: '',
begin_date: '',
end_date: '',
content: '',
is_open: 1
},
@ -133,11 +163,43 @@ export default {
title: [{ required: true, message: 'required', trigger: 'blur' }],
begin_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' }]
},
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() {
this.getList()
if (checkuipermission('addannouncement')) {
@ -153,12 +215,13 @@ export default {
}
},
methods: {
parseTime,
parseUTCTime,
handleUpdate(row) {
console.log(row)
this.form.title = row.title
this.form.begin_time = row.begin_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.is_open = row.is_open
this.form.idx = row.idx
@ -201,6 +264,8 @@ export default {
this.data = JSON.parse(JSON.stringify(this.form))
this.data.begin_time /= 1000
this.data.end_time /= 1000
this.data.begin_date /= 1000
this.data.end_date /= 1000
addIngameAnnc(this.data).then(response => {
if (response.code === 0) {
this.dialogFormVisible = false
@ -221,6 +286,8 @@ export default {
this.data = JSON.parse(JSON.stringify(this.form))
this.data.begin_time /= 1000
this.data.end_time /= 1000
this.data.begin_date /= 1000
this.data.end_date /= 1000
updateIngameAnnc(this.data).then(response => {
if (response.code === 0) {
this.dialogFormVisible = false