refactor: vue3.3 defineOptions

This commit is contained in:
xingyu
2023-06-21 19:14:34 +08:00
parent a5c7c886ee
commit 922f83d99c
259 changed files with 955 additions and 381 deletions

View File

@ -68,9 +68,11 @@
</template>
</Dialog>
</template>
<script lang="ts" name="MpAccountForm" setup>
<script lang="ts" setup>
import * as AccountApi from '@/api/mp/account'
defineOptions({ name: 'MpAccountForm' })
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗

View File

@ -100,9 +100,12 @@
<!-- 对话框(添加 / 修改) -->
<AccountForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts" name="MpAccount">
<script setup lang="ts">
import * as AccountApi from '@/api/mp/account'
import AccountForm from './AccountForm.vue'
defineOptions({ name: 'MpAccount' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化

View File

@ -32,12 +32,14 @@
</div>
</template>
<script setup lang="ts" name="ReplyForm">
<script setup lang="ts">
import WxReplySelect, { type Reply } from '@/views/mp/components/wx-reply'
import type { FormInstance } from 'element-plus'
import { MsgType } from './types'
import { DICT_TYPE, getDictOptions, getIntDictOptions } from '@/utils/dict'
defineOptions({ name: 'ReplyForm' })
const props = defineProps<{
modelValue: any
reply: Reply

View File

@ -67,7 +67,7 @@
</el-dialog>
</ContentWrap>
</template>
<script setup lang="ts" name="MpAutoReply">
<script setup lang="ts">
import ReplyForm from '@/views/mp/autoReply/components/ReplyForm.vue'
import { type Reply, ReplyType } from '@/views/mp/components/wx-reply'
import WxAccountSelect from '@/views/mp/components/wx-account-select'
@ -76,6 +76,9 @@ import { ContentWrap } from '@/components/ContentWrap'
import type { TabPaneName } from 'element-plus'
import ReplyTable from './components/ReplyTable.vue'
import { MsgType } from './components/types'
defineOptions({ name: 'MpAutoReply' })
const message = useMessage() // 消息
const accountId = ref(-1) // 公众号ID

View File

@ -4,9 +4,11 @@
</el-select>
</template>
<script lang="ts" setup name="WxAccountSelect">
<script lang="ts" setup>
import * as MpAccountApi from '@/api/mp/account'
defineOptions({ name: 'WxAccountSelect' })
const account: MpAccountApi.AccountVO = reactive({
id: -1,
name: ''

View File

@ -39,7 +39,9 @@
</div>
</template>
<script setup lang="ts" name="WxLocation">
<script setup lang="ts">
defineOptions({ name: 'WxLocation' })
const props = defineProps({
locationX: {
required: true,

View File

@ -131,7 +131,7 @@
</div>
</template>
<script lang="ts" setup name="WxMaterialSelect">
<script lang="ts" setup>
import WxNews from '@/views/mp/components/wx-news'
import WxVoicePlayer from '@/views/mp/components/wx-voice-play'
import WxVideoPlayer from '@/views/mp/components/wx-video-play'
@ -141,6 +141,8 @@ import * as MpFreePublishApi from '@/api/mp/freePublish'
import * as MpDraftApi from '@/api/mp/draft'
import { dateFormatter } from '@/utils/formatTime'
defineOptions({ name: 'WxMaterialSelect' })
const props = withDefaults(
defineProps<{
type: string

View File

@ -48,7 +48,7 @@
</div>
</template>
<script setup lang="ts" name="Msg">
<script setup lang="ts">
import WxVideoPlayer from '@/views/mp/components/wx-video-play'
import WxVoicePlayer from '@/views/mp/components/wx-voice-play'
import WxNews from '@/views/mp/components/wx-news'
@ -57,6 +57,8 @@ import WxMusic from '@/views/mp/components/wx-music'
import MsgEvent from './MsgEvent.vue'
import { MsgType } from '../types'
defineOptions({ name: 'Msg' })
const props = defineProps<{
item: any
}>()

View File

@ -24,12 +24,14 @@
</div>
</div>
</template>
<script setup lang="ts" name="MsgList">
<script setup lang="ts">
import Msg from './Msg.vue'
import { formatDate } from '@/utils/formatTime'
import { User } from '../types'
import avatarWechat from '@/assets/imgs/wechat.png'
defineOptions({ name: 'MsgList' })
const props = defineProps<{
list: any[]
accountId: number

View File

@ -30,7 +30,7 @@
</ContentWrap>
</template>
<script setup lang="ts" name="WxMsg">
<script setup lang="ts">
import WxReplySelect, { Reply, ReplyType } from '@/views/mp/components/wx-reply'
import MsgList from './components/MsgList.vue'
import { getMessagePage, sendMessage } from '@/api/mp/message'
@ -38,6 +38,8 @@ import { getUser } from '@/api/mp/user'
import profile from '@/assets/imgs/profile.jpg'
import { User } from './types'
defineOptions({ name: 'WxMsg' })
const message = useMessage() // 消息弹窗
const props = defineProps({

View File

@ -25,7 +25,9 @@
</div>
</template>
<script setup lang="ts" name="WxMusic">
<script setup lang="ts">
defineOptions({ name: 'WxMusic' })
const props = defineProps({
title: {
required: false,

View File

@ -38,7 +38,9 @@
</div>
</template>
<script lang="ts" name="WxNews" setup>
<script lang="ts" setup>
defineOptions({ name: 'WxNews' })
const props = withDefaults(
defineProps<{
articles: any[] | null

View File

@ -59,7 +59,7 @@
</el-tabs>
</template>
<script setup lang="ts" name="WxReplySelect">
<script setup lang="ts">
import { Reply, NewsType, ReplyType, createEmptyReply } from './components/types'
import TabText from './components/TabText.vue'
import TabImage from './components/TabImage.vue'
@ -68,6 +68,8 @@ import TabVideo from './components/TabVideo.vue'
import TabNews from './components/TabNews.vue'
import TabMusic from './components/TabMusic.vue'
defineOptions({ name: 'WxReplySelect' })
interface Props {
modelValue: Reply
newsType?: NewsType

View File

@ -48,10 +48,12 @@
</div>
</template>
<script setup lang="ts" name="WxVideoPlayer">
<script setup lang="ts">
import 'video.js/dist/video-js.css'
import { VideoPlayer } from '@videojs-player/vue'
defineOptions({ name: 'WxVideoPlayer' })
const props = defineProps({
url: {
type: String,

View File

@ -23,10 +23,12 @@
</div>
</template>
<script setup lang="ts" name="WxVoicePlayer">
<script setup lang="ts">
// 因为微信语音是 amr 格式,所以需要用到 amr 解码器https://www.npmjs.com/package/benz-amr-recorder
import BenzAMRRecorder from 'benz-amr-recorder'
defineOptions({ name: 'WxVoicePlayer' })
const props = defineProps({
url: {
type: String, // 语音地址例如说https://www.iocoder.cn/xxx.amr

View File

@ -125,12 +125,14 @@
</el-container>
</template>
<script setup lang="ts" name="NewsForm">
<script setup lang="ts">
import { Editor } from '@/components/Editor'
import { createEditorConfig } from '../editor-config'
import CoverSelect from './CoverSelect.vue'
import { type NewsItem, createEmptyNewsItem } from './types'
defineOptions({ name: 'NewsForm' })
const message = useMessage()
const props = defineProps<{

View File

@ -61,7 +61,7 @@
</el-dialog>
</template>
<script setup lang="ts" name="MpDraft">
<script setup lang="ts">
import WxAccountSelect from '@/views/mp/components/wx-account-select'
import * as MpDraftApi from '@/api/mp/draft'
import * as MpFreePublishApi from '@/api/mp/freePublish'
@ -74,6 +74,8 @@ import {
} from './components/'
// import drafts from './mock' // 可以用改本地数据模拟避免API调用超限
defineOptions({ name: 'MpDraft' })
const message = useMessage() // 消息
const accountId = ref(-1)

View File

@ -48,10 +48,13 @@
</ContentWrap>
</template>
<script lang="ts" setup name="MpFreePublish">
<script lang="ts" setup>
import * as FreePublishApi from '@/api/mp/freePublish'
import WxNews from '@/views/mp/components/wx-news'
import WxAccountSelect from '@/views/mp/components/wx-account-select'
defineOptions({ name: 'MpFreePublish' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化
@ -98,7 +101,7 @@ const handleDelete = async (item: any) => {
}
</script>
<style lang="scss" scoped>
@media (min-width: 992px) and (max-width: 1300px) {
@media (width >= 992px) and (width <= 1300px) {
.waterfall {
column-count: 3;
}
@ -108,7 +111,7 @@ const handleDelete = async (item: any) => {
}
}
@media (min-width: 768px) and (max-width: 991px) {
@media (width >= 768px) and (width <= 991px) {
.waterfall {
column-count: 2;
}
@ -118,7 +121,7 @@ const handleDelete = async (item: any) => {
}
}
@media (max-width: 767px) {
@media (width <= 767px) {
.waterfall {
column-count: 1;
}

View File

@ -52,7 +52,7 @@
</ContentWrap>
</template>
<script lang="ts" setup name="MpMenu">
<script lang="ts" setup>
import WxAccountSelect from '@/views/mp/components/wx-account-select'
import MenuEditor from './components/MenuEditor.vue'
import MenuPreviewer from './components/MenuPreviewer.vue'
@ -60,6 +60,8 @@ import * as MpMenuApi from '@/api/mp/menu'
import * as UtilsTree from '@/utils/tree'
import { RawMenu, Menu } from './components/types'
defineOptions({ name: 'MpMenu' })
const message = useMessage() // 消息
const MENU_NOT_SELECTED = '__MENU_NOT_SELECTED__'

View File

@ -79,7 +79,7 @@
<WxMsg :user-id="messageBox.userId" />
</el-dialog>
</template>
<script setup lang="ts" name="MpMessage">
<script setup lang="ts">
import * as MpMessageApi from '@/api/mp/message'
import WxMsg from '@/views/mp/components/wx-msg'
import WxAccountSelect from '@/views/mp/components/wx-account-select'
@ -88,6 +88,8 @@ import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
import { MsgType } from '@/views/mp/components/wx-msg/types'
import type { FormInstance } from 'element-plus'
defineOptions({ name: 'MpMessage' })
const loading = ref(false)
const total = ref(0) // 数据的总页数
const list = ref<any[]>([]) // 当前页的列表数据

View File

@ -73,10 +73,13 @@
</ContentWrap>
</template>
<script setup lang="ts" name="MpStatistics">
<script setup lang="ts">
import { formatDate, addTime, betweenDay, beginOfDay, endOfDay } from '@/utils/formatTime'
import * as StatisticsApi from '@/api/mp/statistics'
import * as MpAccountApi from '@/api/mp/account'
defineOptions({ name: 'MpStatistics' })
const message = useMessage() // 消息弹窗
// 默认开始时间是当前日期-7结束时间是当前日期-1

View File

@ -17,10 +17,12 @@
</template>
</Dialog>
</template>
<script lang="ts" name="MpTagForm" setup>
<script lang="ts" setup>
import * as MpTagApi from '@/api/mp/tag'
import type { FormInstance, FormRules } from 'element-plus'
defineOptions({ name: 'MpTagForm' })
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗

View File

@ -82,12 +82,14 @@
<!-- 表单弹窗添加/修改 -->
<TagForm ref="formRef" @success="getList" />
</template>
<script setup lang="ts" name="MpTag">
<script setup lang="ts">
import { dateFormatter } from '@/utils/formatTime'
import * as MpTagApi from '@/api/mp/tag'
import TagForm from './TagForm.vue'
import WxAccountSelect from '@/views/mp/components/wx-account-select'
defineOptions({ name: 'MpTag' })
const message = useMessage() // 消息弹窗
const { t } = useI18n() // 国际化

View File

@ -30,10 +30,12 @@
</template>
</Dialog>
</template>
<script lang="ts" name="MpUserForm" setup>
<script lang="ts" setup>
import * as MpTagApi from '@/api/mp/tag'
import * as MpUserApi from '@/api/mp/user'
defineOptions({ name: 'MpUserForm' })
const { t } = useI18n() // 国际化
const message = useMessage() // 消息弹窗

View File

@ -99,7 +99,7 @@
<!-- 表单弹窗修改 -->
<UserForm ref="formRef" @success="getList" />
</template>
<script lang="ts" setup name="MpUser">
<script lang="ts" setup>
import { dateFormatter } from '@/utils/formatTime'
import * as MpUserApi from '@/api/mp/user'
import * as MpTagApi from '@/api/mp/tag'
@ -107,6 +107,8 @@ import WxAccountSelect from '@/views/mp/components/wx-account-select'
import type { FormInstance } from 'element-plus'
import UserForm from './UserForm.vue'
defineOptions({ name: 'MpUser' })
const message = useMessage() // 消息
const loading = ref(true) // 列表的加载中