detection-business/pages/authority/newadd.vue
2024-12-20 19:32:47 +08:00

470 lines
10 KiB
Vue

<!-- 发起订单 -->
<template>
<view class="content">
<view class="c-top">
<view class="" @click="getback()">
<uni-icons type="left" size="18"></uni-icons>
</view>
<view class="c-title">发布</view>
<view class=""></view>
</view>
<view class="dil">
<!-- 填空 -->
<view class="tinput">
<view class="text1">
<text class="hong1">*</text>
标题
</view>
<view class="you">
<input type="text" placeholder="请输入标题" v-model="newsTitle">
</view>
</view>
<!-- 填空 -->
<!-- <view class="tinput">
<view class="text1"> <text class="hong1">*</text> 发布单位</view>
<view class="you">
<input type="text" placeholder="请发布单位 "v-model="publishUnit" >
</view>
</view> -->
<view class="tinput">
<view class="text1">
<text class="hong1">*</text>
封面图
</view>
<view class="you">
<text>请上传封面图片</text>
<!-- <input type="text" placeholder="请上传封面图片"> -->
</view>
</view>
<!-- 上传图片 -->
<u-upload
:fileList="fileList1"
@afterRead="afterRead"
@delete="deletePic"
name="1"
multiple
:previewFullImage="true"
:maxCount="1"
></u-upload>
<view v-if="type === 'null'" class="tinput" style="display: flex;align-items: center">
<text class="text1" style="flex-shrink: 0;">设置可见</text>
<view class="radio-group">
<radio :checked="!ifShow" @click="changeShow(null)">全部可见</radio>
<radio :checked="ifShow === '01'" @click="changeShow('01')">员工可见</radio>
<radio :checked="ifShow === '02'" @click="changeShow('02')">用户可见</radio>
</view>
</view>
<view class="xinput">
<Rboy-editor ref="RboyEditor" @uploadFile="uploadFile" :count="6"></Rboy-editor>
</view>
<view class="xinput" v-if="type == 'hygg'">
<view class="text1">
<text class="hong1">*</text>
分类
</view>
<view class="xz">
<view :class="{'xlan':maneizhi == index}" class="kuang" v-for="(item,index) in taplist" :key="index"
@click="getzhi2(index,item.value)">
<view class="">{{ item.label }}</view>
</view>
</view>
</view>
<view class="tinput">
<view class="text1"> 上传视频</view>
<view class="you">
<text>请上传视频</text>
<!-- <input type="text" placeholder="请上传视频"> -->
</view>
</view>
<!-- 上传视频 -->
<u-upload
:fileList="fileList2"
@afterRead="afterRead1"
@delete="deletePic1"
name="2"
multiple
:maxCount="1"
accept="video"
:previewFullImage="true"
></u-upload>
<view class="anniu" @click="getnewsadd()">
<text>发布文章</text>
</view>
<view style="width: 100%; height: 60px;"></view>
</view>
</view>
</template>
<script>
import RboyEditor from "@/components/Rboy-editor/Rboy-editor"
import request from '../../utils/request'
import config from '@/config'
import upload from '@/utils/upload.js'
export default {
data() {
return {
baseUrl: this.$baseUrl,
fileList1: [],
fileList2: [],
newsCover: '',
videoUrl: '',
newsTitle: '',
publishUnit: '',
newsContent: '',
value: '',
type: 'hmzc',
id: 1,
carzhi: 0,
maneizhi: 0,
taplist: [],
ifShow: null,
}
},
onLoad(option) {
this.id = option.id
this.type = option.type
},
mounted() {
this.gettap()
},
components: {
RboyEditor,
},
methods: {
changeShow(value) {
this.ifShow = value
},
async set_content() {
this.$refs.RboyEditor.editor_setContents(this.detail)
},
// 获取内容
async get_content() {
this.newsContent = await this.$refs.RboyEditor.editor_getcontents()
},
// 上传图片
async uploadFile(event) {
let that = this
// event 选择的图片
for (var item in event.tempFilePaths) {
// uploadFileApi 为上传到服务端的接口 count大于1 使用 await
upload({
url: '/common/upload',
filePath: event.tempFilePaths[item],
}).then((res) => {
that.$refs.RboyEditor.editor_insertImage({
src: this.baseUrl + res.fileName,
alt: "图像",
})
})
}
},
async gettap() {
//行业公告分类
let ress = await request({
url: '/appInspection/news/editType',
method: 'get',
})
this.taplist = ress.data
this.value = ress.data[0].value
},
// 删除图片
deletePic(event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
// 新增图片
async afterRead(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this[`fileList${event.name}`].length
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url)
let item = this[`fileList${event.name}`][fileListLen]
this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFilePromise(url) {
upload({
url: '/common/upload',
filePath: url,
}).then((res) => {
this.newsCover = res.data.url
})
},
deletePic1(event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
// 新增图片
async afterRead1(event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this[`fileList${event.name}`].length
lists.map((item) => {
this[`fileList${event.name}`].push({
...item,
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise1(lists[i].url)
let item = this[`fileList${event.name}`][fileListLen]
this[`fileList${event.name}`].splice(fileListLen, 1, Object.assign(item, {
status: 'success',
message: '',
url: result
}))
fileListLen++
}
},
uploadFilePromise1(url) {
upload({
url: '/common/upload',
filePath: url,
}).then((res) => {
this.videoUrl = res.fileName
})
},
//发布按钮
async getnewsadd() {
this.newsContent = await this.$refs.RboyEditor.editor_getcontents()
if (this.newsTitle == '' || this.newsCover == '' || this.newsContent == '') {
uni.showToast({
title: '必填项不能有空!',
icon: 'none'
})
return
}
let data = {
newsTitle: this.newsTitle,
newsCover: this.newsCover,
newsContent: this.newsContent,
videoUrl: this.videoUrl,
category: this.value,
type: this.type,
ifShow: this.ifShow
}
let res = await request({
url: '/appInspection/news/add',
method: 'post',
data: data
})
if (res.code == 200) {
uni.showToast({
title: '发布成功,三秒后返回'
})
setTimeout(() => {
uni.navigateBack({
delta: 1
});
}, 3000);
}
},
getback() {
uni.navigateBack({
delta: 1,
})
},
getzhi(index) {
this.carzhi = index
},
getzhi2(index, value) {
this.value = value
this.maneizhi = index
},
}
}
</script>
<style scoped lang="scss">
.content {
width: 100%;
height: calc(100vh);
background-color: #F6F6F6;
box-sizing: border-box;
// padding-top: 45px;
}
.dil {
box-sizing: border-box;
background-color: #F6F6F6;
padding: 0px 12px;
}
.top-icon {
margin-bottom: 45px;
}
.c-top {
width: 100%;
box-sizing: border-box;
padding: 15px;
display: flex;
justify-content: space-between;
align-items: center;
background-color: white;
padding-top: 40px;
}
.c-title {
font-size: 18px;
font-weight: bold
}
.top {
box-sizing: border-box;
padding: 0px 15px;
width: 100%;
background-color: white;
}
.top-box {
display: flex;
justify-content: space-between;
align-items: center;
box-sizing: border-box;
padding: 20px 0px;
}
.tb-left {
height: 100%;
width: 80%;
display: flex;
align-items: center;
}
.uicon {
width: 18px;
height: 18px;
border-radius: 4px;
color: white;
background: orangered;
display: flex;
justify-content: center;
align-items: center;
font-size: 12px;
font-weight: bold;
margin-right: 6px;
}
.tb-right {
width: 20px;
height: 26px;
image {
width: 100%;
height: 100%;
}
}
.text1 {
font-size: 16px;
font-weight: bold;
color: #363636;
}
.hong1 {
margin-top: 5px;
font-size: 12px;
font-weight: 400;
color: #FF5453;
}
.hong2 {
margin-top: 5px;
font-size: 12px;
font-weight: 400;
}
.tinput {
width: 100%;
display: flex;
background: white;
align-items: center;
justify-content: space-between;
box-sizing: border-box;
padding: 16px;
margin-top: 14px;
margin-bottom: 14px;
}
.xinput {
width: 100%;
background: white;
box-sizing: border-box;
padding: 16px;
margin-top: 14px;
}
.you {
text-align: right;
}
.xz {
margin-top: 10px;
display: flex;
align-items: center;
}
.kuang {
width: 80px;
height: 23px;
background: #ECECEC;
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
color: #666666;
font-size: 14px;
margin-right: 15px;
}
.xlan {
background: #CDE7FF !important;
color: #1D62FF !important;
border: 1px solid #2A96FE;
}
.anniu {
width: 100%;
background: linear-gradient(180deg, #3F61C0 0%, #0D2E8D 100%);
border-radius: 50px;
height: 40px;
display: flex;
justify-content: center;
align-items: center;
color: #542F0E;
margin-top: 20px;
color: white;
}
.radio-group {
display: flex;
flex-direction: column; /* radio 按钮垂直排列 */
gap: 8px; /* radio 按钮之间添加间距 */
}
</style>