This commit is contained in:
2025-06-17 21:34:59 +08:00
parent 00a055685e
commit 6256cda8bc
17 changed files with 397 additions and 121 deletions

View File

@@ -1,12 +1,17 @@
<script setup>
import {onMounted} from "vue";
import {toPath} from "./utils/index.js";
import {useSystemStore} from "./pinia/SystemStore/index.js";
import {toPath} from "./utils/index.js";
const SystemStore = useSystemStore();
onMounted(() => {
const isRoot = SystemStore.isRoot;
SystemStore.clearRouter().then(() => {
SystemStore.setRouter(isRoot).then(() => {
toPath(SystemStore.NOW_ROUTER, SystemStore.NOW_ROUTER_QUERY);
});
});
});
</script>

View File

@@ -351,6 +351,20 @@ const admin = {
data: {id}
});
},
setTaskTop: async (id, type) => {
return request({
url: '/admin/task/setTaskTop',
method: Method.POST,
data: {id, type}
});
},
setTaskWeigh: async (data) => {
return request({
url: '/admin/task/setTaskWeigh',
method: Method.POST,
data: data
});
},
setNotcieWeigh: async (data) => {
return request({
url: '/admin/notice/weigh',
@@ -672,6 +686,34 @@ const admin = {
data: data,
});
},
getTaskOrderList: async (data) => {
return request({
url: '/admin/Task/getTaskOrderList',
method: Method.POST,
data: data,
});
},
getComplaintList: async (data) => {
return request({
url: '/admin/complaint/getList',
method: Method.POST,
data: data,
});
},
editComplaintStatus: async (data) => {
return request({
url: '/admin/complaint/editStatus',
method: Method.POST,
data: data,
});
},
overview: async (data) => {
return request({
url: '/admin/withdrawal/overview',
method: Method.POST,
data: data,
});
},
}
export default admin;

View File

@@ -554,6 +554,13 @@ const merchant = {
data: {id}
});
},
getEffectLog: async (data) => {
return request({
url: '/index/business/getEffectLog',
method: Method.POST,
data: data
});
},
}
export default merchant;

View File

@@ -24,8 +24,14 @@ const menuItemClick = (e) => {
<icon-apps></icon-apps>
</template>
<template #title>{{ item.title }}</template>
<a-menu-item v-for="k in item.children.filter(v=>!v.meta.hidden)" :key="`/${item.path}/${k.path}`">
<a-menu-item v-for="k in item.children.filter(v=>!v.meta.hidden)"
:key="`/${item.path}/${k.path}`">
<a-badge v-if="k.meta?.num>0" :count="k.meta.num" :offset="[20,5]">
{{ k.title }}
</a-badge>
<template v-else>
{{ k.title }}
</template>
</a-menu-item>
</a-sub-menu>
</template>
@@ -34,7 +40,12 @@ const menuItemClick = (e) => {
<template #icon>
<icon-apps></icon-apps>
</template>
<a-badge v-if="item.meta?.num>0" :count="item.meta.num" :offset="[20,5]">
{{ item.title }}
</a-badge>
<template v-else>
{{ item.title }}
</template>
</a-menu-item>
</template>
</template>

View File

@@ -4,6 +4,7 @@ import {reactive, ref, watch} from 'vue';
import Api from "../../api/index.ts";
import {Message} from "@arco-design/web-vue";
import Comment from "../Comment/index.vue";
import Talk from "../Talk/index.vue";
const emits = defineEmits(['success']);
const {id} = defineProps({
@@ -57,31 +58,26 @@ const refuseTaskChildren = async () => {
<a-form
layout="vertical">
<a-form-item label="标题">
<a-input :model-value="item.title"></a-input>
<a-input v-model:model-value="item.title" :disabled="detail.check_status !== 0"></a-input>
</a-form-item>
<a-form-item label="正文">
<a-textarea
auto-size
:max-length="1000"
show-word-limit
:disabled="detail.check_status !== 0"
:model-value="item.content">
</a-textarea>
</a-form-item>
<a-form-item label="话题">
<div v-if="item.tags_arr.length > 0" id="tag-list"
class="w-full bg-[var(--color-neutral-2)] p-[4px]">
<a-tag v-for="v in item.tags_arr">#{{ v }}</a-tag>
</div>
<div v-else>
暂无话题
</div>
<Talk v-model:model-value="item.tags_arr" :disabled="detail.check_status !== 0"></Talk>
</a-form-item>
<a-form-item label="素材">
<div v-if="item.materia_arr.length > 0" class="flex flex-wrap gap-[16px]">
<x-image
v-for="(v, index) in item.materia_arr"
:hide-delete="true"
:hide-delete="detail.check_status !== 0"
:key="index"
width="60px"
height="60px"
@@ -89,17 +85,14 @@ const refuseTaskChildren = async () => {
</x-image>
</div>
<div v-else>
暂无话题
暂无素材
</div>
</a-form-item>
<a-form-item label="评论区内容">
<div v-if="item.comment.length > 0" class="flex flex-col gap-[8px] w-full">
<div v-if="item?.comment?.length > 0" class="flex flex-col gap-[8px] w-full">
<comment :data="item.comment" :hide-delete="true"></comment>
</div>
<div v-else>
暂无评论区内容
</div>
</a-form-item>
</a-form>
</a-tab-pane>

View File

@@ -1,5 +1,7 @@
<script setup>
const {list, size} = defineProps({
import {ref} from "vue";
const {list, size, preview} = defineProps({
list: {
type: Array,
default: []
@@ -7,17 +9,27 @@ const {list, size} = defineProps({
size: {
type: String,
default: "40px"
},
preview: {
type: Boolean,
default: true,
}
});
const previewVisible = ref(false);
</script>
<template>
<div class="x-image-small-list">
<a-image :width="size" :height="size" :src="list[0]" v-bind="$attrs"></a-image>
<div class="x-image-small-list-mask" v-if="list.length > 1">
<div class="x-image-small-list-mask cursor-pointer" v-if="list.length > 1"
@click="preview?previewVisible=true:null">
+{{ list.length - 1 }}
</div>
</div>
<a-image-preview-group v-model:visible="previewVisible">
<a-image :width="size" :height="size" v-for="v in list" :src="v" v-bind="$attrs" v-show="false"></a-image>
</a-image-preview-group>
</template>
<style scoped lang="scss">

View File

@@ -0,0 +1,73 @@
<script setup>
import {onMounted, reactive} from "vue";
const emits = defineEmits(['change']);
const modelValue = defineModel();
const {api, fieldName, apiPo, init, defaultValue} = defineProps({
api: {
type: Function,
default: async () => {
},
required: true,
},
apiPo: {
type: Object,
default: {}
},
fieldName: {
type: Object,
default: {value: 'id', label: 'name'},
},
init: {
type: Boolean,
default: false,
},
defaultValue: {
type: Number,
default: null,
},
});
const list = reactive([]);
const popupChange = async (visible) => {
if (visible) {
api && api(apiPo).then(({data}) => {
list.length = 0;
list.push(...data);
});
}
}
onMounted(() => {
if (init) api && api(apiPo).then(({data}) => {
list.length = 0;
list.push(...data);
});
});
const handleSelect = (id) => {
modelValue.value = id;
emits('change');
}
</script>
<template>
<a-dropdown @select="handleSelect">
<a-tag v-bind="$attrs" :color="list.find(v => v.id === modelValue)?.color">
<div class="flex gap-[6px] items-center justify-center cursor-pointer">
<div v-if="modelValue===null">请选择</div>
<div v-else>{{ list.find(v => v.id === modelValue)?.name }}</div>
<icon-down/>
</div>
</a-tag>
<template v-slot:content>
<a-doption v-for="v in list" :key="v.id" :value="v.id">
{{ v.name }}
</a-doption>
</template>
</a-dropdown>
</template>
<style scoped lang="scss">
</style>

View File

@@ -23,8 +23,8 @@ const status = computed({
},
})
const change = async () => {
const {msg} = await api(id);
const change = async (e) => {
const {msg} = await api(id, Number(e));
Message.success(msg);
emits('change');
}

View File

@@ -1,30 +1,75 @@
<script setup>
import {onMounted, reactive} from "vue";
import Api from "../../../../api/index.js";
const RADIO_LIST = [
{
label: '累计',
value: 1,
value: 0,
},
{
label: '今日',
value: 2,
value: 1,
},
{
label: '昨日',
value: 3,
value: 2,
},
{
label: '本周',
value: 4,
value: 3,
},
{
label: '本月',
value: 5,
value: 4,
},
{
label: '自定义',
value: 6,
value: 5,
},
];
const po = reactive({
type: 0,
start_time: null,
end_time: null,
});
const data = reactive({
b_withdrawl_all: 0,
b_withdrawl_all2: 0,
b_withdrawl_real: 0,
u_withdrawl_all2: 0,
server: 0,
cha: 0,
complete_money: 0,
b_withdrawl_success: 0,
business: 0,
compute1: 0,
compute2: 0,
recharge: 0,
task: 0,
u_task: 0,
u_income_activity: 0,
u_income_team: 0,
u_withdrawl_all: 0,
u_withdrawl_real: 0,
u_withdrawl_success: 0,
user: 0
});
const overview = async () => {
const {data: _data} = await Api.admin.overview(po);
Object.assign(data, _data);
}
onMounted(() => {
overview();
})
const handleDate = (e) => {
po.start_time = e[0];
po.end_time = e[1];
overview();
}
</script>
<template>
@@ -35,8 +80,8 @@ const RADIO_LIST = [
资金概览
</div>
<div>
<a-radio-group type="button">
<div class="flex gap-[24px]">
<a-radio-group type="button" v-model:model-value="po.type" @change="overview">
<a-radio
v-for="item in RADIO_LIST"
:key="item.value"
@@ -44,6 +89,10 @@ const RADIO_LIST = [
{{ item.label }}
</a-radio>
</a-radio-group>
<a-range-picker
v-if="po.type === 5"
@change="handleDate"
/>
</div>
</div>
@@ -51,7 +100,7 @@ const RADIO_LIST = [
<div
class="bg-[rgb(var(--arcoblue-1))] hover:bg-[rgb(var(--arcoblue-5))] duration-500 p-[20px] statistic-item">
<a-statistic
:value="8.06"
:value="data.recharge"
:precision="2"
:value-from="0"
animation>
@@ -63,7 +112,7 @@ const RADIO_LIST = [
<div
class="bg-[rgb(var(--arcoblue-1))] hover:bg-[rgb(var(--arcoblue-5))] duration-500 p-[20px] statistic-item">
<a-statistic
:value="8.06"
:value="data.task"
:precision="2"
:value-from="0"
animation>
@@ -75,7 +124,7 @@ const RADIO_LIST = [
<div
class="bg-[rgb(var(--arcoblue-1))] hover:bg-[rgb(var(--arcoblue-5))] duration-500 p-[20px] statistic-item">
<a-statistic
:value="8.06"
:value="data.business"
:precision="2"
:value-from="0"
animation>
@@ -87,7 +136,7 @@ const RADIO_LIST = [
<div
class="bg-[rgb(var(--arcoblue-1))] hover:bg-[rgb(var(--arcoblue-5))] duration-500 p-[20px] statistic-item">
<a-statistic
:value="8.06"
:value="data.user"
:precision="2"
:value-from="0"
animation>
@@ -98,7 +147,7 @@ const RADIO_LIST = [
</div>
<div class="bg-[rgb(var(--orange-1))] hover:bg-[rgb(var(--orange-5))] duration-500 p-[20px] statistic-item">
<a-statistic
:value="8.06"
:value="data.compute1"
:precision="2"
:value-from="0"
animation>
@@ -109,7 +158,7 @@ const RADIO_LIST = [
</div>
<div class="bg-[rgb(var(--orange-1))] hover:bg-[rgb(var(--orange-5))] duration-500 p-[20px] statistic-item">
<a-statistic
:value="8.06"
:value="data.compute2"
:precision="2"
:value-from="0"
animation>
@@ -134,7 +183,7 @@ const RADIO_LIST = [
:value-from="0"
animation>
<template #title>
家充值含服务款
户1剩余
</template>
</a-statistic>
</div>
@@ -145,7 +194,7 @@ const RADIO_LIST = [
:value-from="0"
animation>
<template #title>
家充值含服务款
户2剩余
</template>
</a-statistic>
</div>
@@ -163,19 +212,19 @@ const RADIO_LIST = [
<template #label>
<div class="label">任务款已消耗</div>
</template>
<div class="value">60.00</div>
<div class="value">{{ data.complete_money.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">任务服务费盈利</div>
</template>
<div class="value">6.00</div>
<div class="value">{{ data.server.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">任务差额盈利</div>
</template>
<div class="value">30.00</div>
<div class="value">{{ data.cha.toFixed(2) }}</div>
</a-descriptions-item>
</a-descriptions>
</div>
@@ -189,19 +238,19 @@ const RADIO_LIST = [
<template #label>
<div class="label">商家发起提现</div>
</template>
<div class="value">60.00</div>
<div class="value">{{ data.b_withdrawl_all.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家提现手续费</div>
</template>
<div class="value">6.00</div>
<div class="value">{{ data.b_withdrawl_all2.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家提现到手</div>
</template>
<div class="value">30.00</div>
<div class="value">{{ data.b_withdrawl_real.toFixed(2) }}</div>
</a-descriptions-item>
</a-descriptions>
</div>
@@ -215,39 +264,39 @@ const RADIO_LIST = [
<a-descriptions table-layout="fixed" :column="2">
<a-descriptions-item>
<template #label>
<div class="label">商家发起提现</div>
<div class="label">团队激励所得</div>
</template>
<div class="value">60.00</div>
<div class="value">{{ data.u_income_team.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家提现手续费</div>
<div class="label">达人发起提现</div>
</template>
<div class="value">6.00</div>
<div class="value">{{ data.u_withdrawl_all.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家提现到手</div>
<div class="label">活动奖励所得</div>
</template>
<div class="value">30.00</div>
<div class="value">{{ data.u_income_activity.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家发起提现</div>
<div class="label">达人提现手续费</div>
</template>
<div class="value">60.00</div>
<div class="value">{{ data.u_withdrawl_all2.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家提现手续费</div>
<div class="label">完成任务所得</div>
</template>
<div class="value">6.00</div>
<div class="value">{{ data.u_task.toFixed(2) }}</div>
</a-descriptions-item>
<a-descriptions-item>
<template #label>
<div class="label">商家提现到手</div>
<div class="label">达人提现到手</div>
</template>
<div class="value">30.00</div>
<div class="value">{{ data.u_withdrawl_real.toFixed(2) }}</div>
</a-descriptions-item>
</a-descriptions>
</a-card>
@@ -261,7 +310,7 @@ const RADIO_LIST = [
&:hover {
:deep(.arco-statistic) {
.arco-statistic-title,
.arco-statistic-content>.arco-statistic-value {
.arco-statistic-content > .arco-statistic-value {
color: #fff;
}
}
@@ -269,7 +318,7 @@ const RADIO_LIST = [
:deep(.arco-statistic) {
.arco-statistic-title,
.arco-statistic-content>.arco-statistic-value {
.arco-statistic-content > .arco-statistic-value {
transition: 500ms;
}
}

View File

@@ -3,44 +3,45 @@ import {reactive} from "vue";
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
import SequenceAdjustment from "../../../../components/SequenceAdjustment/index.vue";
import XSwitch from "../../../../components/XSwitch/index.vue";
const columns = [
{
title: '任务编号',
dataIndex: 'key',
dataIndex: 'code',
},
{
title: '任务名称',
dataIndex: 'key',
dataIndex: 'goods_intro',
},
{
title: '发布渠道',
dataIndex: 'key',
dataIndex: 'platform',
},
{
title: '创建时间',
dataIndex: 'key',
dataIndex: 'createtime',
},
{
title: '子任务数',
dataIndex: 'key',
dataIndex: 'children_num',
},
{
title: '子任务报价',
dataIndex: 'key',
dataIndex: 'children_price',
},
{
title: '商家ID',
dataIndex: 'key',
dataIndex: 'b_uid',
},
{
title: '平台报价',
dataIndex: 'key',
dataIndex: 'real_price',
},
{
title: '是否置顶',
dataIndex: 'topUp',
slotName: 'topUp',
dataIndex: 'is_hot',
slotName: 'is_hot',
width: 100,
align: 'center',
},
@@ -59,9 +60,9 @@ const vo = reactive({
total: 0,
});
const {loading, pagination, initFetchData} = useTableQuery({
const {loading, pagination, fetchData} = useTableQuery({
parameter: po,
api: Api.system.getData,
api: Api.admin.getTaskOrderList,
callback: (data) => {
Object.assign(vo, data);
}
@@ -79,11 +80,20 @@ const {loading, pagination, initFetchData} = useTableQuery({
:data="vo.rows"
:columns="columns"
class="flex-grow">
<template v-slot:topUp>
<a-switch></a-switch>
<template v-slot:is_hot="{record}">
<x-switch
v-model:model-value="record.is_hot"
:id="record.id"
:api="Api.admin.setTaskTop"
@change="fetchData">
</x-switch>
</template>
<template v-slot:action>
<SequenceAdjustment></SequenceAdjustment>
<template v-slot:action="{record}">
<SequenceAdjustment
:id="record.id"
@success="fetchData"
:api="Api.admin.setTaskWeigh">
</SequenceAdjustment>
</template>
</a-table>
</a-card>

View File

@@ -1,7 +1,10 @@
<script setup>
import {reactive} from "vue";
import {reactive, ref} from "vue";
import useTableQuery from "../../../../hooks/useTableQuery.js";
import Api from "../../../../api/index.js";
import XImageSmallList from "../../../../components/XImage/XImageSmallList.vue";
import XTagSelect from "../../../../components/XSelect/XTagSelect.vue";
import {Message} from "@arco-design/web-vue";
const columns = [
{
@@ -11,20 +14,21 @@ const columns = [
},
{
title: '达人ID',
dataIndex: 'key',
dataIndex: 'uid',
width: 120,
},
{
title: '投诉截图',
dataIndex: 'key',
dataIndex: 'image',
slotName: 'image',
},
{
title: '投诉内容',
dataIndex: 'key',
dataIndex: 'intro',
},
{
title: '联系方式',
dataIndex: 'key',
dataIndex: 'mobile',
width: 150,
},
{
@@ -34,7 +38,12 @@ const columns = [
width: 120,
},
];
const selectedKeys = ref([]);
const rowSelection = reactive({
type: 'checkbox',
showCheckedAll: true,
onlyCurrent: false,
});
const po = reactive({});
const vo = reactive({
page: '',
@@ -42,13 +51,46 @@ const vo = reactive({
total: 0,
});
const {loading, pagination, initFetchData} = useTableQuery({
const {loading, pagination, initFetchData, fetchData} = useTableQuery({
parameter: po,
api: Api.system.getData,
api: Api.admin.getComplaintList,
callback: (data) => {
Object.assign(vo, data);
}
});
const getActionList = () => Promise.resolve({
data: [
{
id: 0,
name: '待处理',
color: 'cyan',
},
{
id: 1,
name: '已处理',
color: 'green',
},
]
});
const changeStatus = async (item) => {
const {msg} = await Api.admin.editComplaintStatus({
ids: [item.id],
status: item.status,
});
Message.success(msg);
await fetchData();
}
const handleStatus = async (status) => {
const {msg} = await Api.admin.editComplaintStatus({
ids: selectedKeys.value,
status: status,
});
Message.success(msg);
await fetchData();
}
</script>
<template>
@@ -59,29 +101,41 @@ const {loading, pagination, initFetchData} = useTableQuery({
</div>
<div class="flex gap-[16px] mb-[16px]">
<a-button type="primary">
<a-button type="primary" @click="handleStatus(1)">
<template #icon>
<icon-check/>
</template>
批量已处理
</a-button>
<a-button type="primary">
<a-button type="primary" @click="handleStatus(0)">
<template #icon>
<icon-clock-circle/>
</template>
批量处理
批量处理
</a-button>
</div>
<a-table
:loading="loading"
v-model:selectedKeys="selectedKeys"
:row-selection="rowSelection"
@page-change="(e) => pagination.current = e"
:pagination="pagination"
:data="vo.rows"
:columns="columns"
class="flex-grow">
<template v-slot:action>
<template v-slot:image="{record}">
<x-image-small-list
:list="record.images_arr">
</x-image-small-list>
</template>
<template v-slot:action="{record}">
<x-tag-select
@change="changeStatus(record)"
:api="getActionList"
:init="true"
v-model:model-value="record.status">
</x-tag-select>
</template>
</a-table>
</a-card>

View File

@@ -132,8 +132,18 @@ const {loading, pagination, initFetchData} = useTableQuery({
<a-tabs class="pt-[20px]" type="rounded" v-model:active-key="po.status" @change="initFetchData">
<a-tab-pane title="待回复" :key="0">
<template v-slot:title v-if="vo.count1">
<a-badge :count="vo.count1" :offset="[15,-10]">
待回复
</a-badge>
</template>
</a-tab-pane>
<a-tab-pane title="已完成" :key="1">
<template v-slot:title v-if="vo.count2">
<a-badge :count="vo.count2" :offset="[15,-10]">
已完成
</a-badge>
</template>
</a-tab-pane>
</a-tabs>
@@ -159,7 +169,7 @@ const {loading, pagination, initFetchData} = useTableQuery({
<look-backfill-modal></look-backfill-modal>
</template>
<template v-slot:drfk="{record}">
<a-badge :count="9" dot :dotStyle="{ width: '10px', height: '10px' }">
<a-badge :count="record.is_read" dot :dotStyle="{ width: '10px', height: '10px' }">
<a-link :hoverable="false" @click="async () => {
state.showChat = true;
const {data} = await Api.merchant.getChildrenInfo(record.id);
@@ -183,6 +193,12 @@ const {loading, pagination, initFetchData} = useTableQuery({
</Chat>
</template>
<style scoped>
<style lang="scss">
.arco-tabs-nav {
overflow: visible;
.arco-tabs-nav-tab {
overflow: visible;
}
}
</style>

View File

@@ -6,23 +6,23 @@ import Api from "../../../../api/index.js";
const columns = [
{
title: '处理ID',
dataIndex: 'value'
dataIndex: 'code'
},
{
title: '处理时间',
dataIndex: 'value'
dataIndex: 'complete_time'
},
{
title: '处理结果',
dataIndex: 'value'
dataIndex: 'remark'
},
{
title: '处理原因',
dataIndex: 'value'
dataIndex: 'intro'
},
{
title: '申诉状态',
dataIndex: 'value'
dataIndex: 'status_text'
},
{
title: '操作',
@@ -43,10 +43,9 @@ const po = reactive({
const {loading, pagination, fetchData} = useTableQuery({
parameter: po,
api: Api.system.getData,
api: Api.merchant.getEffectLog,
callback: (data) => {
Object.assign(vo, data);
console.log(vo);
}
});
</script>

View File

@@ -91,7 +91,8 @@ onMounted(() => {
end_time: dayjs(v.end_time * 1000).format('YYYY-MM-DD HH:mm:ss'),
}));
form.settltment_before = data.before.map(v => ({...v, ratio: Number(v.ratio)}));
form.settlement_after = data.settlement_after.map(v => Number(v));
form.settlement_after = data.settlement_after?.map(v => Number(v));
form.special_images = data.special_images_arr;
});
})

View File

@@ -25,6 +25,7 @@ export const useSystemStore = defineStore("SystemStore", () => {
const setRouter = async (_isRoot) => {
isRoot.value = _isRoot;
console.log('我看看啥权限', _isRoot);
RoutesTemp.value.length = 0;

View File

@@ -15,8 +15,6 @@ router.beforeEach((to, from, next) => {
if (!isLogin && !to.path.includes('loginSYS')) {
next({path: '/loginSYS'});
} else {
SystemStore.NOW_ROUTER = to.path;
Object.assign(SystemStore.NOW_ROUTER_QUERY, to.query);
next();
}
});

View File

@@ -1,9 +1,14 @@
import router from "../router/index.js";
import {useSystemStore} from "../pinia/SystemStore/index.js";
export const toPath = (path, query = {}) => {
router.push({
path: path, query: query
}).then();
}).then(() => {
const SystemStore = useSystemStore();
SystemStore.NOW_ROUTER = path;
Object.assign(SystemStore.NOW_ROUTER_QUERY, query);
});
}
export const VITE_TINYMCE_KEY = () => {