提交 b0bd4238 authored 作者: pengxiaohui's avatar pengxiaohui

广告列表新建更新审核

上级 2a900e41
......@@ -8,3 +8,7 @@ export function logout() {
export function getUser() {
return httpRequest.get('/api/passport/account/get-user-info')
}
// 发送验证码
export function sendCode(data) {
return httpRequest.post('/api/usercenter/user/send-code', data)
}
\ No newline at end of file
import httpRequest from '@/utils/axios'
/* ------------------------------------广告------------------------------------ */
/**
* 获取广告列表
* @param {string} type_id 类型id
......@@ -8,6 +9,20 @@ import httpRequest from '@/utils/axios'
export function getAdList(params) {
return httpRequest.get('/api/cms/admin/v1/advertisements', { params })
}
/**
* 创建广告
*/
export function createAd(data) {
return httpRequest.post('/api/cms/admin/v1/advertisement/create', data)
}
/**
* 更新广告
* @param {string} id 广告id
* @param {object} data 广告表单数据
*/
export function updateAd(id, data) {
return httpRequest.put(`/api/cms/admin/v1/advertisement/${id}/update`, data)
}
/**
* 发布广告
* @param {string} id
......@@ -16,7 +31,17 @@ export function getAdList(params) {
export function publishAd(id, data) {
return httpRequest.post(`/api/cms/admin/v1/advertisement/${id}/publish`, data)
}
/**
* 审核广告
* @param {string} id
* @param {number} data.audit_status 2通过 3驳回
* @param {string} data.audit_remarks 审核说明
*/
export function auditAd(id, data) {
return httpRequest.post(`/api/cms/admin/v1/advertisement/${id}/audit`, data)
}
/* ------------------------------------文章------------------------------------ */
/**
* 获取文章列表
* @param {string} type_id 类型id
......@@ -26,6 +51,12 @@ export function publishAd(id, data) {
export function getArticleList(params) {
return httpRequest.get('/api/cms/admin/v1/articles', { params })
}
/**
* 创建文章
*/
export function createArticle(data) {
return httpRequest.post('/api/cms/admin/v1/article/create', data)
}
/**
* 发布文章
* @param {string} id
......@@ -35,6 +66,7 @@ export function publishArticle(id, data) {
return httpRequest.post(`/api/cms/admin/v1/article/${id}/publish`, data)
}
/* ------------------------------------图文------------------------------------ */
/**
* 获取图文列表
* @param {string} type_id 类型id
......@@ -52,3 +84,11 @@ export function getImgTextList(params) {
export function publishImgText(id, data) {
return httpRequest.post(`/api/cms/admin/v1/img-text/${id}/publish`, data)
}
/**
* 获取广告/文章/图文新建时所选项目对应的类型
* @param {number} content_type 类型 1文章 2广告 3图文
* @param {string} project_id 项目id
*/
export function getProjectContentTypeList(type, id) {
return httpRequest.get(`/api/cms/admin/v1/type/${type}/project/${id}`)
}
......@@ -22,3 +22,15 @@ export function searchUserList(params) {
export function getUserRolesPermissions() {
return httpRequest.get('/api/cms/admin/v1/common/user-detail')
}
/**
* 文件上传
*/
export function fileUpload(formData) {
return httpRequest({
url: '/api/cms/admin/v1/common/file-upload',
method: 'post',
headers: { 'Content-Type': 'multipart/form-data' },
data: formData
})
// return httpRequest.post('/api/cms/admin/v1/common/file-upload', { headers: { 'Content-Type': 'multipart/form-data' } })
}
......@@ -39,7 +39,7 @@
<el-button size="mini" :disabled="!multipleSelection.length" @click="handleRemove">删除</el-button>
</template>
</table-list>
<el-drawer :visible.sync="drawerVisible" size="1100px" :destroy-on-close="true">
<el-drawer :visible.sync="drawerVisible" size="1100px" :destroy-on-close="true" ref="ad_drawer">
<template slot="title">
<h5>
{{ drawTitle }}
......@@ -56,7 +56,7 @@
<drawer-form
:options="drawFormOptions"
@drawFormSubmit="HandleDrawFormSubmit"
@drawFormClose="drawerVisible = false"
@drawFormClose="$refs.ad_drawer.closeDrawer()"
>
<template #form-item-review>
<el-form-item>
......@@ -64,8 +64,8 @@
</el-form-item>
</template>
</drawer-form>
<el-dialog title="审核广告" :visible.sync="dialogVisible" width="460px" append-to-body :destroy-on-close="true">
<review-form @dialogClose="dialogVisible = false" @reviewSubmit="handleReviewSubmit" />
<el-dialog title="审核广告" :visible.sync="dialogVisible" width="460px" append-to-body :destroy-on-close="true" ref="auditDialog">
<audit-form @dialogClose="dialogVisible = false" @auditSubmit="handleAuditSubmit" />
</el-dialog>
</el-drawer>
</div>
......@@ -73,10 +73,10 @@
<script>
import TableList from '@/components/TableList'
import DrawerForm from '../components/DrawerForm.vue'
import ReviewForm from '../components/ReviewForm.vue'
import { getAdList, publishAd } from '@/api/contentManage'
import AuditForm from '../components/AuditForm.vue'
import { getAdList, createAd, publishAd, updateAd, auditAd } from '@/api/contentManage'
export default {
components: { TableList, DrawerForm, ReviewForm },
components: { TableList, DrawerForm, AuditForm },
data() {
return {
activeName: '',
......@@ -92,7 +92,7 @@ export default {
],
drawFormOptions: {
type: '',
page: 'ads',
pageType: 2,
details: {}
},
drawItem: '',
......@@ -179,38 +179,62 @@ export default {
this.drawerVisible = true
},
handleDetails(val) {
console.log(val)
this.drawItem = val
this.drawFormOptions.type = 'details'
this.drawFormOptions.details = {
project_id: '111',
type_id: '111',
title: '3232',
uri: 'https://www.baidu.com',
summary: '内容摘要',
remarks: '注意事项',
web_img_uri: 'https://zj-images.oss-cn-beijing.aliyuncs.com/00d78a3a999f4b10000f2cd422232221.JPG',
mobile_terminal_img_uri: 'https://zj-images.oss-cn-beijing.aliyuncs.com/00d78a3a999f4b10000f2cd422232221.JPG',
enclosure_uri: 'https://zj-images.oss-cn-beijing.aliyuncs.com/00d78a3a999f4b10000f2cd422232221.JPG',
video_uri: 'https://zj-images.oss-cn-beijing.aliyuncs.com/00d78a3a999f4b10000f2cd422232221.JPG',
start_time: '2021-01-01 08:33:22',
hasEndDate: 1,
end_time: '2021-01-05 08:33:22',
is_publish: 1,
is_top: 1,
weight: 10,
review_status: 1
}
this.drawFormOptions.details = val
this.drawerVisible = true
},
HandleDrawFormSubmit(val) {
console.log(val)
Object.keys(val).forEach(key => {
if (val[key] === '') delete val[key]
})
if (this.drawFormOptions.type === 'create') {
this.fetchCreateAd(val)
} else {
this.fetchUpdateAd(val)
}
},
handleReviewSubmit(val) {
console.log(val)
handleAuditSubmit(val) {
this.fetchAuditAd(val)
},
handleTabClick() {
// true 强制刷新
this.$refs.tableList.refetch(true)
},
fetchCreateAd(val) {
delete val.is_publish
createAd(val).then(res => {
if (res.code === 0 && res.data && res.data.id) {
this.$message.success('新建广告成功')
this.$refs.tableList.refetch()
this.$refs.ad_drawer.closeDrawer()
} else {
this.$message.error(res.message || '新建广告失败')
}
})
},
fetchUpdateAd(val) {
updateAd(this.drawItem.id, val).then(res => {
if (res.code === 0 && res.data && res.data.status) {
this.$message.success('更改广告成功')
this.$refs.tableList.refetch()
this.$refs.ad_drawer.closeDrawer()
} else {
this.$message.error(res.message || '更改广告失败')
}
})
},
fetchAuditAd(val) {
auditAd(this.drawItem.id, val).then(res => {
if (res.code === 0 && res.data && res.data.status) {
this.$message.success('审核广告成功')
this.$refs.tableList.refetch()
this.dialogVisible = false
} else {
this.$message.error(res.message || '审核广告失败')
}
})
}
}
}
......
......@@ -86,7 +86,7 @@ export default {
],
drawFormOptions: {
type: '',
page: 'article'
pageType: 1
},
drawItem: '',
dialogVisible: false
......
<template>
<el-form :model="reviewForm" :rules="rules" ref="ruleForm" label-width="90px">
<el-form-item label="审核结果" prop="result">
<el-select v-model="reviewForm.result" placeholder="请选择审核结果" size="small" style="width:100%;">
<el-option label="通过" :value="1"></el-option>
<el-option label="不通过" :value="0"></el-option>
<el-form :model="form" :rules="rules" ref="ruleForm" label-width="90px">
<el-form-item label="审核结果" prop="audit_status">
<el-select v-model="form.audit_status" placeholder="请选择审核结果" size="small" style="width:100%;">
<el-option label="通过" :value="2"></el-option>
<el-option label="驳回" :value="3"></el-option>
</el-select>
</el-form-item>
<el-form-item label="审核评审" prop="text">
<el-input v-model="reviewForm.text" type="textarea" size="small" rows="4" placeholder="请输入审核评审"/>
<el-form-item label="审核评审" prop="audit_remarks">
<el-input v-model="form.audit_remarks" type="textarea" size="small" rows="4" placeholder="请输入审核评审"/>
</el-form-item>
<el-form-item>
<el-button size="mini" @click="$emit('dialogClose')">取消</el-button>
<el-button type="primary" @click="handleReviewSubmit" size="mini">提交</el-button>
<el-button type="primary" @click="handleSubmit" size="mini">提交</el-button>
</el-form-item>
</el-form>
</template>
......@@ -19,21 +19,21 @@
export default {
data() {
return {
reviewForm: {
result: '',
text: ''
form: {
audit_status: '',
audit_remarks: ''
},
rules: {
result: [{ required: true, message: '请选择审核结果', trigger: 'change' }],
text: [{ required: true, message: '请输入审核评审', trigger: 'blur' }]
audit_status: [{ required: true, message: '请选择审核结果', trigger: 'change' }],
audit_remarks: [{ required: true, message: '请输入审核评审', trigger: 'blur' }]
}
}
},
methods: {
handleReviewSubmit() {
handleSubmit() {
this.$refs.ruleForm.validate((valid) => {
if (valid) {
this.$emit('reviewSubmit', this.reviewForm)
this.$emit('auditSubmit', this.form)
}
});
}
......
......@@ -82,7 +82,7 @@ export default {
],
drawFormOptions: {
type: '',
page: 'image-text'
pageType: 3
},
drawItem: '',
dialogVisible: false
......
......@@ -78,8 +78,8 @@
</div>
</div>
</el-drawer>
<el-dialog :title="dialogTitle" ref="dialogForm" :visible.sync="dialogVisible" width="440px" :destroy-on-close="true">
<el-form :model="dialogForm" label-width="80px" class="dialog-form">
<el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="440px" :destroy-on-close="true">
<el-form :model="dialogForm" ref="dialogForm" label-width="80px" class="dialog-form">
<template v-if="dialogType === 'pwd'">
<el-form-item label="新密码" prop="password" :rules="{ required: true, message: '请输入新密码', trigger: 'blur' }">
<el-input v-model="dialogForm.password" size="small"></el-input>
......@@ -87,6 +87,20 @@
<el-form-item label="确认密码" prop="ensurePassword" :rules="[{ required: true, message: '请输入确认密码', trigger: 'blur' }, { validator: (rule, value, callback) => checkedDialogForm(dialogForm.password, value, callback, '密码'), trigger: 'blur' }]">
<el-input v-model="dialogForm.ensurePassword" size="small"></el-input>
</el-form-item>
<el-form-item label="手机号" prop="phone" :rules="{ validator: checkedMobile, trigger: 'blur' }">
<el-input v-model="dialogForm.phone" size="small"></el-input>
</el-form-item>
<el-form-item label="验证码" prop="code" :rules="{ required: true, message: '请输入验证码', trigger: 'blur' }">
<el-col :span="16">
<el-form-item prop="endDate"></el-form-item>
<el-input v-model="dialogForm.code" size="small"></el-input>
</el-col>
<el-col :span="7" style="float:right">
<el-button type="primary" @click="sendCode" size="small" style="width:100%;" id="checkedCode" :disabled="isBtnDisabled">
获取验证码
</el-button>
</el-col>
</el-form-item>
</template>
<template v-if="dialogType === 'phone'">
<el-form-item label="新手机号" prop="phone" :rules="[{ required: true, message: '请输入手机号', trigger: 'blur' }, { validator: checkedMobile, trigger: 'blur' }]">
......@@ -107,6 +121,7 @@
<script>
import TableList from '@/components/TableList'
import { getStaffList, getProjectList, getRoleList, createStaff, updateStaff } from '@/api/settings'
import { sendCode } from '@/api/account'
import { searchUserList } from '@/api/system'
const MOBILE_REG = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{4,8}$/
const EMAIL_REG = /^[A-Za-z0-9]+([_.][A-Za-z0-9]+)*@[A-Za-z0-9-.]+$/
......@@ -118,15 +133,17 @@ const drawerForm = {
const dialogForm = {
password: '',
ensurePassword: '',
code: '',
phone: '',
ensurePhone: ''
}
export default {
components: { TableList },
data() {
const mobileReg = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{4,8}$/
const checkMobile = (rule, value, callback) => {
if (value) {
if (!MOBILE_REG.test(value)) {
if (!mobileReg.test(value)) {
callback(new Error('手机号格式错误'));
} else {
callback()
......@@ -153,7 +170,8 @@ export default {
dialogType: '',
operateItem: '',
dialogForm: Object.assign({}, dialogForm),
checkedMobile: checkMobile
checkedMobile: checkMobile,
isBtnDisabled: false
}
},
computed: {
......@@ -224,7 +242,7 @@ export default {
},
handleDialogClose() {
this.drawerVisible = false
this.form = Object.assign({}, drawerForm)
this.form = Object.assign({}, dialogForm)
},
handleCheckAllChange(val) {
this.form.project = val ? this.projectList.map(item => item.project_id) : [];
......@@ -247,6 +265,34 @@ export default {
this.dialogVisible = true
this.dialogType = 'pwd'
},
sendCode() {
console.log(this.dialogForm)
if (!this.dialogForm.phone) {
this.$message('请填写手机号')
} else if (!MOBILE_REG.test(this.dialogForm.phone)) {
this.$message('手机号格式错误')
} else {
this.fetchSendCode()
this.isBtnDisabled = true
this.btnDisabledTimer()
}
},
// 发送验证码按钮计时器
btnDisabledTimer() {
let count = 3
const btnEl = document.querySelector('#checkedCode')
btnEl.innerHTML = count + '秒后重发'
const timer = setInterval(() => {
count--
if (count < 1) {
clearInterval(timer)
this.isBtnDisabled = false
btnEl.innerHTML = '获取验证码'
} else {
btnEl.innerHTML = count + '秒后重发'
}
}, 1000)
},
// 更换手机号
changePhone(data) {
this.operateItem = data
......@@ -290,6 +336,19 @@ export default {
}
})
},
fetchSendCode() {
const params = {
account: this.dialogForm.phone,
service: 'ezijing.com'
}
sendCode(params).then(res => {
if (res && res.code === 0) {
this.$message.success('验证码发送成功')
} else {
this.$message.error(res.msg || '发送验证码失败')
}
})
},
fetchCreateStaff() {
createStaff(this.form).then((res) => {
if (res.code === 0 && res.data && res.data.id) {
......
......@@ -2,6 +2,7 @@ const getters = {
user: state => state.user.user,
roles: state => state.user.roles,
sidebar: state => state.app.sidebar,
permission_routes: state => state.permission.routes
permission_routes: state => state.permission.routes,
projects: state => state.user.projects
}
export default getters
......@@ -5,9 +5,9 @@ const user = {
state: {
user: {},
isLogin: false,
hasRolesPermissions: false,
roles: null,
permissions: null
permissions: null,
projects: []
},
mutations: {
......@@ -23,8 +23,8 @@ const user = {
setPermissions(state, permissions) {
state.permissions = permissions
},
setHasRolesPermissions(state, hasRolesPermissions) {
state.hasRolesPermissions = hasRolesPermissions
setProjects(state, projects) {
state.projects = projects
}
},
......@@ -73,12 +73,18 @@ const user = {
permissions = data.permissions
}
commit('setPermissions', permissions)
if (data.projects && Array.isArray(data.projects)) {
commit('setProjects', data.projects)
} else {
commit('setProjects', [])
}
} else {
// window.location.href = `${webConf.others.loginUrl}?rd=${encodeURIComponent(window.location.href)}`
}
}).catch(() => {
commit('setRoles', null)
commit('setPermissions', null)
commit('setProjects', [])
})
}
}
......
......@@ -14,16 +14,22 @@ httpRequest.interceptors.request.use(
function(config) {
const defaultParams = {
timestamp: parseInt(Date.now() / 1000),
nonce: getNonce(9),
nonce: getNonce(12),
signature: 'UG7wBenexQhiuD2wpCwuxkU0jqcj006d'
}
let params = config.params || config.data
if (config.headers['Content-Type'] === 'multipart/form-data') {
Object.keys(defaultParams).forEach(key => {
params.append(key, defaultParams[key])
})
} else {
params = Object.assign({}, defaultParams, params)
if (['post', 'put', 'delete'].includes(config.method)) {
config.data = params
} else {
config.params = params
}
}
if (config.headers['Content-Type'] === 'application/x-www-form-urlencoded') {
config.data = qs.stringify(config.data)
}
......
......@@ -18,3 +18,30 @@ export function getNonce(length) {
}
return str
}
/**
* 将时间字符串、时间戳转成日期对象
* @param {(object|string|number)} time
* @returns {Date Object}
*/
export function formatToDate(time) {
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.toString().length === 10) {
time = time * 1000
}
date = new Date(time)
}
return date
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论