123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- <template>
- <a-modal
- title="新增Banner"
- :width="900"
- :visible="visible"
- :confirmLoading="confirmLoading"
- ok-text="保存"
- cancel-text="关闭"
- @ok="handleSubmit"
- @cancel="handleCancel"
- :maskClosable="false"
- >
- <a-spin :spinning="formLoading">
- <a-form :form="form">
- <a-form-item label="名称" :labelCol="labelCol" :wrapperCol="wrapperCol" has-feedback>
- <a-input
- placeholder="请输入名称"
- v-decorator="['bannerName', {rules: [{required: true, message: '请输入名称!'}]}]"
- />
- </a-form-item>
- <a-form-item label="跳转方式" :labelCol="labelCol" :wrapperCol="wrapperCol" :required="true">
- <a-radio-group name="bannerType" v-decorator="['bannerType', { initialValue: 0 }]" @change="changeType">
- <a-radio :value="0">无</a-radio>
- <a-radio :value="1">站内文章</a-radio>
- <a-radio :value="2">外部链接</a-radio>
- </a-radio-group>
- </a-form-item>
- <a-form-item
- :required="true"
- v-show="bannerType==1"
- label="选择文章"
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- has-feedback
- >
- <a-select
- style="width: 100%"
- placeholder="请选择文章"
- v-decorator="['bannerTypeUrl', {rules: [{validator: checkUrl}]}]"
- >
- <a-select-option
- v-for="(item,index) in actionClassData"
- :key="index"
- :value="item.articleContentId"
- >{{ item.articleContentTitle }}</a-select-option>
- </a-select>
- </a-form-item>
- <a-form-item
- :required="true"
- v-show="bannerType==2"
- label="跳转链接Url"
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- has-feedback
- >
- <a-input
- placeholder="请输入跳转链接"
- v-decorator="['bannerTypeUrl', {rules: [{validator: checkUrl}]}]"
- />
- </a-form-item>
- <a-form-item
- label="图片"
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- has-feedback
- :required="true"
- >
- <div>
- <upload-component
- ref="upLoadRef"
- :remarkTxt="remarkTxt"
- @uploadSuccess="uploadSuccess"
- v-decorator="[
- 'bannerImage',
- {
- trigger: 'change',
- rules: [{ validator: checkimageUrl }]
- },
- ]"
- ></upload-component>
- </div>
- </a-form-item>
- <a-form-item
- :labelCol="labelCol"
- :wrapperCol="wrapperCol"
- label="排序"
- :hasFeedback="true"
- :required="true"
- >
- <a-input
- placeholder="请输入排序号"
- v-decorator="['bannerSort', {rules: [{validator: checkSortIndex}]}]"
- />
- </a-form-item>
- <a-form-item label="是否上线" :labelCol="labelCol" :wrapperCol="wrapperCol" :required="true">
- <a-radio-group name="bannerIsLine" v-decorator="['bannerIsLine',{ initialValue: 1 }]">
- <a-radio :value="1">上线</a-radio>
- <a-radio :value="0">下线</a-radio>
- </a-radio-group>
- </a-form-item>
- </a-form>
- </a-spin>
- </a-modal>
- </template>
- <script>
- import homeApi from '@/api/homeApi'
- import uploadComponent from '@/components/upLoad'
- import { checkUrl } from '@/utils/util'
- export default {
- components: { uploadComponent },
- data () {
- return {
- labelCol: {
- xs: { span: 24 },
- sm: { span: 5 }
- },
- wrapperCol: {
- xs: { span: 24 },
- sm: { span: 15 }
- },
- visible: false,
- confirmLoading: false,
- actionClassData: [],
- bannerType: 0,
- formLoading: false,
- form: this.$form.createForm(this),
- remarkTxt: '请上传1920×712规格图像'
- }
- },
- mounted () {
- },
- methods: {
- // 初始化方法
- add (record) {
- this.visible = true
- this.$nextTick(() => {
- this.$refs.upLoadRef.initData()
- })
- this.formLoading = true
- this.getActionClass()
- },
- /**
- * 获取选择器下拉框数据
- */
- getActionClass () {
- homeApi.findArticleAll().then(res => {
- this.formLoading = false
- if (res.status === 200) {
- this.actionClassData = res.data
- } else {
- this.$message.error('获取文章列表数据失败')
- }
- })
- },
- handleSubmit () {
- const {
- form: { validateFields }
- } = this
- this.confirmLoading = true
- validateFields((errors, values) => {
- if (!errors) {
- values.bannerSort = parseInt(values.bannerSort)
- homeApi.addBanner(values)
- .then(res => {
- if (res.status === 200) {
- this.$message.success('新增成功')
- this.visible = false
- this.confirmLoading = false
- this.$emit('ok', values)
- this.form.resetFields()
- } else {
- this.$message.error('新增失败:' + res.msg)
- }
- })
- .finally(res => {
- this.confirmLoading = false
- })
- } else {
- this.confirmLoading = false
- }
- })
- },
- handleCancel () {
- this.form.resetFields()
- this.visible = false
- },
- changeType (val) {
- this.$nextTick(() => {
- this.bannerType = this.form.getFieldValue('bannerType')
- this.form.resetFields('bannerTypeUrl')
- if (this.bannerType === 2) {
- this.form.setFieldsValue({ 'bannerTypeUrl': 'http://' })
- } else {
- this.form.setFieldsValue({ 'bannerTypeUrl': '' })
- }
- })
- },
- uploadSuccess (avg) {
- if (avg.fileList[0]) {
- this.form.resetFields('bannerImage')
- this.form.setFieldsValue({ 'bannerImage': avg.fileList[0].uri })
- }
- },
- checkimageUrl (rule, value, callback) {
- if (value && value.length > 0) {
- callback()
- return
- }
- var text = '请上传图片'
- callback(text)
- },
- checkUrl (rule, value, callback) {
- var text = '请输入跳转链接!'
- if (this.bannerType === 1) {
- text = '请选择文章!'
- if (!value) {
- callback(text)
- } else {
- callback()
- }
- } else if (this.bannerType === 2) {
- if (!value) {
- callback(text)
- } else if (checkUrl(value)) {
- callback()
- } else {
- text = '请输入正确的url地址'
- callback(text)
- }
- } else {
- callback()
- }
- },
- checkSortIndex (rule, value, callback) {
- var text = '请输入排序号!'
- if (!value) {
- callback(text)
- } else if (/(^[1-9]\d*$)/.test(value)) {
- callback()
- } else {
- text = '请输入数字'
- callback(text)
- }
- }
- }
- }
- </script>
|