refactor: WxMaterialSelect组件setup

liutao_branch
dhb52 3 years ago
parent e035eb2618
commit a8b4c16a7e

@ -14,7 +14,8 @@
<p class="item-name">{{ item.name }}</p> <p class="item-name">{{ item.name }}</p>
<el-row class="ope-row"> <el-row class="ope-row">
<el-button type="success" @click="selectMaterialFun(item)"> <el-button type="success" @click="selectMaterialFun(item)">
选择 <Icon icon="ep:circle-check" /> 选择
<Icon icon="ep:circle-check" />
</el-button> </el-button>
</el-row> </el-row>
</div> </div>
@ -48,7 +49,8 @@
<el-table-column label="操作" align="center" fixed="right"> <el-table-column label="操作" align="center" fixed="right">
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="selectMaterialFun(scope.row)" <el-button type="primary" link @click="selectMaterialFun(scope.row)"
>选择<Icon icon="ep:plus" /> >选择
<Icon icon="ep:plus" />
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -89,7 +91,8 @@
> >
<template #default="scope"> <template #default="scope">
<el-button type="primary" link @click="selectMaterialFun(scope.row)" <el-button type="primary" link @click="selectMaterialFun(scope.row)"
>选择<Icon icon="akar-icons:circle-plus" /> >选择
<Icon icon="akar-icons:circle-plus" />
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -110,7 +113,8 @@
<WxNews :articles="item.content.newsItem" /> <WxNews :articles="item.content.newsItem" />
<el-row class="ope-row"> <el-row class="ope-row">
<el-button type="success" @click="selectMaterialFun(item)"> <el-button type="success" @click="selectMaterialFun(item)">
选择<Icon icon="ep:circle-check" /> 选择
<Icon icon="ep:circle-check" />
</el-button> </el-button>
</el-row> </el-row>
</div> </div>
@ -127,124 +131,101 @@
</div> </div>
</template> </template>
<script lang="ts" name="WxMaterialSelect"> <script lang="ts" setup name="WxMaterialSelect">
import WxNews from '@/views/mp/components/wx-news/main.vue' import WxNews from '@/views/mp/components/wx-news/main.vue'
import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue' import WxVoicePlayer from '@/views/mp/components/wx-voice-play/main.vue'
import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue' import WxVideoPlayer from '@/views/mp/components/wx-video-play/main.vue'
import { getMaterialPage } from '@/api/mp/material' import * as MpMaterialApi from '@/api/mp/material'
import { getFreePublishPage } from '@/api/mp/freePublish' import * as MpFreePublishApi from '@/api/mp/freePublish'
import { getDraftPage } from '@/api/mp/draft' import * as MpDraftApi from '@/api/mp/draft'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import { defineComponent, PropType } from 'vue'
export default defineComponent({ const props = defineProps({
components: { objData: {
WxNews, type: Object, // type - accountId -
WxVoicePlayer, required: true
WxVideoPlayer
}, },
props: { newsType: {
objData: { // 12稿
type: Object, // type - accountId - type: String as PropType<string>,
required: true default: '1'
}, }
newsType: { })
// 12稿
type: String as PropType<string>,
default: '1'
}
},
setup(props, ctx) {
//
const loading = ref(false)
//
const total = ref(0)
//
const list = ref([])
//
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
accountId: props.objData.accountId
})
const objDataRef = reactive(props.objData)
const newsTypeRef = ref(props.newsType)
const selectMaterialFun = (item) => { const emit = defineEmits(['select-material'])
ctx.emit('select-material', item)
}
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getPage()
}
const getPage = () => {
loading.value = true
if (objDataRef.type === 'news' && newsTypeRef.value === '1') {
// +
getFreePublishPageFun()
} else if (objDataRef.type === 'news' && newsTypeRef.value === '2') {
// + 稿
getDraftPageFun()
} else {
//
getMaterialPageFun()
}
}
const getMaterialPageFun = async () => { //
let data = await getMaterialPage({ const loading = ref(false)
...queryParams, //
type: objDataRef.type const total = ref(0)
}) //
list.value = data.list const list = ref([])
total.value = data.total //
loading.value = false const queryParams = reactive({
} pageNo: 1,
pageSize: 10,
accountId: props.objData.accountId
})
const objDataRef = reactive(props.objData)
const newsTypeRef = ref(props.newsType)
const getFreePublishPageFun = async () => { const selectMaterialFun = (item) => {
let data = await getFreePublishPage(queryParams) emit('select-material', item)
data.list.forEach((item) => { }
const newsItem = item.content.newsItem
newsItem.forEach((article) => {
article.picUrl = article.thumbUrl
})
})
list.value = data.list
total.value = data.total
loading.value = false
}
const getDraftPageFun = async () => { const getPage = async () => {
let data = await getDraftPage(queryParams) loading.value = true
data.list.forEach((item) => { try {
const newsItem = item.content.newsItem if (objDataRef.type === 'news' && newsTypeRef.value === '1') {
newsItem.forEach((article) => { // +
article.picUrl = article.thumbUrl await getFreePublishPageFun()
}) } else if (objDataRef.type === 'news' && newsTypeRef.value === '2') {
}) // + 稿
list.value = data.list await getDraftPageFun()
total.value = data.total } else {
loading.value = false //
await getMaterialPageFun()
} }
} finally {
loading.value = false
}
}
const getMaterialPageFun = async () => {
const data = await MpMaterialApi.getMaterialPage({
...queryParams,
type: objDataRef.type
})
list.value = data.list
total.value = data.total
}
onMounted(async () => { const getFreePublishPageFun = async () => {
getPage() const data = await MpFreePublishApi.getFreePublishPage(queryParams)
data.list.forEach((item) => {
const newsItem = item.content.newsItem
newsItem.forEach((article) => {
article.picUrl = article.thumbUrl
}) })
})
list.value = data.list
total.value = data.total
}
return { const getDraftPageFun = async () => {
handleQuery, const data = await MpDraftApi.getDraftPage(queryParams)
dateFormatter, data.list.forEach((item) => {
selectMaterialFun, const newsItem = item.content.newsItem
getMaterialPageFun, newsItem.forEach((article) => {
getPage, article.picUrl = article.thumbUrl
queryParams, })
objDataRef, })
list, list.value = data.list
total, total.value = data.total
loading }
}
} onMounted(async () => {
getPage()
}) })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -275,6 +256,7 @@ p {
.waterfall { .waterfall {
column-count: 3; column-count: 3;
} }
p { p {
color: red; color: red;
} }
@ -284,6 +266,7 @@ p {
.waterfall { .waterfall {
column-count: 2; column-count: 2;
} }
p { p {
color: orange; color: orange;
} }

Loading…
Cancel
Save