Files
guofu-admin/src/views/oa/oaApp/index.vue
2024-09-20 16:11:55 +08:00

600 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="page">
<div class="ele-body">
<a-card :bordered="false" :body-style="{ padding: '16px' }">
<ele-pro-table
ref="tableRef"
row-key="oaAppId"
:columns="columns"
:datasource="datasource"
:customRow="customRow"
tool-class="ele-toolbar-form"
class="sys-org-table"
>
<template #toolbar>
<search
@search="reload"
:selection="selection"
@add="openEdit"
@remove="removeBatch"
@batchMove="openMove"
/>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'image'">
<a-image :src="record.image" :width="50" />
</template>
<template v-if="column.key === 'status'">
<a-tag v-if="record.status === 0" color="green">显示</a-tag>
<a-tag v-if="record.status === 1" color="red">隐藏</a-tag>
</template>
<template v-if="column.key === 'action'">
<a-space>
<a @click="openEdit(record)">修改</a>
<a-divider type="vertical" />
<a-popconfirm
title="确定要删除此记录吗?"
@confirm="remove(record)"
>
<a class="ele-text-danger">删除</a>
</a-popconfirm>
</a-space>
</template>
</template>
</ele-pro-table>
</a-card>
<!-- 编辑弹窗 -->
<OaAppEdit v-model:visible="showEdit" :data="current" @done="reload" />
</div>
</div>
</template>
<script lang="ts" setup>
import { createVNode, ref } from 'vue';
import { message, Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import type { EleProTable } from 'ele-admin-pro';
import { toDateString } from 'ele-admin-pro';
import type {
DatasourceFunction,
ColumnItem
} from 'ele-admin-pro/es/ele-pro-table/types';
import Search from './components/search.vue';
import OaAppEdit from './components/oaAppEdit.vue';
import { pageOaApp, removeOaApp, removeBatchOaApp } from '@/api/oa/oaApp';
import type { OaApp, OaAppParam } from '@/api/oa/oaApp/model';
// 表格实例
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
// 表格选中数据
const selection = ref<OaApp[]>([]);
// 当前编辑数据
const current = ref<OaApp | null>(null);
// 是否显示编辑弹窗
const showEdit = ref(false);
// 是否显示批量移动弹窗
const showMove = ref(false);
// 加载状态
const loading = ref(true);
// 表格数据源
const datasource: DatasourceFunction = ({
page,
limit,
where,
orders,
filters
}) => {
if (filters) {
where.status = filters.status;
}
return pageOaApp({
...where,
...orders,
page,
limit
});
};
// 表格列配置
const columns = ref<ColumnItem[]>([
{
title: '应用ID',
dataIndex: 'appId',
key: 'appId',
align: 'center',
width: 90,
},
{
title: '应用名称',
dataIndex: 'appName',
key: 'appName',
align: 'center',
},
{
title: '应用标识',
dataIndex: 'appCode',
key: 'appCode',
align: 'center',
},
{
title: '应用秘钥',
dataIndex: 'appSecret',
key: 'appSecret',
align: 'center',
},
{
title: '上级id, 0是顶级',
dataIndex: 'parentId',
key: 'parentId',
align: 'center',
},
{
title: '应用类型',
dataIndex: 'appType',
key: 'appType',
align: 'center',
},
{
title: '应用类型',
dataIndex: 'appTypeMultiple',
key: 'appTypeMultiple',
align: 'center',
},
{
title: '类型, 0菜单, 1按钮',
dataIndex: 'menuType',
key: 'menuType',
align: 'center',
},
{
title: '企业ID',
dataIndex: 'companyId',
key: 'companyId',
align: 'center',
},
{
title: '企业名称',
dataIndex: 'companyName',
key: 'companyName',
align: 'center',
},
{
title: '应用图标',
dataIndex: 'appIcon',
key: 'appIcon',
align: 'center',
},
{
title: '二维码',
dataIndex: 'appQrcode',
key: 'appQrcode',
align: 'center',
},
{
title: '链接地址',
dataIndex: 'appUrl',
key: 'appUrl',
align: 'center',
},
{
title: '后台管理地址',
dataIndex: 'adminUrl',
key: 'adminUrl',
align: 'center',
},
{
title: '下载地址',
dataIndex: 'downUrl',
key: 'downUrl',
align: 'center',
},
{
title: '链接地址',
dataIndex: 'serverUrl',
key: 'serverUrl',
align: 'center',
},
{
title: '文件服务器',
dataIndex: 'fileUrl',
key: 'fileUrl',
align: 'center',
},
{
title: '回调地址',
dataIndex: 'callbackUrl',
key: 'callbackUrl',
align: 'center',
},
{
title: '腾讯文档地址',
dataIndex: 'docsUrl',
key: 'docsUrl',
align: 'center',
},
{
title: '代码仓库地址',
dataIndex: 'gitUrl',
key: 'gitUrl',
align: 'center',
},
{
title: '原型图地址',
dataIndex: 'prototypeUrl',
key: 'prototypeUrl',
align: 'center',
},
{
title: 'IP白名单',
dataIndex: 'ipAddress',
key: 'ipAddress',
align: 'center',
},
{
title: '应用截图',
dataIndex: 'images',
key: 'images',
align: 'center',
},
{
title: '应用包名',
dataIndex: 'packageName',
key: 'packageName',
align: 'center',
},
{
title: '下载次数',
dataIndex: 'clicks',
key: 'clicks',
align: 'center',
},
{
title: '安装次数',
dataIndex: 'installs',
key: 'installs',
align: 'center',
},
{
title: '备注',
dataIndex: 'comments',
key: 'comments',
align: 'center',
},
{
title: '应用介绍',
dataIndex: 'content',
key: 'content',
align: 'center',
},
{
title: '项目需求',
dataIndex: 'requirement',
key: 'requirement',
align: 'center',
},
{
title: '开发者(个人或公司)',
dataIndex: 'developer',
key: 'developer',
align: 'center',
},
{
title: '项目负责人',
dataIndex: 'director',
key: 'director',
align: 'center',
},
{
title: '项目经理',
dataIndex: 'projectDirector',
key: 'projectDirector',
align: 'center',
},
{
title: '业务员',
dataIndex: 'salesman',
key: 'salesman',
align: 'center',
},
{
title: '软件定价',
dataIndex: 'price',
key: 'price',
align: 'center',
},
{
title: '划线价格',
dataIndex: 'linePrice',
key: 'linePrice',
align: 'center',
},
{
title: '评分',
dataIndex: 'score',
key: 'score',
align: 'center',
},
{
title: '星级',
dataIndex: 'star',
key: 'star',
align: 'center',
},
{
title: '菜单路由地址',
dataIndex: 'path',
key: 'path',
align: 'center',
},
{
title: '菜单组件地址, 目录可为空',
dataIndex: 'component',
key: 'component',
align: 'center',
},
{
title: '权限标识',
dataIndex: 'authority',
key: 'authority',
align: 'center',
},
{
title: '打开位置',
dataIndex: 'target',
key: 'target',
align: 'center',
},
{
title: '是否隐藏, 0否, 1是(仅注册路由不显示在左侧菜单)',
dataIndex: 'hide',
key: 'hide',
align: 'center',
},
{
title: '禁止搜索1禁止 0 允许',
dataIndex: 'search',
key: 'search',
align: 'center',
},
{
title: '菜单侧栏选中的path',
dataIndex: 'active',
key: 'active',
align: 'center',
},
{
title: '其它路由元信息',
dataIndex: 'meta',
key: 'meta',
align: 'center',
},
{
title: '版本0正式版 1基础版 2开发版',
dataIndex: 'edition',
key: 'edition',
align: 'center',
},
{
title: '版本号',
dataIndex: 'version',
key: 'version',
align: 'center',
},
{
title: '是否已安装',
dataIndex: 'isUse',
key: 'isUse',
align: 'center',
},
{
title: '附近1',
dataIndex: 'file1',
key: 'file1',
align: 'center',
},
{
title: '附件2',
dataIndex: 'file2',
key: 'file2',
align: 'center',
},
{
title: '附件3',
dataIndex: 'file3',
key: 'file3',
align: 'center',
},
{
title: '是否显示续费提醒',
dataIndex: 'showExpiration',
key: 'showExpiration',
align: 'center',
},
{
title: '是否作为案例展示',
dataIndex: 'showCase',
key: 'showCase',
align: 'center',
},
{
title: '是否显示在首页',
dataIndex: 'showIndex',
key: 'showIndex',
align: 'center',
},
{
title: '是否推荐',
dataIndex: 'recommend',
key: 'recommend',
align: 'center',
},
{
title: '到期时间',
dataIndex: 'expirationTime',
key: 'expirationTime',
align: 'center',
},
{
title: '续费金额',
dataIndex: 'renewMoney',
key: 'renewMoney',
align: 'center',
},
{
title: '应用状态',
dataIndex: 'appStatus',
key: 'appStatus',
align: 'center',
},
{
title: '排序(数字越小越靠前)',
dataIndex: 'sortNumber',
key: 'sortNumber',
align: 'center',
},
{
title: '状态, 0正常, 1冻结',
dataIndex: 'status',
key: 'status',
align: 'center',
},
{
title: '是否删除, 0否, 1是',
dataIndex: 'deleted',
key: 'deleted',
align: 'center',
},
{
title: '用户ID',
dataIndex: 'userId',
key: 'userId',
align: 'center',
},
{
title: '机构id',
dataIndex: 'organizationId',
key: 'organizationId',
align: 'center',
},
{
title: '租户编号',
dataIndex: 'tenantCode',
key: 'tenantCode',
align: 'center',
},
{
title: '创建时间',
dataIndex: 'createTime',
key: 'createTime',
align: 'center',
sorter: true,
ellipsis: true,
customRender: ({ text }) => toDateString(text, 'yyyy-MM-dd')
},
{
title: '修改时间',
dataIndex: 'updateTime',
key: 'updateTime',
align: 'center',
},
{
title: '操作',
key: 'action',
width: 180,
fixed: 'right',
align: 'center',
hideInSetting: true
}
]);
/* 搜索 */
const reload = (where?: OaAppParam) => {
selection.value = [];
tableRef?.value?.reload({ where: where });
};
/* 打开编辑弹窗 */
const openEdit = (row?: OaApp) => {
current.value = row ?? null;
showEdit.value = true;
};
/* 打开批量移动弹窗 */
const openMove = () => {
showMove.value = true;
};
/* 删除单个 */
const remove = (row: OaApp) => {
const hide = message.loading('请求中..', 0);
removeOaApp(row.oaAppId)
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
};
/* 批量删除 */
const removeBatch = () => {
if (!selection.value.length) {
message.error('请至少选择一条数据');
return;
}
Modal.confirm({
title: '提示',
content: '确定要删除选中的记录吗?',
icon: createVNode(ExclamationCircleOutlined),
maskClosable: true,
onOk: () => {
const hide = message.loading('请求中..', 0);
removeBatchOaApp(selection.value.map((d) => d.oaAppId))
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
}
});
};
/* 查询 */
const query = () => {
loading.value = true;
};
/* 自定义行属性 */
const customRow = (record: OaApp) => {
return {
// 行点击事件
onClick: () => {
// console.log(record);
},
// 行双击事件
onDblclick: () => {
openEdit(record);
}
};
};
query();
</script>
<script lang="ts">
export default {
name: 'OaApp'
};
</script>
<style lang="less" scoped></style>