update: 通知配置组件更换

This commit is contained in:
JiangQiming 2023-03-08 16:04:38 +08:00
parent 25d44f841b
commit f3bebd063b
8 changed files with 196 additions and 196 deletions

View File

@ -4,32 +4,32 @@
<div class="live-player-content">
<!-- 工具栏 -->
<div class="player-screen-tool" v-if="showScreen">
<a-radio-group
<j-radio-group
:value="screen"
button-style="solid"
@change="handleScreenChange"
>
<a-radio-button :value="1">单屏</a-radio-button>
<a-radio-button :value="4">四分屏</a-radio-button>
<a-radio-button :value="9">九分屏</a-radio-button>
<a-radio-button :value="0">全屏</a-radio-button>
</a-radio-group>
<j-radio-button :value="1">单屏</j-radio-button>
<j-radio-button :value="4">四分屏</j-radio-button>
<j-radio-button :value="9">九分屏</j-radio-button>
<j-radio-button :value="0">全屏</j-radio-button>
</j-radio-group>
<div class="screen-tool-save">
<a-tooltip title="可保存分屏配置记录">
<j-tooltip title="可保存分屏配置记录">
<AIcon type="QuestionCircleOutlined" />
</a-tooltip>
<a-popover
</j-tooltip>
<j-popover
v-model:visible="visible"
trigger="click"
title="分屏名称"
>
<template #content>
<a-form
<j-form
ref="formRef"
:model="formData"
layout="vertical"
>
<a-form-item
<j-form-item
name="name"
:rules="[
{
@ -42,37 +42,37 @@
},
]"
>
<a-textarea v-model:value="formData.name" />
</a-form-item>
<a-button
<j-textarea v-model:value="formData.name" />
</j-form-item>
<j-button
type="primary"
@click="saveHistory"
:loading="loading"
style="width: 100%; margin-top: 16px"
>
保存
</a-button>
</a-form>
</j-button>
</j-form>
</template>
<a-dropdown-button
<j-dropdown-button
type="primary"
@click="visible = true"
>
保存
<template #overlay>
<a-menu>
<a-empty
<j-menu>
<j-empty
v-if="!historyList.length"
description="暂无数据"
/>
<a-menu-item
<j-menu-item
v-for="(item, index) in historyList"
:key="`his${index}`"
@click="handleHistory(item)"
>
<a-space>
<j-space>
<span>{{ item.name }}</span>
<a-popconfirm
<j-popconfirm
title="确认删除?"
ok-text="确认"
cancel-text="取消"
@ -89,13 +89,13 @@
e?.stopPropagation()
"
/>
</a-popconfirm>
</a-space>
</a-menu-item>
</a-menu>
</j-popconfirm>
</j-space>
</j-menu-item>
</j-menu>
</template>
</a-dropdown-button>
</a-popover>
</j-dropdown-button>
</j-popover>
</div>
</div>
<!-- 播放器 -->

View File

@ -11,7 +11,7 @@
:muted="'muted' in props ? props.muted !== false : true"
:hide-big-play-button="true"
:poster="props.poster || ''"
:timeout="props.timeout || 20"
:timeout="props.timeout || 30"
:video-url="url || ''"
@play="props.onPlay"
@pause="props.onPause"

View File

@ -1,5 +1,5 @@
<template>
<a-modal
<j-modal
v-model:visible="_vis"
title="调试"
cancelText="取消"
@ -8,34 +8,34 @@
@cancel="handleCancel"
:confirmLoading="btnLoading"
>
<a-form ref="formRef" layout="vertical" :model="formData">
<a-form-item
<j-form ref="formRef" layout="vertical" :model="formData">
<j-form-item
label="通知模版"
name="templateId"
:rules="{ required: true, message: '该字段为必填字段' }"
>
<a-select
<j-select
v-model:value="formData.templateId"
placeholder="请选择通知模版"
@change="getTemplateDetail"
>
<a-select-option
<j-select-option
v-for="(item, index) in templateList"
:key="index"
:value="item.id"
>
{{ item.name }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
</j-select-option>
</j-select>
</j-form-item>
<j-form-item
label="变量"
v-if="
formData.templateDetailTable &&
formData.templateDetailTable.length
"
>
<a-table
<j-table
row-key="id"
:columns="columns"
:data-source="formData.templateDetailTable"
@ -49,7 +49,7 @@
<span>{{ record[column.dataIndex] }}</span>
</template>
<template v-else>
<a-form-item
<j-form-item
:name="['templateDetailTable', index, 'value']"
:rules="{
required: true,
@ -60,13 +60,13 @@
v-model:modelValue="record.value"
:itemType="record.type"
/>
</a-form-item>
</j-form-item>
</template>
</template>
</a-table>
</a-form-item>
</a-form>
</a-modal>
</j-table>
</j-form-item>
</j-form>
</j-modal>
</template>
<script setup lang="ts">

View File

@ -1,7 +1,7 @@
<!-- webhook请求头可编辑表格 -->
<template>
<div class="table-wrapper">
<a-table
<j-table
:columns="columns"
:data-source="dataSource"
bordered
@ -9,18 +9,18 @@
>
<template #bodyCell="{ column, text, record }">
<template v-if="['key', 'value'].includes(column.dataIndex)">
<a-input v-model:value="record[column.dataIndex]" />
<j-input v-model:value="record[column.dataIndex]" />
</template>
<template v-else-if="column.dataIndex === 'operation'">
<a-button type="text">
<j-button type="text">
<template #icon>
<delete-outlined @click="handleDelete(record.id)" />
</template>
</a-button>
</j-button>
</template>
</template>
</a-table>
<a-button
</j-table>
<j-button
type="dashed"
@click="handleAdd"
style="width: 100%; margin-top: 5px"
@ -29,7 +29,7 @@
<plus-outlined />
</template>
添加
</a-button>
</j-button>
</div>
</template>

View File

@ -1,36 +1,36 @@
<!-- 通知配置详情 -->
<template>
<page-container>
<a-card>
<a-row>
<a-col :span="10">
<a-form layout="vertical">
<a-form-item
<j-card>
<j-row>
<j-col :span="10">
<j-form layout="vertical">
<j-form-item
label="通知方式"
v-bind="validateInfos.type"
>
<a-select
<j-select
v-model:value="formData.type"
placeholder="请选择通知方式"
:disabled="!!formData.id"
@change="handleTypeChange"
>
<a-select-option
<j-select-option
v-for="(item, index) in NOTICE_METHOD"
:key="index"
:value="item.value"
>
{{ item.label }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item label="名称" v-bind="validateInfos.name">
<a-input
</j-select-option>
</j-select>
</j-form-item>
<j-form-item label="名称" v-bind="validateInfos.name">
<j-input
v-model:value="formData.name"
placeholder="请输入名称"
/>
</a-form-item>
<a-form-item
</j-form-item>
<j-form-item
label="类型"
v-bind="validateInfos.provider"
v-if="formData.type !== 'email'"
@ -40,144 +40,144 @@
v-model="formData.provider"
@change="handleProviderChange"
/>
</a-form-item>
</j-form-item>
<!-- 钉钉 -->
<template v-if="formData.type === 'dingTalk'">
<template
v-if="formData.provider === 'dingTalkMessage'"
>
<a-form-item
<j-form-item
label="AppKey"
v-bind="
validateInfos['configuration.appKey']
"
>
<a-input
<j-input
v-model:value="
formData.configuration.appKey
"
placeholder="请输入AppKey"
/>
</a-form-item>
<a-form-item
</j-form-item>
<j-form-item
label="AppSecret"
v-bind="
validateInfos['configuration.appSecret']
"
>
<a-input
<j-input
v-model:value="
formData.configuration.appSecret
"
placeholder="请输入AppSecret"
/>
</a-form-item>
</j-form-item>
</template>
<template
v-if="
formData.provider === 'dingTalkRobotWebHook'
"
>
<a-form-item
<j-form-item
label="webHook"
v-bind="validateInfos['configuration.url']"
>
<a-input
<j-input
v-model:value="
formData.configuration.url
"
placeholder="请输入webHook"
/>
</a-form-item>
</j-form-item>
</template>
</template>
<!-- 微信 -->
<template v-if="formData.type === 'weixin'">
<a-form-item
<j-form-item
label="corpId"
v-bind="validateInfos['configuration.corpId']"
>
<a-input
<j-input
v-model:value="
formData.configuration.corpId
"
placeholder="请输入corpId"
/>
</a-form-item>
<a-form-item
</j-form-item>
<j-form-item
label="corpSecret"
v-bind="
validateInfos['configuration.corpSecret']
"
>
<a-input
<j-input
v-model:value="
formData.configuration.corpSecret
"
placeholder="请输入corpSecret"
/>
</a-form-item>
</j-form-item>
</template>
<!-- 邮件 -->
<template v-if="formData.type === 'email'">
<a-form-item
<j-form-item
label="服务器地址"
v-bind="validateInfos['configuration.host']"
>
<a-space>
<a-input
<j-space>
<j-input
v-model:value="
formData.configuration.host
"
placeholder="请输入服务器地址"
/>
<a-input-number
<j-input-number
v-model:value="
formData.configuration.port
"
/>
<a-checkbox
<j-checkbox
v-model:value="
formData.configuration.ssl
"
>
开启SSL
</a-checkbox>
</a-space>
</a-form-item>
<a-form-item
</j-checkbox>
</j-space>
</j-form-item>
<j-form-item
label="发件人"
v-bind="validateInfos['configuration.sender']"
>
<a-input
<j-input
v-model:value="
formData.configuration.sender
"
placeholder="请输入发件人"
/>
</a-form-item>
<a-form-item
</j-form-item>
<j-form-item
label="用户名"
v-bind="validateInfos['configuration.username']"
>
<a-input
<j-input
v-model:value="
formData.configuration.username
"
placeholder="请输入用户名"
/>
</a-form-item>
<a-form-item
</j-form-item>
<j-form-item
label="密码"
v-bind="validateInfos['configuration.password']"
>
<a-input
<j-input
v-model:value="
formData.configuration.password
"
placeholder="请输入密码"
/>
</a-form-item>
</j-form-item>
</template>
<!-- 语音/短信 -->
<template
@ -186,94 +186,94 @@
formData.type === 'sms'
"
>
<a-form-item
<j-form-item
label="RegionId"
v-bind="validateInfos['configuration.regionId']"
>
<a-select
<j-select
v-model:value="
formData.configuration.regionId
"
placeholder="请选择RegionId"
>
<a-select-option
<j-select-option
v-for="(item, index) in regionList"
:key="index"
:value="item.value"
>
{{ item.label }}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item
</j-select-option>
</j-select>
</j-form-item>
<j-form-item
label="AccessKeyId"
v-bind="
validateInfos['configuration.accessKeyId']
"
>
<a-input
<j-input
v-model:value="
formData.configuration.accessKeyId
"
placeholder="请输入AccessKeyId"
/>
</a-form-item>
<a-form-item
</j-form-item>
<j-form-item
label="Secret"
v-bind="validateInfos['configuration.secret']"
>
<a-input
<j-input
v-model:value="
formData.configuration.secret
"
placeholder="Secret"
/>
</a-form-item>
</j-form-item>
</template>
<!-- webhook -->
<template v-if="formData.type === 'webhook'">
<a-form-item
<j-form-item
label="Webhook"
v-bind="validateInfos['configuration.url']"
>
<a-input
<j-input
v-model:value="formData.configuration.url"
placeholder="请输入Webhook"
/>
</a-form-item>
<a-form-item label="请求头">
</j-form-item>
<j-form-item label="请求头">
<EditTable
v-model:headers="
formData.configuration.headers
"
/>
</a-form-item>
</j-form-item>
</template>
<a-form-item label="说明">
<a-textarea
<j-form-item label="说明">
<j-textarea
v-model:value="formData.description"
show-count
:maxlength="200"
:rows="5"
placeholder="请输入说明"
/>
</a-form-item>
<a-form-item>
<a-button
</j-form-item>
<j-form-item>
<j-button
type="primary"
@click="handleSubmit"
:loading="btnLoading"
>
保存
</a-button>
</a-form-item>
</a-form>
</a-col>
<a-col :span="12" :push="2">
</j-button>
</j-form-item>
</j-form>
</j-col>
<j-col :span="12" :push="2">
<Doc :docData="formData" />
</a-col>
</a-row>
</a-card>
</j-col>
</j-row>
</j-card>
</page-container>
</template>
@ -395,7 +395,7 @@ const formRules = ref({
{ required: true, message: '请输入Webhook' },
{
pattern:
/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/,
/^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[j-z]{2,6}\/?/,
message: 'Webhook需要是一个合法的URL',
},
],

View File

@ -1,5 +1,5 @@
<template>
<a-modal v-model:visible="_vis" title="通知记录" :footer="null" width="70%">
<j-modal v-model:visible="_vis" title="通知记录" :footer="null" width="70%">
<j-advanced-search
type="simple"
:columns="columns"
@ -21,18 +21,18 @@
{{ moment(slotProps.notifyTime).format('YYYY-MM-DD HH:mm:ss') }}
</template>
<template #state="slotProps">
<a-space>
<a-badge
<j-space>
<j-badge
:status="slotProps.state.value"
:text="slotProps.state.text"
></a-badge>
></j-badge>
<AIcon
v-if="slotProps.state.value === 'error'"
type="ExclamationCircleOutlined"
style="color: #1d39c4; cursor: pointer"
@click="handleError(slotProps.errorStack)"
/>
</a-space>
</j-space>
</template>
<template #action="slotProps">
<AIcon
@ -42,7 +42,7 @@
/>
</template>
</JProTable>
</a-modal>
</j-modal>
</template>
<script setup lang="ts">

View File

@ -1,15 +1,15 @@
<template>
<div>
<a-modal
<j-modal
v-model:visible="_vis"
title="同步用户"
:footer="null"
@cancel="_vis = false"
width="80%"
>
<a-row :gutter="10" class="model-body">
<a-col :span="4">
<a-input
<j-row :gutter="10" class="model-body">
<j-col :span="4">
<j-input
v-model:value="deptName"
@keyup.enter="getDepartment"
allowClear
@ -23,17 +23,17 @@
@click="getDepartment"
/>
</template>
</a-input>
<a-tree
</j-input>
<j-tree
:tree-data="deptTreeData"
:fieldNames="{ title: 'name', key: 'id' }"
:selectedKeys="[deptId]"
@select="onTreeSelect"
>
</a-tree>
<a-empty v-if="!deptTreeData.length" />
</a-col>
<a-col :span="20">
</j-tree>
<j-empty v-if="!deptTreeData.length" />
</j-col>
<j-col :span="20">
<JProTable
ref="tableRef"
:columns="columns"
@ -43,38 +43,38 @@
noPagination
>
<template #headerTitle>
<a-button type="primary" @click="handleAutoBind">
<j-button type="primary" @click="handleAutoBind">
自动绑定
</a-button>
</j-button>
</template>
<template #status="slotProps">
<a-space>
<a-badge
<j-space>
<j-badge
:status="slotProps.status.value"
:text="slotProps.status.text"
></a-badge>
</a-space>
></j-badge>
</j-space>
</template>
<template #action="slotProps">
<a-space :size="16">
<a-tooltip
<j-space :size="16">
<j-tooltip
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
v-bind="i.tooltip"
>
<a-popconfirm
<j-popconfirm
v-if="i.popConfirm"
v-bind="i.popConfirm"
:disabled="i.disabled"
>
<a-button
<j-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-popconfirm>
<a-button
/></j-button>
</j-popconfirm>
<j-button
style="padding: 0"
type="link"
v-else
@ -82,23 +82,23 @@
i.onClick && i.onClick(slotProps)
"
>
<a-button
<j-button
:disabled="i.disabled"
style="padding: 0"
type="link"
><AIcon :type="i.icon"
/></a-button>
</a-button>
</a-tooltip>
</a-space>
/></j-button>
</j-button>
</j-tooltip>
</j-space>
</template>
</JProTable>
</a-col>
</a-row>
</a-modal>
</j-col>
</j-row>
</j-modal>
<!-- 绑定用户 -->
<a-modal
<j-modal
v-model:visible="bindVis"
title="绑定用户"
:maskClosable="false"
@ -106,9 +106,9 @@
@cancel="handleCancel"
@ok="handleBindSubmit"
>
<a-form layout="vertical">
<a-form-item label="用户" v-bind="validateInfos.userId">
<a-select
<j-form layout="vertical">
<j-form-item label="用户" v-bind="validateInfos.userId">
<j-select
v-model:value="formData.userId"
:options="allUserList"
allowClear
@ -117,9 +117,9 @@
:filter-option="filterOption"
placeholder="请选择用户"
/>
</a-form-item>
</a-form>
</a-modal>
</j-form-item>
</j-form>
</j-modal>
</div>
</template>

View File

@ -16,7 +16,7 @@
:gridColumn="3"
>
<template #headerTitle>
<a-space>
<j-space>
<PermissionButton
type="primary"
@click="handleAdd"
@ -34,7 +34,7 @@
导入
</PermissionButton>
</a-upload>
<a-popconfirm
<j-popconfirm
title="确认导出?"
ok-text="确定"
cancel-text="取消"
@ -43,8 +43,8 @@
<PermissionButton hasPermission="notice/Config:export">
导出
</PermissionButton>
</a-popconfirm>
</a-space>
</j-popconfirm>
</j-space>
</template>
<template #card="slotProps">
<CardBox
@ -67,39 +67,39 @@
<h3 class="card-item-content-title">
{{ slotProps.name }}
</h3>
<a-row>
<a-col :span="12">
<j-row>
<j-col :span="12">
<div class="card-item-content-text">
通知方式
</div>
<div>
{{ getMethodTxt(slotProps.type) }}
</div>
</a-col>
<a-col :span="12">
</j-col>
<j-col :span="12">
<div class="card-item-content-text">说明</div>
<Ellipsis>
{{ slotProps.description }}
</Ellipsis>
</a-col>
</a-row>
</j-col>
</j-row>
</template>
<template #actions="item">
<a-tooltip
<j-tooltip
v-bind="item.tooltip"
:title="item.disabled && item.tooltip.title"
>
<a-dropdown
<j-dropdown
placement="bottomRight"
v-if="item.key === 'others'"
>
<a-button>
<j-button>
<AIcon :type="item.icon" />
<span>{{ item.text }}</span>
</a-button>
</j-button>
<template #overlay>
<a-menu>
<a-menu-item
<j-menu>
<j-menu-item
v-for="(o, i) in item.children"
:key="i"
>
@ -113,10 +113,10 @@
</template>
<span>{{ o.text }}</span>
</PermissionButton>
</a-menu-item>
</a-menu>
</j-menu-item>
</j-menu>
</template>
</a-dropdown>
</j-dropdown>
<j-popconfirm
v-else-if="item.key === 'delete'"
v-bind="item.popConfirm"
@ -143,12 +143,12 @@
<span>{{ item.text }}</span>
</PermissionButton>
</template>
</a-tooltip>
</j-tooltip>
</template>
</CardBox>
</template>
<template #action="slotProps">
<a-space :size="16">
<j-space :size="16">
<template
v-for="i in getActions(slotProps, 'table')"
:key="i.key"
@ -167,7 +167,7 @@
<template #icon><AIcon :type="i.icon" /></template>
</PermissionButton>
</template>
</a-space>
</j-space>
</template>
</JProTable>