This commit is contained in:
yziiy
2025-11-21 16:52:13 +08:00
parent bd16cb7cb9
commit 7ebaee8ccd
6 changed files with 125 additions and 14 deletions

View File

@@ -1,6 +1,6 @@
export const URL = "https://vespa.qxyushen.top"; export const URL = "https://test.vespa.qxyushen.top";
// https://vespa.qxyushen.top 正式 // https://vespa.qxyushen.top 正式
// http://1.13.101.98 // http://1.13.101.98
// https://test.vespa.xscmmidi.site // https://test.vespa.qxyushen.top
// 声网appId 在这里换 // 声网appId 在这里换
export const appIdBySw = '02f7339ec98947deaeab173599891932'; export const appIdBySw = '02f7339ec98947deaeab173599891932';

View File

@@ -40,6 +40,9 @@ const getTypeList = async () => {
function handlePlayFile(list) { function handlePlayFile(list) {
newFormInline.value.play_image = list.join(',') newFormInline.value.play_image = list.join(',')
} }
function handlePlayFileSuccess(list) {
newFormInline.value.play_image = list.join(',')
}
onMounted(() => { onMounted(() => {
getTypeList() getTypeList()
}) })
@@ -88,6 +91,11 @@ defineExpose({ getRef });
:limit="1" :echoUrl="newFormInline.play_image" /> :limit="1" :echoUrl="newFormInline.play_image" />
</el-form-item> </el-form-item>
</template> </template>
<template v-if="[10, 11].includes(newFormInline.type)">
<el-form-item label="播放图像" prop="play_image">
<uploadImage @handleSuccess="handlePlayFileSuccess" :acceptType="'.mp4'" :limit="1"
:echoUrl="newFormInline.play_image" />
</el-form-item>
</template>
</el-form> </el-form>
</template> </template>

View File

@@ -55,13 +55,28 @@ const getAdornmentList = async () => {
} }
const AvatarList = ref([]) const AvatarList = ref([])
const getAvatarList = async () => { const getAvatarList = async () => {
// 坐骑是2 头像框是3 // 坐骑是2 头像框是3 特效10 装扮11
const { data, code } = await queryAdornmentList({ type: 1 }) const { data, code } = await queryAdornmentList({ type: 1 })
AvatarList.value = code ? data : [] AvatarList.value = code ? data : []
} }
const SpecialList = ref([])
const getSpecialList = async () => {
// 坐骑是2 头像框是3 特效10 装扮11
const { data, code } = await queryAdornmentList({ type: 10 })
SpecialList.value = code ? data : []
}
const dressList = ref([])
const getDressList = async () => {
// 坐骑是2 头像框是3 特效10 装扮11
const { data, code } = await queryAdornmentList({ type: 11 })
dressList.value = code ? data : []
}
// 特效
onBeforeMount(() => { onBeforeMount(() => {
getAdornmentList() getAdornmentList()
getAvatarList() getAvatarList()
getSpecialList()
getDressList()
}) })
defineExpose({ getRef }); defineExpose({ getRef });
</script> </script>
@@ -81,12 +96,20 @@ defineExpose({ getRef });
<el-form-item label="升级所需经验值" prop="change_value"> <el-form-item label="升级所需经验值" prop="change_value">
<el-input-number v-model="newFormInline.change_value"></el-input-number> <el-input-number v-model="newFormInline.change_value"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="CP特效" prop="rights_icon"> <el-form-item label="CP特效" prop="rights_icon_id">
<uploadImage @handleSuccess="handleIconSuccess" :acceptType="'.mp4'" :limit="1" <el-select v-model="newFormInline.rights_icon_id" placeholder="请选择CP特效">
:echoUrl="newFormInline.rights_icon" /> <el-option v-for="item in SpecialList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<!-- <uploadImage @handleSuccess="handleIconSuccess" :acceptType="'.mp4'" :limit="1"
:echoUrl="newFormInline.rights_icon" /> -->
</el-form-item> </el-form-item>
<el-form-item label="CP装扮" prop="pendant"> <el-form-item label="CP装扮" prop="pendant_id">
<uploadImage @handleSuccess="handleBgSuccess" :acceptType="'.mp4'" :limit="1" :echoUrl="newFormInline.pendant" /> <el-select v-model="newFormInline.pendant_id" placeholder="请选择CP装扮">
<el-option v-for="item in dressList" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
<!-- <uploadImage @handleSuccess="handleBgSuccess" :acceptType="'.mp4'" :limit="1" :echoUrl="newFormInline.pendant" /> -->
</el-form-item> </el-form-item>
<el-form-item label="头像框" prop="dress_id"> <el-form-item label="头像框" prop="dress_id">
<el-select v-model="newFormInline.dress_id" placeholder="请选择头像框"> <el-select v-model="newFormInline.dress_id" placeholder="请选择头像框">

View File

@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { ref, h, onMounted } from "vue"; import { ref, h, onMounted } from "vue";
import selectUser from './selectUser.vue'; import selectUser from './selectUser.vue';
import selectUniconView from './selectUnicon.vue';
import { getRoomList } from '@/api/modules/message'; import { getRoomList } from '@/api/modules/message';
import { addDialog } from "@/components/ReDialog"; import { addDialog } from "@/components/ReDialog";
import { useRenderIcon } from "@/components/ReIcon/src/hooks"; import { useRenderIcon } from "@/components/ReIcon/src/hooks";
@@ -22,6 +23,7 @@ const formRules = ref({
}); });
const formRef = ref(null) const formRef = ref(null)
const selectUserData = ref([]) const selectUserData = ref([])
const selectUnicon = ref([])
const props = defineProps(["formInline"]); const props = defineProps(["formInline"]);
const newFormInline = ref( const newFormInline = ref(
props.formInline props.formInline
@@ -66,6 +68,22 @@ function addUser() {
} }
}); });
} }
function addUnicon() {
addDialog({
title: `关联工会`,
width: "40%",
props: {
uniconList: selectUnicon.value
},
closeOnClickModal: false,
contentRenderer: () => h(selectUniconView, { ref: formRef, formInline: null }),
beforeSure: (done, { options }) => {
selectUnicon.value = formRef.value.getRef();
newFormInline.value.receiving_id = selectUnicon.value.length ? selectUnicon.value.map(ele => { return ele.id }).join(',') : []
done()
}
});
}
onMounted(() => { onMounted(() => {
if (newFormInline.value.receiving_id) selectUserData.value = newFormInline.value.receiving_id.split(',') if (newFormInline.value.receiving_id) selectUserData.value = newFormInline.value.receiving_id.split(',')
getAllRoomList() getAllRoomList()
@@ -77,20 +95,25 @@ defineExpose({ getRef });
<el-form ref="ruleFormRef" :model="newFormInline" :rules="formRules" label-width="120px"> <el-form ref="ruleFormRef" :model="newFormInline" :rules="formRules" label-width="120px">
<el-form-item label="消息栏目" prop="messageType"> <el-form-item label="消息栏目" prop="messageType">
<el-select v-model="newFormInline.messageType" placeholder="请选择"> <el-select v-model="newFormInline.messageType" placeholder="请选择">
<el-option v-for="item in [{ value: 1, label: '系统消息' }, { value: 2, label: '官方公告' }]" :key="item.value" <el-option
:label="item.label" :value="item.value"> v-for="item in [{ value: 1, label: '系统消息' }, { value: 2, label: '官方公告' }, { value: 5, label: '工会通知' }]"
:key="item.value" :label="item.label" :value="item.value">
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- 系统消息 --> <!-- 系统消息 -->
<template v-if="newFormInline.messageType === 1"> <template v-if="[1, 5].includes(newFormInline.messageType)">
<el-form-item label="消息标题" prop="title"> <el-form-item label="消息标题" prop="title">
<el-input v-model="newFormInline.title" clearable placeholder="请输入消息标题" /> <el-input v-model="newFormInline.title" clearable placeholder="请输入消息标题" />
</el-form-item> </el-form-item>
<el-form-item label="接收对象" prop="receiving_id"> <el-form-item label="接收对象" prop="receiving_id" v-if="newFormInline.messageType !== 5">
<span class="mr-5" v-if="selectUserData.length">已选择关联{{ selectUserData.length }}个用户</span> <span class="mr-5" v-if="selectUserData.length">已选择关联{{ selectUserData.length }}个用户</span>
<el-button :icon="useRenderIcon(AddFill)" @click="addUser">关联用户</el-button> <el-button :icon="useRenderIcon(AddFill)" @click="addUser">关联用户</el-button>
</el-form-item> </el-form-item>
<el-form-item label="接收对象" prop="receiving_id" v-else>
<span class="mr-5" v-if="selectUnicon.length">已选择关联{{ selectUnicon.length }}个工会</span>
<el-button :icon="useRenderIcon(AddFill)" @click="addUnicon">关联工会</el-button>
</el-form-item>
<el-form-item label="消息内容" prop="content"> <el-form-item label="消息内容" prop="content">
<RichText style="border: 1px solid #ccc;" :echoValue="newFormInline.content" @changeValue="chanageEditorValue"> <RichText style="border: 1px solid #ccc;" :echoValue="newFormInline.content" @changeValue="chanageEditorValue">
</RichText> </RichText>

View File

@@ -0,0 +1,57 @@
<script setup lang="ts">
import { ref, onMounted } from "vue";
import SearchForm from "@/components/SearchForm/index.vue";
import { queryUnionList } from '@/api/modules/union'
const selectUserList = ref([]);
const userList = ref([])
function getRef() {
return selectUserList.value;
}
const loading = ref(true)
const searchLabel = ref([
{ label: "工会ID", prop: "search_id", type: "input" }
]);
const searchForm = ref({})
const multipleTable = ref(null)
const onSearch = (formData) => {
userList.value = []
selectUserList.value = []
getAllUserList(formData)
}
const props = defineProps(["uniconList"]);
const getAllUserList = async (form) => {
const { code, data } = await queryUnionList({ ...form, page_limit: 10000 })
userList.value = code ? data.list.filter(ele => { return ele.status === 1 }) : []
setTimeout(() => {
console.log(props.uniconList)
if (userList.value.length) {
userList.value.forEach(ele => {
const listData = props.uniconList.map(e => { return Number(e.id) })
if (listData.includes(ele.id)) {
multipleTable.value.toggleRowSelection(ele, true)
}
})
}
loading.value = false
}, 500)
}
function handleSelectionChange(val) {
selectUserList.value = val
}
onMounted(() => {
getAllUserList(searchForm.value)
})
defineExpose({ getRef });
</script>
<template>
<div style="margin-bottom: 20px;">
<SearchForm class="pb-2" :LabelList="searchLabel" :formData="searchForm" @handleSearch="onSearch"></SearchForm>
<el-table v-loading="loading" ref="multipleTable" :data="userList" row-key="id" border style="width: 100%"
max-height="550" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55">
</el-table-column>
<el-table-column prop="guild_name" label="用户名">
</el-table-column>
</el-table>
</div>
</template>

View File

@@ -38,7 +38,7 @@ export default ({ mode }: ConfigEnv): UserConfigExport => {
// 设置CORS头 https://admin.qxyushen.top // 设置CORS头 https://admin.qxyushen.top
// https://test.vespa.qxyushen.top // https://test.vespa.qxyushen.top
// 'http://admin.vespa.xscmmidi.site' // 'http://admin.vespa.xscmmidi.site'
res.setHeader('Access-Control-Allow-Origin', 'http://admin.vespa.xscmmidi.site'); res.setHeader('Access-Control-Allow-Origin', 'http://test.admin.qxyushen.top');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.end(); res.end();