Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-dml
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-dml
Commits
b1acbeb4
提交
b1acbeb4
authored
5月 17, 2024
作者:
lhh
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
c1abf287
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
265 行增加
和
71 行删除
+265
-71
AppList.vue
src/components/base/AppList.vue
+26
-5
FormDialog.vue
src/modules/connect/components/FormDialog.vue
+51
-40
ListItem.vue
src/modules/connect/components/ListItem.vue
+7
-3
UserDataDialog.vue
src/modules/connect/components/UserDataDialog.vue
+17
-3
View.vue
src/modules/connect/views/View.vue
+17
-5
FieldDialog.vue
src/modules/metadata/event/components/FieldDialog.vue
+66
-7
FormDialog.vue
src/modules/metadata/user/components/FormDialog.vue
+65
-5
ViewProgressDialog.vue
src/modules/user/components/ViewProgressDialog.vue
+16
-3
没有找到文件。
src/components/base/AppList.vue
浏览文件 @
b1acbeb4
...
...
@@ -132,14 +132,28 @@ defineExpose({ refetch, tableRef })
</
template
>
<
template
v-else
>
<!-- input -->
<el-input
v-model=
"params[item.prop]"
v-bind=
"item"
clearable
@
change=
"search"
v-if=
"item.type === 'input'"
/>
<el-input
v-model=
"params[item.prop]"
v-bind=
"item"
clearable
@
change=
"search"
v-if=
"item.type === 'input'"
/>
<!-- select -->
<el-select
v-model=
"params[item.prop]"
v-bind=
"item"
filterable
clearable
@
change=
"search"
v-if=
"item.type === 'select'"
>
<el-select
v-model=
"params[item.prop]"
v-bind=
"item"
filterable
clearable
@
change=
"search"
v-if=
"item.type === 'select'"
>
<el-option
v-for=
"(option, index) in item.options"
:label=
"option[item.labelKey] || option.label || option"
:value=
"option[item.valueKey] || option.value || option"
:key=
"index"
/>
:key=
"index"
/>
</el-select>
</
template
>
</el-form-item>
...
...
@@ -157,7 +171,13 @@ defineExpose({ refetch, tableRef })
<!-- 主体 -->
<div
class=
"table-list-bd"
>
<slot
name=
"body"
v-bind=
"{ data: dataList }"
>
<el-table
:header-cell-style=
"{ background: '#ededed' }"
:data=
"dataList"
v-loading=
"loading"
v-bind=
"$attrs"
ref=
"tableRef"
>
<el-table
:header-cell-style=
"{ background: '#ededed' }"
:data=
"dataList"
v-loading=
"loading"
v-bind=
"$attrs"
ref=
"tableRef"
>
<el-table-column
align=
"center"
v-bind=
"item || {}"
v-for=
"item in columns"
:key=
"item.prop"
>
<
template
#
default=
"scope"
v-if=
"item.slots || item.computed"
>
<slot
:name=
"item.slots"
v-bind=
"scope"
v-if=
"item.slots"
></slot>
...
...
@@ -183,7 +203,8 @@ defineExpose({ refetch, tableRef })
@
size-change=
"pageSizeChange"
@
current-change=
"fetchList()"
:hide-on-single-page=
"true"
v-if=
"hasPagination"
>
v-if=
"hasPagination"
>
</el-pagination>
</div>
</div>
...
...
src/modules/connect/components/FormDialog.vue
浏览文件 @
b1acbeb4
...
...
@@ -36,59 +36,64 @@ const platformList: PlatformItem[] = [
type
:
'2'
,
type_name
:
'钉钉'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'AgentId'
,
prop
:
'agentId'
,
value
:
''
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
''
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
钉钉
'
},
{
label
:
'AgentId'
,
prop
:
'agentId'
,
value
:
'
8441459810
'
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
'
dingigucs3beqlotpf24
'
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
'
6dNRvuOzvX_xq5N9tFdjepdf3FeooN25yUZK6ammDbPUVq9sfdXD-sKUg
'
}
]
},
{
type
:
'3'
,
type_name
:
'小鹅通'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'app_id'
,
prop
:
'app_id'
,
value
:
''
},
{
label
:
'client_id'
,
prop
:
'client_id'
,
value
:
''
},
{
label
:
'secret_key'
,
prop
:
'secret_key'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
小鹅通
'
},
{
label
:
'app_id'
,
prop
:
'app_id'
,
value
:
'
appc4bolgenF58
'
},
{
label
:
'client_id'
,
prop
:
'client_id'
,
value
:
'
_5e7f809dd6317_qSMuUoAi?type=2SDK
'
},
{
label
:
'secret_key'
,
prop
:
'secret_key'
,
value
:
'
xiao_5ac1dd24803ae_GtfAOxiS1pdf3FeooN2huhu92WRE52S-SkOh
'
}
]
},
{
type
:
'4'
,
type_name
:
'问卷星'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
''
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
问卷星
'
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
'
82286f9c5114dc2bda214cd9567dodc
'
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
'
pages/wjxqList/wjxqList?activityId= P251FBP
'
}
]
},
{
type
:
'5'
,
type_name
:
'今日头条'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
}]
},
{
type
:
'5'
,
type_name
:
'今日头条'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
今日头条
'
}]
},
{
type
:
'6'
,
type_name
:
'抖音'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'应用类别'
,
prop
:
'dyInput1'
,
value
:
''
},
{
label
:
'授权域回调'
,
prop
:
'dyInput2'
,
value
:
''
},
{
label
:
'网站应用简介'
,
prop
:
'dyInput3'
,
value
:
''
},
{
label
:
'应用官网'
,
prop
:
'dyInput4'
,
value
:
''
},
{
label
:
'联系人姓名'
,
prop
:
'dyInput5'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'抖音'
},
{
label
:
'应用类别'
,
prop
:
'dyInput1'
,
value
:
'短视频分享与社交平台'
},
{
label
:
'授权域回调'
,
prop
:
'dyInput2'
,
value
:
'https://douyin.xiaokefu.com.cn/douYin/push/19872884'
},
{
label
:
'网站应用简介'
,
prop
:
'dyInput3'
,
value
:
'不仅是下载抖音应用程序的官方渠道,也是一个展示抖音最新动态、功能更新和推广活动的平台。用户可以通过官网了解抖音的特色功能、查看热门视频、参与互动活动,以及获取帮助和教程等。官网还为创作者和企业提供了一个展示空间,让他们了解如何利用抖音平台进行内容创作、品牌推广和电子商务等。'
},
{
label
:
'应用官网'
,
prop
:
'dyInput4'
,
value
:
'https://www.douyin.com'
},
{
label
:
'联系人姓名'
,
prop
:
'dyInput5'
,
value
:
'清控紫荆(北京)教育股份有限公司'
}
]
},
{
type
:
'7'
,
type_name
:
'微博'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
''
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
微博
'
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
'
1206405345
'
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
'
6a6095e113cd28fde6e14c7b7145c5c5
'
}
]
},
{
type
:
'8'
,
type_name
:
'小红书'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
''
},
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
小红书
'
},
{
label
:
'AppKey'
,
prop
:
'appKey'
,
value
:
'
6c1dd8dd64d074d56124c751f6bc240b
'
},
{
label
:
'AppSecret'
,
prop
:
'appSecret'
,
value
:
''
}
]
},
...
...
@@ -96,40 +101,45 @@ const platformList: PlatformItem[] = [
type
:
'9'
,
type_name
:
'邮箱'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'client_id'
,
prop
:
'client_id'
,
value
:
''
},
{
label
:
'client_secret'
,
prop
:
'client_secret'
,
value
:
''
},
{
label
:
'token URL'
,
prop
:
'token'
,
value
:
''
},
{
label
:
'API URL'
,
prop
:
'apiUrl'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
邮箱
'
},
{
label
:
'client_id'
,
prop
:
'client_id'
,
value
:
'
swanzhong
'
},
{
label
:
'client_secret'
,
prop
:
'client_secret'
,
value
:
'
563a8c6a89d2368194c1c7889c508b34
'
},
{
label
:
'token URL'
,
prop
:
'token'
,
value
:
'
openapi/user/get
'
},
{
label
:
'API URL'
,
prop
:
'apiUrl'
,
value
:
'
openapi/user/check
'
}
]
},
{
type
:
'10'
,
type_name
:
'短信'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'client_id'
,
prop
:
'client_id'
,
value
:
''
},
{
label
:
'SdkAppId'
,
prop
:
'sdkAppId'
,
value
:
''
},
{
label
:
'token URL'
,
prop
:
'token'
,
value
:
''
},
{
label
:
'API URL'
,
prop
:
'apiUrl'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
短信
'
},
{
label
:
'client_id'
,
prop
:
'client_id'
,
value
:
'
FbFgN2of-mlc
'
},
{
label
:
'SdkAppId'
,
prop
:
'sdkAppId'
,
value
:
'
CV3X1%2FJG7mdNZm03l9puvwPAktmfw1aj8XvBb6sm696MqoW57
'
},
{
label
:
'token URL'
,
prop
:
'token'
,
value
:
'
https://oauth-login.cloud.ali.com/oauth2/v3/token
'
},
{
label
:
'API URL'
,
prop
:
'apiUrl'
,
value
:
'
oauth2v3wPAktm
'
}
]
},
{
type_name
:
'内部消息'
,
type
:
'11'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
}]
},
{
type_name
:
'内部消息'
,
type
:
'11'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
内部消息
'
}]
},
{
type
:
'12'
,
type_name
:
'自定义'
,
config_attributes
:
[
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
},
{
label
:
'APP类型'
,
prop
:
'appType'
,
value
:
''
},
{
label
:
'AppId'
,
prop
:
'appId'
,
value
:
''
}
{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
自定义
'
},
{
label
:
'APP类型'
,
prop
:
'appType'
,
value
:
'
自定义
'
},
{
label
:
'AppId'
,
prop
:
'appId'
,
value
:
'
Custom App ID
'
}
]
},
{
type
:
'13'
,
type_name
:
'紫荆表单'
,
icon
:
'99'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
}]
},
{
type
:
'13'
,
type_name
:
'紫荆表单'
,
icon
:
'99'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'紫荆表单'
}]
},
{
type
:
'14'
,
type_name
:
'小程序'
,
icon
:
'100'
,
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
''
}],
config_attributes
:
[{
label
:
'连接名称'
,
prop
:
'name'
,
value
:
'
小程序
'
}],
async
onBeforeNext
(
stepActive
)
{
if
(
stepActive
===
2
)
{
const
res
=
await
handleSubmit
()
...
...
@@ -215,7 +225,8 @@ async function handleSave() {
:title=
"props.data?.id ? '编辑连接' : '新建连接'"
:close-on-click-modal=
"false"
width=
"1050px"
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<el-tabs
v-model=
"stepActive"
class=
"demo-tabs"
>
<!-- 第一步 -->
<el-tab-pane
disabled
lazy
label=
"选择连接类型"
:name=
"1"
v-if=
"!props.data?.id"
>
...
...
src/modules/connect/components/ListItem.vue
浏览文件 @
b1acbeb4
<
script
setup
lang=
"ts"
>
import
{
Delete
,
Edit
,
MoreFilled
,
EditPen
,
User
,
Avatar
,
PieChart
,
UserFilled
}
from
'@element-plus/icons-vue'
import
{
Delete
,
Edit
,
MoreFilled
,
EditPen
,
User
,
Avatar
,
PieChart
,
UserFilled
,
View
}
from
'@element-plus/icons-vue'
import
{
ElMessageBox
,
ElMessage
}
from
'element-plus'
import
Icon
from
'@/components/ConnectionIcon.vue'
import
{
deleteConnection
}
from
'../api'
...
...
@@ -40,7 +40,7 @@ function handleRemove() {
})
}
// 去查看
const
router
View
=
function
()
{
const
handle
View
=
function
()
{
router
.
push
({
path
:
'/connect/view'
,
query
:
{
id
:
props
.
data
.
id
}
})
}
...
...
@@ -70,7 +70,7 @@ const handleStudentFollow = function () {
</
script
>
<
template
>
<div
class=
"connect-item"
@
click=
"routerView"
>
<div
class=
"connect-item"
>
<div
class=
"connect-item_top"
>
<!--
<div
class=
"connect-item__edit"
>
<img
@
click=
"edit"
src=
"https://webapp-pub.ezijing.com/pages/assa/dml_edit.png"
/>
...
...
@@ -92,6 +92,10 @@ const handleStudentFollow = function () {
</
template
>
<
template
#
default
>
<ul
class=
"connect-item_tool"
>
<li
@
click
.
stop=
"handleView"
v-if=
"userStore.role?.id !== 1"
>
<el-icon
size=
"16"
color=
"#000"
><View
/></el-icon>
<span>
查看
</span>
</li>
<li
@
click
.
stop=
"handleStudentFollow"
v-if=
"userStore.role?.id === 1"
>
<el-icon
size=
"16"
color=
"#000"
><UserFilled
/></el-icon>
<span>
用户触达
</span>
...
...
src/modules/connect/components/UserDataDialog.vue
浏览文件 @
b1acbeb4
...
...
@@ -27,7 +27,7 @@ let ruleForm = $ref<any>({
name
:
1
,
name_value
:
''
,
status
:
1
,
gender
:
1
,
gender
:
1
00
,
mobile
:
1
,
create_data
:
''
,
type_name
:
''
...
...
@@ -80,6 +80,13 @@ const submitForm = async (formEl: FormInstance | undefined, bl: string) => {
}
const
rules
=
[{
required
:
true
}]
let
genderWoman
=
ref
(
0
)
watchEffect
(()
=>
{
if
(
ruleForm
.
gender
>
100
)
ruleForm
.
gender
=
100
if
(
ruleForm
.
gender
<
0
)
ruleForm
.
gender
=
0
genderWoman
.
value
=
100
-
ruleForm
.
gender
})
</
script
>
<
template
>
...
...
@@ -107,6 +114,7 @@ const rules = [{ required: true }]
<el-radio
:value=
"5000"
>
5000
</el-radio>
<el-radio
:value=
"10000"
>
10000
</el-radio>
</el-radio-group>
<span
style=
"color: #ccc;font-size: 12px;line-height: 100%;"
>
注意:为了保障系统性能,您最多只能导入10000条数据
</span>
</el-form-item>
<el-form-item
label=
"请选择数据覆盖形式:"
:rules=
"rules"
>
<el-radio-group
v-model=
"ruleForm.cover_type"
>
...
...
@@ -134,11 +142,17 @@ const rules = [{ required: true }]
</el-radio-group>
</el-form-item>
<el-form-item
label=
"性别"
:rules=
"rules"
>
<el-radio-group
v-model=
"ruleForm.gender"
>
<
!--
<
el-radio-group
v-model=
"ruleForm.gender"
>
<el-radio
:value=
"1"
>
随机
</el-radio>
<el-radio
:value=
"2"
>
男
</el-radio>
<el-radio
:value=
"3"
>
女
</el-radio>
</el-radio-group>
</el-radio-group>
-->
<div>
<div
style=
"display: flex"
>
男
<el-input
v-model=
"ruleForm.gender"
></el-input>
%
</div>
<div
style=
"display: flex; margin-top: 10px"
>
女
<el-input
v-model=
"genderWoman"
></el-input>
%
</div>
</div>
</el-form-item>
<el-form-item
label=
"手机号吗"
:rules=
"rules"
>
<el-radio-group
v-model=
"ruleForm.mobile"
>
...
...
src/modules/connect/views/View.vue
浏览文件 @
b1acbeb4
...
...
@@ -41,7 +41,10 @@ const platformList = [
{
title
:
'重新获取公众号信息'
,
async
onClick
()
{
await
asyncOfficialAccountInfo
({
connection_id
:
connectId
.
value
,
appid
:
getAttributeValueByProp
(
'appid'
)
})
await
asyncOfficialAccountInfo
({
connection_id
:
connectId
.
value
,
appid
:
getAttributeValueByProp
(
'appid'
)
})
ElMessage
.
success
(
'重新获取公众号信息成功'
)
}
},
...
...
@@ -49,8 +52,14 @@ const platformList = [
title
:
'重新获取公众号粉丝'
,
async
onClick
()
{
const
nikeName
=
getAttributeValueByProp
(
'nikeName'
)
await
ElMessageBox
.
confirm
(
`同步微信公众号粉丝能够将微信粉丝的最新信息同步到本系统中,您确定现在要开始同步公众号“
${
nikeName
}
”的粉丝吗?`
,
'同步微信公众号粉丝'
)
await
asyncOfficialAccountUsers
({
connection_id
:
connectId
.
value
,
appid
:
getAttributeValueByProp
(
'appid'
)
})
await
ElMessageBox
.
confirm
(
`同步微信公众号粉丝能够将微信粉丝的最新信息同步到本系统中,您确定现在要开始同步公众号“
${
nikeName
}
”的粉丝吗?`
,
'同步微信公众号粉丝'
)
await
asyncOfficialAccountUsers
({
connection_id
:
connectId
.
value
,
appid
:
getAttributeValueByProp
(
'appid'
)
})
ElMessage
.
success
(
`已经开始同步公众号“
${
nikeName
}
”的粉丝,完成时间取决于您公众号的粉丝数量,请耐心等待。`
)
}
}
...
...
@@ -544,7 +553,9 @@ const surveyKingDialogVisible = ref<boolean>(false)
<el-tabs
class=
"tabs-box"
v-for=
"(item, index) in platformDataList"
:key=
"index"
>
<el-tab-pane
:label=
"item.title"
>
<div
class=
"tag-box"
v-if=
"item.children.length"
>
<div
class=
"tag"
v-for=
"cItem in item.children"
:key=
"cItem.title"
@
click=
"handleClick(cItem)"
>
{{ cItem.title }}
</div>
<div
class=
"tag"
v-for=
"cItem in item.children"
:key=
"cItem.title"
@
click=
"handleClick(cItem)"
>
{{ cItem.title }}
</div>
</div>
<div
class=
"tag-null"
v-else
>
无数据
</div>
</el-tab-pane>
...
...
@@ -554,7 +565,8 @@ const surveyKingDialogVisible = ref<boolean>(false)
v-model=
"surveyKingDialogVisible"
:account=
"getAttributeValueByProp('account')"
:password=
"getAttributeValueByProp('password')"
v-if=
"detail?.type === '13'"
></SurveyKingDialog>
v-if=
"detail?.type === '13'"
></SurveyKingDialog>
</template>
<
style
lang=
"scss"
>
...
...
src/modules/metadata/event/components/FieldDialog.vue
浏览文件 @
b1acbeb4
...
...
@@ -2,7 +2,7 @@
import
type
{
EventProp
,
EventDetailProp
,
EventAttributesProp
}
from
'../types'
import
{
ElMessage
}
from
'element-plus'
import
{
useMapStore
}
from
'@/stores/map'
import
{
Close
}
from
'@element-plus/icons-vue'
import
{
Close
,
QuestionFilled
}
from
'@element-plus/icons-vue'
import
{
getMetaEventDetail
,
updateAttributes
,
getIsDeleteAttribute
}
from
'../api'
const
store
=
useMapStore
()
...
...
@@ -86,10 +86,37 @@ const changeFormatType = function (row: any) {
break
}
}
const
popoverText
=
function
(
row
:
any
)
{
let
t
=
''
if
(
row
.
type
===
'1'
)
{
t
=
'你可以在这个字段中输入最多25个字符'
}
if
(
row
.
type
===
'2'
)
{
t
=
'该字段可以存储最多四位数的整数'
}
if
(
row
.
type
===
'3'
)
{
t
=
'数字的总长度为20位,包括整数部分和小数部分'
}
if
(
row
.
type
===
'4'
)
{
t
=
'yyyy: 表示四位数的年份,例如2023年会被表示为“2023”。<br/>mm: 表示两位数的月份,从01到12,例如3月表示为“03”。<br/>dd: 表示两位数的日期,从01到31,具体取决于月份和是否为闰年。<br/>例如“2023-04-01”代表的是2023年4月1日'
}
if
(
row
.
type
===
'5'
)
{
t
=
'yyyy: 表示四位数的年份,例如2023。<br/>mm: 表示两位数的月份,从01到12表示1月到12月。<br/>dd: 表示两位数的日期,从01到31,依据具体月份和是否为闰年。<br/>hh: 表示两位数的小时,使用24小时制,从00到23表示。<br/>mm: 表示两位数的分钟,从00到59。<br/>ss: 表示两位数的秒,从00到59。<br/>例如"2023-04-01 15:30:45"表示的是2023年4月1日下午3点30分45秒'
}
return
t
}
</
script
>
<
template
>
<el-dialog
title=
"事件属性"
:close-on-click-modal=
"false"
width=
"800px"
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<el-dialog
title=
"事件属性"
:close-on-click-modal=
"false"
width=
"800px"
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<div
style=
"display: flex; justify-content: space-around"
>
<el-form
label-width=
"120px"
>
<el-form-item
label=
"事件英文名称:"
>
{{
eventDetail
?.
english_name
}}
</el-form-item>
...
...
@@ -120,23 +147,55 @@ const changeFormatType = function (row: any) {
</el-table-column>
<el-table-column
label=
"字段类型"
>
<
template
#
default=
"scope"
>
<el-select
@
change=
"changeFormatType(scope.row)"
:disabled=
"scope.row.id !== ''"
v-model=
"scope.row.type"
placeholder=
"请选择"
>
<el-option
:label=
"item.label"
:value=
"item.value"
:key=
"item.id"
v-for=
"item in experimentAttributeOptions"
></el-option>
<el-select
@
change=
"changeFormatType(scope.row)"
:disabled=
"scope.row.id !== ''"
v-model=
"scope.row.type"
placeholder=
"请选择"
>
<el-option
:label=
"item.label"
:value=
"item.value"
:key=
"item.id"
v-for=
"item in experimentAttributeOptions"
></el-option>
</el-select>
</
template
>
</el-table-column>
<el-table-column
label=
"字段格式"
>
<
template
#
default=
"scope"
>
<el-select
:disabled=
"scope.row.id !== ''"
v-if=
"scope.row.type === '4' || scope.row.type === '5'"
v-model=
"scope.row.format"
placeholder=
"请选择"
>
<el-select
:disabled=
"scope.row.id !== ''"
v-if=
"scope.row.type === '4' || scope.row.type === '5'"
v-model=
"scope.row.format"
placeholder=
"请选择"
>
<el-option
v-if=
"scope.row.type !== '5'"
label=
"yyyy-mm-dd"
value=
"yyyy-mm-dd"
></el-option>
<el-option
v-if=
"scope.row.type !== '4'"
label=
"yyyy-mm-dd hh:mm:ss"
value=
"yyyy-mm-dd hh:mm:ss"
></el-option>
<el-option
v-if=
"scope.row.type !== '4'"
label=
"yyyy-mm-dd hh:mm:ss"
value=
"yyyy-mm-dd hh:mm:ss"
></el-option>
</el-select>
<el-input
v-else
:disabled=
"scope.row.id !== ''"
type=
"number"
v-model=
"scope.row.format"
:placeholder=
"scope.row.type === '1' ? '请输入字符串长度' : '请输入长度'"
></el-input>
:placeholder=
"scope.row.type === '1' ? '请输入字符串长度' : '请输入长度'"
></el-input>
</
template
>
</el-table-column>
<el-table-column
width=
"30"
>
<
template
#
default=
"scope"
>
<el-popover
placement=
"top-start"
:width=
"300"
trigger=
"hover"
:title=
"scope?.row.type_name"
>
<template
#
reference
>
<div
style=
"display: flex; justify-content: center; cursor: pointer"
>
<el-icon
size=
"20"
><QuestionFilled
/></el-icon>
</div>
</
template
>
<div
v-html=
"popoverText(scope.row)"
></div>
</el-popover>
</template>
</el-table-column>
<el-table-column
width=
"30"
>
...
...
src/modules/metadata/user/components/FormDialog.vue
浏览文件 @
b1acbeb4
...
...
@@ -4,6 +4,7 @@ import type { FormInstance, FormRules } from 'element-plus'
import
{
ElMessage
}
from
'element-plus'
import
{
useMapStore
}
from
'@/stores/map'
import
{
createMemberMeta
,
updateMemberMeta
}
from
'../api'
import
{
QuestionFilled
}
from
'@element-plus/icons-vue'
const
store
=
useMapStore
()
...
...
@@ -94,10 +95,37 @@ const changeFormatType = function () {
break
}
}
const
popoverText
=
function
(
type
:
any
)
{
let
t
=
''
if
(
type
===
'1'
)
{
t
=
'你可以在这个字段中输入最多25个字符'
}
if
(
type
===
'2'
)
{
t
=
'该字段可以存储最多四位数的整数'
}
if
(
type
===
'3'
)
{
t
=
'数字的总长度为20位,包括整数部分和小数部分'
}
if
(
type
===
'4'
)
{
t
=
'yyyy: 表示四位数的年份,例如2023年会被表示为“2023”。<br/>mm: 表示两位数的月份,从01到12,例如3月表示为“03”。<br/>dd: 表示两位数的日期,从01到31,具体取决于月份和是否为闰年。<br/>例如“2023-04-01”代表的是2023年4月1日'
}
if
(
type
===
'5'
)
{
t
=
'yyyy: 表示四位数的年份,例如2023。<br/>mm: 表示两位数的月份,从01到12表示1月到12月。<br/>dd: 表示两位数的日期,从01到31,依据具体月份和是否为闰年。<br/>hh: 表示两位数的小时,使用24小时制,从00到23表示。<br/>mm: 表示两位数的分钟,从00到59。<br/>ss: 表示两位数的秒,从00到59。<br/>例如"2023-04-01 15:30:45"表示的是2023年4月1日下午3点30分45秒'
}
return
t
}
</
script
>
<
template
>
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<el-dialog
:title=
"title"
:close-on-click-modal=
"false"
width=
"600px"
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<el-form
ref=
"formRef"
:model=
"form"
:rules=
"rules"
label-suffix=
":"
label-width=
"122px"
>
<el-form-item
label=
"属性ID"
v-if=
"isUpdate"
>
{{
props
.
data
?.
id
}}
...
...
@@ -109,16 +137,48 @@ const changeFormatType = function () {
<el-input
v-model=
"form.name"
placeholder=
"请输入"
/>
</el-form-item>
<el-form-item
label=
"属性字段类型"
prop=
"type"
>
<el-select
:disabled=
"isUpdate"
@
change=
"changeFormatType"
v-model=
"form.type"
style=
"width: 100%"
placeholder=
"请选择"
>
<el-option
:label=
"item.label"
:value=
"item.value"
:key=
"item.id"
v-for=
"item in experimentAttributeOptions"
></el-option>
<el-select
:disabled=
"isUpdate"
@
change=
"changeFormatType"
v-model=
"form.type"
style=
"width: 100%"
placeholder=
"请选择"
>
<el-option
:label=
"item.label"
:value=
"item.value"
:key=
"item.id"
v-for=
"item in experimentAttributeOptions"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"属性字段格式"
prop=
"format"
v-if=
"form.type !== ''"
>
<el-select
:disabled=
"isUpdate"
v-if=
"form.type === '4' || form.type === '5'"
v-model=
"form.format"
style=
"width: 100%"
placeholder=
"请选择"
>
<el-select
:disabled=
"isUpdate"
v-if=
"form.type === '4' || form.type === '5'"
v-model=
"form.format"
style=
"width: 93%; margin-right: 10px"
placeholder=
"请选择"
>
<el-option
v-if=
"form.type !== '5'"
label=
"yyyy-mm-dd"
value=
"yyyy-mm-dd"
></el-option>
<el-option
v-if=
"form.type !== '4'"
label=
"yyyy-mm-dd hh:mm:ss"
value=
"yyyy-mm-dd hh:mm:ss"
></el-option>
</el-select>
<el-input
:disabled=
"isUpdate"
type=
"number"
v-else
v-model=
"form.format"
:placeholder=
"formatPlaceholder"
/>
<el-input
style=
"width: 93%; margin-right: 10px"
:disabled=
"isUpdate"
type=
"number"
v-else
v-model=
"form.format"
:placeholder=
"formatPlaceholder"
/>
<el-popover
placement=
"top-start"
:width=
"300"
trigger=
"hover"
:title=
"form.type_name"
>
<template
#
reference
>
<div
style=
"display: flex; justify-content: center; cursor: pointer"
>
<el-icon
size=
"20"
><QuestionFilled
/></el-icon>
</div>
</
template
>
<div
v-html=
"popoverText(form.type)"
></div>
</el-popover>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-switch
v-model=
"form.status"
active-text=
"生效"
inactive-text=
"失效"
active-value=
"1"
inactive-value=
"0"
/>
...
...
src/modules/user/components/ViewProgressDialog.vue
浏览文件 @
b1acbeb4
<
script
setup
lang=
"ts"
>
import
{
getProgress
}
from
'../api'
import
AppList
from
'@/components/base/AppList.vue'
defineEmits
<
{
(
e
:
'update'
):
void
...
...
@@ -34,7 +35,8 @@ const listOptions = computed(() => {
}
},
{
label
:
'更新人'
,
prop
:
'updated_operator_name'
},
{
label
:
'导入时间'
,
prop
:
'created_time'
}
{
label
:
'导入时间'
,
prop
:
'created_time'
},
{
label
:
'操作'
,
slots
:
'table-x'
,
width
:
'100'
}
]
}
})
...
...
@@ -47,6 +49,12 @@ const bytesToSize = (bytes: number) => {
return
(
bytes
/
Math
.
pow
(
k
,
i
)).
toPrecision
(
3
)
+
' '
+
sizes
[
i
]
}
const
appList
=
$ref
<
InstanceType
<
typeof
AppList
>
|
null
>
(
null
)
const
refetch
=
function
()
{
appList
?.
refetch
()
}
</
script
>
<
template
>
<el-dialog
...
...
@@ -54,7 +62,12 @@ const bytesToSize = (bytes: number) => {
title=
"导入用户数据"
:close-on-click-modal=
"false"
width=
"900px"
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
></AppList>
@
update:modelValue=
"value => $emit('update:modelValue', value)"
>
<AppList
v-bind=
"listOptions"
ref=
"appList"
>
<template
#
table-x=
"
{ row }">
<el-button
type=
"primary"
plain
@
click=
"refetch"
v-permission=
"'v1-experiment-member-delete'"
>
刷新
</el-button>
</
template
>
</AppList>
</el-dialog>
</template>
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论