fix: 挂账管理更新,邀请列表更新,店铺配置更新
This commit is contained in:
215
src/views/shop/config/components/notifications.vue
Normal file
215
src/views/shop/config/components/notifications.vue
Normal file
@@ -0,0 +1,215 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-button v-if="url" type="primary" @click="dialogVisible = true" style="margin-bottom: 28px">
|
||||
订阅消息
|
||||
</el-button>
|
||||
<el-dialog title="提示" v-model="dialogVisible" width="30%" :before-close="handleClose">
|
||||
<div style="width: 100%; text-align: center">
|
||||
<el-image style="width: 200px; height: 200px" :src="url"></el-image>
|
||||
</div>
|
||||
<div style="text-align: center">使用微信扫描二维码绑定订阅消息</div>
|
||||
<template #footer>
|
||||
<span class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="downloadUrl">下载</el-button>
|
||||
</span>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<div class="head-container" id="table_drag">
|
||||
<el-table ref="table" :data="tableData.data" v-loading="tableData.loading" row-key="id">
|
||||
<el-table-column label="头像">
|
||||
<template v-slot="scope">
|
||||
<div class="shop_info">
|
||||
<el-image
|
||||
:src="scope.row.avatar"
|
||||
style="width: 50px; height: 50px; border-radius: 4px; background-color: #efefef"
|
||||
>
|
||||
<template #error>
|
||||
<div class="img_error">
|
||||
<i class="icon el-icon-document-delete"></i>
|
||||
</div>
|
||||
</template>
|
||||
</el-image>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="昵称" prop="nickname"></el-table-column>
|
||||
<el-table-column label="商品库存预警" prop="createdAt">
|
||||
<template v-slot="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.proState"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change="changeHot(scope.row.proState, 0, scope.row.openId)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="耗材库存预警" prop="createdAt">
|
||||
<template v-slot="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.conState"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change="changeHot(scope.row.conState, 1, scope.row.openId)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作商品" prop="createdAt">
|
||||
<template v-slot="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.opeState"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change="changeHot(scope.row.opeState, 2, scope.row.openId)"
|
||||
></el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200">
|
||||
<template v-slot="scope">
|
||||
<el-popconfirm title="确定解绑吗?" @confirm="delTableHandle(scope.row.openId)">
|
||||
<template #reference>
|
||||
<el-button type="text">解绑</el-button>
|
||||
</template>
|
||||
</el-popconfirm>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="head-container">
|
||||
<el-pagination
|
||||
:total="tableData.total"
|
||||
:current-page="tableData.page"
|
||||
:page-size="tableData.size"
|
||||
@current-change="paginationChange"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
></el-pagination>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import shopMsgPushApi from "@/api/account/shopMsgPush";
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
test: "1",
|
||||
tableData: {
|
||||
data: [],
|
||||
page: 1,
|
||||
size: 30,
|
||||
loading: false,
|
||||
total: 0,
|
||||
},
|
||||
alldata: {
|
||||
allState: 0,
|
||||
conState: 0,
|
||||
opeState: 0,
|
||||
stockState: 0,
|
||||
},
|
||||
url: "",
|
||||
dialogVisible: false,
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.getTableData();
|
||||
this.getlist();
|
||||
this.getsubQrCode();
|
||||
},
|
||||
methods: {
|
||||
downloadUrl() {
|
||||
let link = document.createElement("a");
|
||||
//创建一个a标签
|
||||
link.style.display = "none";
|
||||
//将a标签隐藏
|
||||
link.href = this.url;
|
||||
document.body.appendChild(link);
|
||||
//将上面创建的a标签加入到body的尾部
|
||||
link.click();
|
||||
//执行a标签
|
||||
this.dialogVisible = false;
|
||||
},
|
||||
// 二维码
|
||||
async getsubQrCode() {
|
||||
let res = await shopMsgPushApi.code({
|
||||
shopId: localStorage.getItem("shopId"),
|
||||
});
|
||||
this.url = res;
|
||||
},
|
||||
async getlist() {
|
||||
let res = await state({
|
||||
shopId: localStorage.getItem("shopId"),
|
||||
});
|
||||
this.alldata = res;
|
||||
},
|
||||
async changeEvent(state, type) {
|
||||
let res = await shopState({
|
||||
shopId: localStorage.getItem("shopId"),
|
||||
type,
|
||||
state,
|
||||
});
|
||||
},
|
||||
// 设置消息推送
|
||||
async changeHot(row, index, openId) {
|
||||
// index 0商品库存 1耗材 2操作商品
|
||||
let obj = {
|
||||
shopId: localStorage.getItem("shopId"),
|
||||
type: index,
|
||||
state: row,
|
||||
openId,
|
||||
};
|
||||
let res = await msginfo(obj);
|
||||
this.$message.success("修改成功!");
|
||||
this.getTableData();
|
||||
},
|
||||
// 分页回调
|
||||
paginationChange(e) {
|
||||
this.tableData.page = e;
|
||||
this.getTableData();
|
||||
},
|
||||
async getTableData() {
|
||||
try {
|
||||
this.tableData.loading = true;
|
||||
const res = await shopMsgPushApi.getUserList({
|
||||
page: this.tableData.page,
|
||||
size: this.tableData.size,
|
||||
});
|
||||
this.tableData.loading = false;
|
||||
this.tableData.data = res.records;
|
||||
this.tableData.total = res.total;
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
},
|
||||
|
||||
// 删除商品
|
||||
async delTableHandle(ids) {
|
||||
try {
|
||||
await shopMsgPushApi.shopStateDel({
|
||||
openId: ids,
|
||||
});
|
||||
this.getTableData();
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.shop_info {
|
||||
display: flex;
|
||||
|
||||
.info {
|
||||
flex: 1;
|
||||
padding-left: 8px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
.tag_wrap {
|
||||
display: flex;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -9,8 +9,8 @@
|
||||
</el-tabs>
|
||||
<shopInfo v-if="activeName == 1" />
|
||||
<safe v-if="activeName == 4" />
|
||||
<!-- <goxcx v-if="activeName == 6" />
|
||||
<notifications v-if="activeName == 7" /> -->
|
||||
<notifications v-if="activeName == 7" />
|
||||
<!-- <goxcx v-if="activeName == 6" />-->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -18,6 +18,7 @@
|
||||
<script setup>
|
||||
import shopInfo from "./components/shopInfo.vue";
|
||||
import safe from "./components/safe.vue";
|
||||
import notifications from "./components/notifications.vue";
|
||||
|
||||
const state = reactive({
|
||||
activeName: "1",
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<template></template>
|
||||
77
src/views/shop/log/config/add.ts
Normal file
77
src/views/shop/log/config/add.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import Api from "@/api/product/vendor";
|
||||
import { returnOptions, switchAttr } from "./config";
|
||||
import type { IModalConfig } from "@/components/CURD/types";
|
||||
|
||||
const modalConfig: IModalConfig = {
|
||||
pageName: "sys:user",
|
||||
dialog: {
|
||||
title: "添加供应商",
|
||||
width: 800,
|
||||
draggable: true,
|
||||
},
|
||||
form: {
|
||||
labelWidth: 140,
|
||||
},
|
||||
formAction: function (data) {
|
||||
return Api.add({ ...data });
|
||||
},
|
||||
beforeSubmit(data) {
|
||||
console.log("提交之前处理", data);
|
||||
},
|
||||
formItems: [
|
||||
|
||||
{
|
||||
label: "名称",
|
||||
prop: "name",
|
||||
rules: [{ required: true, message: "请输入名称", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入名称",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "联系人名字",
|
||||
prop: "contactName",
|
||||
rules: [{ required: false, message: "请输入联系人名字", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入联系人名字",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "联系人电话",
|
||||
prop: "telephone",
|
||||
rules: [{ required: false, message: "请输入联系人名字", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入联系人名字",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "供应商地址",
|
||||
prop: "address",
|
||||
rules: [{ required: false, message: "请输入供应商地址", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入供应商地址",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
prop: "remark",
|
||||
rules: [{ required: false, message: "请输入备注", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入备注",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "排序",
|
||||
prop: "sort",
|
||||
rules: [{ required: true, message: "请输入排序", trigger: "blur" }],
|
||||
type: "input-number",
|
||||
attrs: {
|
||||
placeholder: "请输入排序",
|
||||
},
|
||||
},
|
||||
|
||||
],
|
||||
};
|
||||
|
||||
// 如果有异步数据会修改配置的,推荐用reactive包裹,而纯静态配置的可以直接导出
|
||||
export default reactive(modalConfig);
|
||||
36
src/views/shop/log/config/config.ts
Normal file
36
src/views/shop/log/config/config.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
export interface options {
|
||||
label: string;
|
||||
value: string | number;
|
||||
[property: string]: any;
|
||||
}
|
||||
export interface optionObject {
|
||||
[property: string]: options[];
|
||||
}
|
||||
const options: optionObject = {
|
||||
type: [
|
||||
{ label: "正常日志", value: "info" },
|
||||
{ label: "异常日志", value: "error" },
|
||||
],
|
||||
};
|
||||
|
||||
export const switchAttr = {
|
||||
"active-value": 1,
|
||||
"inactive-value": 0,
|
||||
}
|
||||
|
||||
|
||||
export type optionsType = string;
|
||||
|
||||
export function returnOptions(type: optionsType) {
|
||||
return options[type];
|
||||
}
|
||||
|
||||
export function returnOptionsLabel(optionsType: optionsType, value: string | number) {
|
||||
const options = returnOptions(optionsType);
|
||||
if (!options) {
|
||||
return "";
|
||||
}
|
||||
const option = options.find((item) => item.value === value);
|
||||
return option ? option.label : "";
|
||||
}
|
||||
|
||||
87
src/views/shop/log/config/content.ts
Normal file
87
src/views/shop/log/config/content.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import Api from "@/api/system/log";
|
||||
import type { IContentConfig } from "@/components/CURD/types";
|
||||
import dayjs from "dayjs";
|
||||
import { returnOptions } from './config'
|
||||
const contentConfig: IContentConfig = {
|
||||
pageName: "sys:user",
|
||||
table: {
|
||||
border: true,
|
||||
highlightCurrentRow: true,
|
||||
},
|
||||
pagination: {
|
||||
background: true,
|
||||
layout: "prev,pager,next,jumper,total,sizes",
|
||||
pageSize: 20,
|
||||
pageSizes: [10, 20, 30, 50],
|
||||
},
|
||||
indexAction: function (params) {
|
||||
let [startTime, endTime] = params.createTime || []
|
||||
if (startTime && endTime) {
|
||||
delete params.createTime;
|
||||
return Api.getList({ ...params, startTime: dayjs(startTime).format('YYYY-MM-DD'), endTime: dayjs(endTime).format('YYYY-MM-DD') });
|
||||
}
|
||||
return Api.getList(params);
|
||||
},
|
||||
pk: "id",
|
||||
toolbar: [
|
||||
{
|
||||
auth: '',
|
||||
text: '清空',
|
||||
name: 'clear',
|
||||
icon: 'delete',
|
||||
type: 'danger'
|
||||
},
|
||||
|
||||
],
|
||||
defaultToolbar: ["refresh", "filter", "search"],
|
||||
cols: [
|
||||
// { type: "selection", width: 50, align: "center" },
|
||||
{
|
||||
label: "用户名",
|
||||
align: "center",
|
||||
prop: "createUserName",
|
||||
},
|
||||
{
|
||||
label: "IP来源",
|
||||
align: "center",
|
||||
prop: "location",
|
||||
},
|
||||
{
|
||||
label: "用户操作",
|
||||
align: "center",
|
||||
prop: "operation",
|
||||
},
|
||||
{
|
||||
label: "请求Url",
|
||||
align: "center",
|
||||
prop: "requestUri",
|
||||
},
|
||||
{
|
||||
label: "请求耗时",
|
||||
align: "center",
|
||||
prop: "time",
|
||||
templet: 'custom',
|
||||
slotName: 'time'
|
||||
},
|
||||
{
|
||||
label: "创建时间",
|
||||
align: "center",
|
||||
prop: "createTime",
|
||||
},
|
||||
// {
|
||||
// label: "异常信息",
|
||||
// align: "center",
|
||||
// prop: "errorInfo",
|
||||
// }
|
||||
// , {
|
||||
// label: "日志类型",
|
||||
// align: "center",
|
||||
// prop: "type",
|
||||
// templet: 'custom',
|
||||
// slotName: 'options'
|
||||
// },
|
||||
|
||||
],
|
||||
};
|
||||
|
||||
export default contentConfig;
|
||||
77
src/views/shop/log/config/edit.ts
Normal file
77
src/views/shop/log/config/edit.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
import Api from "@/api/product/vendor";
|
||||
import { returnOptions, switchAttr } from "./config";
|
||||
import type { IModalConfig } from "@/components/CURD/types";
|
||||
|
||||
const modalConfig: IModalConfig = {
|
||||
pageName: "sys:user",
|
||||
dialog: {
|
||||
title: "编辑供应商",
|
||||
width: 800,
|
||||
draggable: true,
|
||||
},
|
||||
form: {
|
||||
labelWidth: 140,
|
||||
},
|
||||
formAction: function (data) {
|
||||
return Api.edit({ ...data });
|
||||
},
|
||||
beforeSubmit(data) {
|
||||
console.log("提交之前处理", data);
|
||||
},
|
||||
formItems: [
|
||||
|
||||
{
|
||||
label: "名称",
|
||||
prop: "name",
|
||||
rules: [{ required: true, message: "请输入名称", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入名称",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "联系人名字",
|
||||
prop: "contactName",
|
||||
rules: [{ required: false, message: "请输入联系人名字", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入联系人名字",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "联系人电话",
|
||||
prop: "telephone",
|
||||
rules: [{ required: false, message: "请输入联系人名字", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入联系人名字",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "供应商地址",
|
||||
prop: "address",
|
||||
rules: [{ required: false, message: "请输入供应商地址", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入供应商地址",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "备注",
|
||||
prop: "remark",
|
||||
rules: [{ required: false, message: "请输入备注", trigger: "blur" }],
|
||||
attrs: {
|
||||
placeholder: "请输入备注",
|
||||
},
|
||||
},
|
||||
{
|
||||
label: "排序",
|
||||
prop: "sort",
|
||||
rules: [{ required: true, message: "请输入排序", trigger: "blur" }],
|
||||
type: "input-number",
|
||||
attrs: {
|
||||
placeholder: "请输入排序",
|
||||
},
|
||||
},
|
||||
|
||||
],
|
||||
};
|
||||
|
||||
// 如果有异步数据会修改配置的,推荐用reactive包裹,而纯静态配置的可以直接导出
|
||||
export default reactive(modalConfig);
|
||||
38
src/views/shop/log/config/search.ts
Normal file
38
src/views/shop/log/config/search.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import type { ISearchConfig } from "@/components/CURD/types";
|
||||
import { returnOptions } from './config'
|
||||
const searchConfig: ISearchConfig = {
|
||||
pageName: "sys:user",
|
||||
formItems: [
|
||||
{
|
||||
type: "select",
|
||||
options: returnOptions('type'),
|
||||
label: "日志类型",
|
||||
prop: "type",
|
||||
attrs: {
|
||||
placeholder: "请选择日志类型",
|
||||
clearable: true,
|
||||
style: {
|
||||
width: "200px",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
type: 'date-picker',
|
||||
label: "创建时间",
|
||||
prop: "createTime",
|
||||
attrs: {
|
||||
type: "daterange",
|
||||
rangeSeparator: "-",
|
||||
startPlaceholder: "开始日期",
|
||||
endPlaceholder: "结束日期",
|
||||
format: "YYYY-MM-DD",
|
||||
clearable: true,
|
||||
style: {
|
||||
width: "300px",
|
||||
},
|
||||
},
|
||||
}
|
||||
],
|
||||
};
|
||||
|
||||
export default searchConfig;
|
||||
136
src/views/shop/log/index.vue
Normal file
136
src/views/shop/log/index.vue
Normal file
@@ -0,0 +1,136 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<!-- 列表 -->
|
||||
<!-- 搜索 -->
|
||||
<page-search
|
||||
ref="searchRef"
|
||||
:search-config="searchConfig"
|
||||
@query-click="handleQueryClick"
|
||||
@reset-click="handleResetClick"
|
||||
/>
|
||||
<!-- 列表 -->
|
||||
<page-content
|
||||
ref="contentRef"
|
||||
:content-config="contentConfig"
|
||||
@add-click="handleAddClick"
|
||||
@edit-click="handleEditClick"
|
||||
@export-click="handleExportClick"
|
||||
@search-click="handleSearchClick"
|
||||
@toolbar-click="handleToolbarClick"
|
||||
@operat-click="handleOperatClick"
|
||||
@filter-change="handleFilterChange"
|
||||
>
|
||||
<template #status="scope">
|
||||
<el-tag :type="scope.row[scope.prop] == 1 ? 'success' : 'info'">
|
||||
{{ scope.row[scope.prop] == 1 ? "启用" : "禁用" }}
|
||||
</el-tag>
|
||||
</template>
|
||||
<template #time="scope">
|
||||
<el-tag v-if="scope.row.requestTime <= 300">{{ scope.row.requestTime }}ms</el-tag>
|
||||
<el-tag v-else-if="scope.row.requestTime <= 1000" type="warning">
|
||||
{{ scope.row.requestTime }}ms
|
||||
</el-tag>
|
||||
<el-tag v-else type="danger">{{ scope.row.requestTime }}ms</el-tag>
|
||||
</template>
|
||||
<template #options="scope">
|
||||
{{ returnOptionsLabel(scope.prop, scope.row[scope.prop]) }}
|
||||
</template>
|
||||
<template #switch="scope">
|
||||
<el-switch
|
||||
v-model="scope.row[scope.prop]"
|
||||
disabled
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
></el-switch>
|
||||
</template>
|
||||
<template #mobile="scope">
|
||||
<el-text>{{ scope.row[scope.prop] }}</el-text>
|
||||
<copy-button
|
||||
v-if="scope.row[scope.prop]"
|
||||
:text="scope.row[scope.prop]"
|
||||
style="margin-left: 2px"
|
||||
/>
|
||||
</template>
|
||||
</page-content>
|
||||
|
||||
<!-- 新增 -->
|
||||
<page-modal
|
||||
ref="addModalRef"
|
||||
:modal-config="addModalConfig"
|
||||
@submit-click="handleSubmitClick"
|
||||
></page-modal>
|
||||
|
||||
<!-- 编辑 -->
|
||||
<page-modal
|
||||
ref="editModalRef"
|
||||
:modal-config="editModalConfig"
|
||||
@submit-click="handleSubmitClick"
|
||||
></page-modal>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import logApi from "@/api/system/log";
|
||||
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import type { IObject, IOperatData } from "@/components/CURD/types";
|
||||
import usePage from "@/components/CURD/usePage";
|
||||
import addModalConfig from "./config/add";
|
||||
import contentConfig from "./config/content";
|
||||
import editModalConfig from "./config/edit";
|
||||
import searchConfig from "./config/search";
|
||||
import { returnOptionsLabel } from "./config/config";
|
||||
|
||||
const {
|
||||
searchRef,
|
||||
contentRef,
|
||||
addModalRef,
|
||||
editModalRef,
|
||||
handleQueryClick,
|
||||
handleResetClick,
|
||||
// handleAddClick,
|
||||
// handleEditClick,
|
||||
handleSubmitClick,
|
||||
handleExportClick,
|
||||
handleSearchClick,
|
||||
handleFilterChange,
|
||||
} = usePage();
|
||||
|
||||
// 新增
|
||||
async function handleAddClick() {
|
||||
addModalRef.value?.setModalVisible();
|
||||
// addModalConfig.formItems[2]!.attrs!.data =
|
||||
}
|
||||
// 编辑
|
||||
async function handleEditClick(row: IObject) {
|
||||
editModalRef.value?.handleDisabled(false);
|
||||
editModalRef.value?.setModalVisible();
|
||||
// 根据id获取数据进行填充
|
||||
console.log(row);
|
||||
editModalRef.value?.setFormData({ ...row });
|
||||
}
|
||||
1;
|
||||
// 其他工具栏
|
||||
function handleToolbarClick(name: string) {
|
||||
console.log(name);
|
||||
if (name === "clear") {
|
||||
ElMessageBox.confirm("确认清空所有操作日志吗?", "提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(async () => {
|
||||
logApi.clear().then((res) => {
|
||||
ElMessage.success("清空成功");
|
||||
contentRef.value?.fetchPageData();
|
||||
});
|
||||
})
|
||||
.catch(() => {});
|
||||
return;
|
||||
}
|
||||
}
|
||||
// 其他操作列
|
||||
async function handleOperatClick(data: IOperatData) {
|
||||
console.log(data);
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user