|
@@ -1,6 +1,9 @@
|
|
|
<template>
|
|
|
<div class="props">
|
|
|
- <div class="real-times" v-if="pen.realTimes && pen.realTimes.length">
|
|
|
+ <div
|
|
|
+ class="real-times"
|
|
|
+ v-if="props.pen.realTimes && props.pen.realTimes.length"
|
|
|
+ >
|
|
|
<div class="grid head">
|
|
|
<div class="title">数据名</div>
|
|
|
<div class="title">值</div>
|
|
@@ -9,7 +12,7 @@
|
|
|
<t-icon name="more" />
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="grid" v-for="(item, i) in pen.realTimes">
|
|
|
+ <div class="grid" v-for="(item, i) in props.pen.realTimes">
|
|
|
<t-tooltip :content="item.key" placement="top">
|
|
|
<label class="label">{{ item.label }}</label>
|
|
|
</t-tooltip>
|
|
@@ -35,6 +38,13 @@
|
|
|
size="small"
|
|
|
@change="changeValue(item.key)"
|
|
|
/>
|
|
|
+ <div
|
|
|
+ v-else-if="item.type === 'array' || item.type === 'object'"
|
|
|
+ class="gray ellipsis"
|
|
|
+ style="height: 30px"
|
|
|
+ >
|
|
|
+ {{ JSON.stringify(pen[item.key]) }}
|
|
|
+ </div>
|
|
|
<t-input
|
|
|
v-else
|
|
|
v-model="pen[item.key]"
|
|
@@ -139,13 +149,9 @@
|
|
|
/>
|
|
|
<div class="desc mt-8">
|
|
|
固定数字:直接输入数字。例如:5<br />
|
|
|
- 随机范围数字
|
|
|
- <label class="vip-label" title="会员权限">VIP</label
|
|
|
- >:最小值-最大值。例如:0-1 或 0-100
|
|
|
+ 随机范围数字 :最小值-最大值。例如:0-1 或 0-100
|
|
|
<br />
|
|
|
- 随机指定数字
|
|
|
- <label class="vip-label" title="会员权限">VIP</label
|
|
|
- >:数字1,数字2,数字3... 。 例如:1,5,10,20<br />
|
|
|
+ 随机指定数字 :数字1,数字2,数字3... 。 例如:1,5,10,20<br />
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="flex-grow" v-else-if="addDataDialog.data.type === 'bool'">
|
|
@@ -156,12 +162,18 @@
|
|
|
</t-select>
|
|
|
<div class="desc mt-8">
|
|
|
固定:指定true或false<br />
|
|
|
- 随机
|
|
|
- <label class="vip-label" title="会员权限">VIP</label
|
|
|
- >:随机生成一个布尔值<br />
|
|
|
+ 随机:随机生成一个布尔值<br />
|
|
|
</div>
|
|
|
</div>
|
|
|
-
|
|
|
+ <div
|
|
|
+ class="flex-grow"
|
|
|
+ v-else-if="
|
|
|
+ addDataDialog.data.type === 'array' ||
|
|
|
+ addDataDialog.data.type === 'object'
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <CodeEditor v-model="addDataDialog.data.value" :json="true" />
|
|
|
+ </div>
|
|
|
<div class="flex-grow" v-else>
|
|
|
<t-input
|
|
|
class="w-full"
|
|
@@ -170,10 +182,8 @@
|
|
|
/>
|
|
|
<div class="desc mt-8">
|
|
|
固定文字:直接输入。例如:大屏可视化<br />
|
|
|
- 随机文本<label class="vip-label" title="会员权限">VIP</label
|
|
|
- >:[文本长度]。例如:[8] 或 [16]<br />
|
|
|
- 随机指定文本<label class="vip-label" title="会员权限">VIP</label
|
|
|
- >:{文本1,文本2,文本3...} 。 例如:{大屏, 可视化}
|
|
|
+ 随机文本:[文本长度]。例如:[8] 或 [16]<br />
|
|
|
+ 随机指定文本:{文本1,文本2,文本3...} 。 例如:{大屏, 可视化}
|
|
|
<br />
|
|
|
</div>
|
|
|
</div>
|
|
@@ -422,7 +432,7 @@ const {
|
|
|
proxy: { $forceUpdate },
|
|
|
}: any = getCurrentInstance();
|
|
|
|
|
|
-const { pen } = defineProps<{
|
|
|
+const props = defineProps<{
|
|
|
pen: any;
|
|
|
}>();
|
|
|
|
|
@@ -510,6 +520,14 @@ const typeOptions = [
|
|
|
label: '布尔',
|
|
|
value: 'bool',
|
|
|
},
|
|
|
+ {
|
|
|
+ label: '对象',
|
|
|
+ value: 'object',
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '数组',
|
|
|
+ value: 'array',
|
|
|
+ },
|
|
|
];
|
|
|
|
|
|
const addDataDialog = reactive<any>({
|
|
@@ -581,9 +599,9 @@ let timer: any;
|
|
|
|
|
|
onBeforeMount(() => {
|
|
|
// realTimesOptions - 扩展的动态数据下拉列表
|
|
|
- if (pen.realTimesOptions) {
|
|
|
+ if (props.pen.realTimesOptions) {
|
|
|
options.value[options.value.length - 1].divider = true;
|
|
|
- options.value.push(...pen.realTimesOptions);
|
|
|
+ options.value.push(...props.pen.realTimesOptions);
|
|
|
}
|
|
|
|
|
|
timer = setInterval($forceUpdate, 1000);
|
|
@@ -591,11 +609,11 @@ onBeforeMount(() => {
|
|
|
|
|
|
const addRealTime = (e: any) => {
|
|
|
if (e.keywords) {
|
|
|
- if (!pen.realTimes) {
|
|
|
- pen.realTimes = [];
|
|
|
+ if (!props.pen.realTimes) {
|
|
|
+ props.pen.realTimes = [];
|
|
|
}
|
|
|
|
|
|
- pen.realTimes.push({
|
|
|
+ props.pen.realTimes.push({
|
|
|
label: e.content,
|
|
|
key: e.value,
|
|
|
type: e.type,
|
|
@@ -625,8 +643,8 @@ const onChangeLabel = () => {
|
|
|
};
|
|
|
|
|
|
const onConfirmData = () => {
|
|
|
- if (!pen.realTimes) {
|
|
|
- pen.realTimes = [];
|
|
|
+ if (!props.pen.realTimes) {
|
|
|
+ props.pen.realTimes = [];
|
|
|
}
|
|
|
if (!addDataDialog.data.label || !addDataDialog.data.key) {
|
|
|
MessagePlugin.error('数据名或属性名不能为空!');
|
|
@@ -634,14 +652,14 @@ const onConfirmData = () => {
|
|
|
}
|
|
|
|
|
|
if (addDataDialog.header === '添加动态数据') {
|
|
|
- const found = pen.realTimes.findIndex((item: any) => {
|
|
|
+ const found = props.pen.realTimes.findIndex((item: any) => {
|
|
|
return item.key === addDataDialog.data.key;
|
|
|
});
|
|
|
if (found > -1) {
|
|
|
MessagePlugin.error('已经存在相同属性数据!');
|
|
|
return;
|
|
|
}
|
|
|
- pen.realTimes.push(addDataDialog.data);
|
|
|
+ props.pen.realTimes.push(addDataDialog.data);
|
|
|
}
|
|
|
|
|
|
addDataDialog.show = false;
|
|
@@ -655,7 +673,7 @@ const onMenuMore = (e: any, item: any, i: number) => {
|
|
|
addDataDialog.show = true;
|
|
|
break;
|
|
|
case 'delete':
|
|
|
- pen.realTimes.splice(i, 1);
|
|
|
+ props.pen.realTimes.splice(i, 1);
|
|
|
break;
|
|
|
default:
|
|
|
break;
|
|
@@ -766,7 +784,7 @@ const getBindsDesc = (item: any) => {
|
|
|
};
|
|
|
|
|
|
const changeValue = (prop: string) => {
|
|
|
- updatePen(pen, prop);
|
|
|
+ updatePen(props.pen, prop);
|
|
|
};
|
|
|
|
|
|
const onTrigger = (item: any) => {
|