|
@@ -4,16 +4,7 @@
|
|
|
<t-tab-panel :value="1" label="外观">
|
|
|
<t-space direction="vertical" class="py-16 w-full">
|
|
|
<div class="form-item px-12">
|
|
|
- <label>ID</label>
|
|
|
- <t-input
|
|
|
- class="w-full"
|
|
|
- placeholder="唯一标识"
|
|
|
- v-model.number="data.pen.id"
|
|
|
- @change="changeValue('id')"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <div class="form-item px-12" style="margin-top: -12px">
|
|
|
- <label>名称</label>
|
|
|
+ <label style="width: 50px">名称</label>
|
|
|
<t-input
|
|
|
class="w-full"
|
|
|
placeholder="名称"
|
|
@@ -22,13 +13,31 @@
|
|
|
/>
|
|
|
</div>
|
|
|
<div class="form-item px-12" style="margin-top: -12px">
|
|
|
- <label>标签</label>
|
|
|
- <t-taginput
|
|
|
- class="w-full"
|
|
|
- placeholder="标签"
|
|
|
- v-model="data.pen.tags"
|
|
|
- @change="changeValue('tags')"
|
|
|
- />
|
|
|
+ <label style="width: 50px">分组</label>
|
|
|
+ <t-select-input
|
|
|
+ v-model:inputValue="data.inputTag"
|
|
|
+ :value="data.pen.tags"
|
|
|
+ v-model:popupVisible="data.tagPopupVisible"
|
|
|
+ allow-input
|
|
|
+ placeholder="请输入或选择分组"
|
|
|
+ multiple
|
|
|
+ @tag-change="onChangeInputTag"
|
|
|
+ @focus="data.tagPopupVisible = true"
|
|
|
+ @blur="data.tagPopupVisible = false"
|
|
|
+ :tag-input-props="{ excessTagsDisplayType: 'scroll' }"
|
|
|
+ >
|
|
|
+ <template #panel>
|
|
|
+ <ul style="padding: 8px 12px">
|
|
|
+ <li
|
|
|
+ v-for="item in data.groups"
|
|
|
+ :key="item"
|
|
|
+ @click="onSelectTag(item)"
|
|
|
+ >
|
|
|
+ {{ item }}
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </template>
|
|
|
+ </t-select-input>
|
|
|
</div>
|
|
|
<t-divider style="margin: -8px 0" />
|
|
|
<div class="form-item" style="margin-top: -12px">
|
|
@@ -155,16 +164,7 @@
|
|
|
v-model="data.pen.color"
|
|
|
@change="changeValue('color')"
|
|
|
/>
|
|
|
- <label style="width: 44px">前景</label>
|
|
|
- <t-color-picker
|
|
|
- class="simple mt-8 mr-4"
|
|
|
- format="CSS"
|
|
|
- :color-modes="['monochrome']"
|
|
|
- :show-primary-color-preview="false"
|
|
|
- v-model="data.pen.background"
|
|
|
- @change="changeValue('background')"
|
|
|
- />
|
|
|
- <label style="width: 44px">背景</label>
|
|
|
+ <label style="width: 64px">前景颜色</label>
|
|
|
|
|
|
<t-color-picker
|
|
|
class="simple mt-8 mr-4"
|
|
@@ -174,7 +174,7 @@
|
|
|
v-model="data.pen.hoverColor"
|
|
|
@change="changeValue('hoverColor')"
|
|
|
/>
|
|
|
- <label style="width: 44px">悬停</label>
|
|
|
+ <label style="width: 64px">悬停颜色</label>
|
|
|
|
|
|
<t-color-picker
|
|
|
class="simple mt-8 mr-4"
|
|
@@ -184,7 +184,7 @@
|
|
|
v-model="data.pen.activeColor"
|
|
|
@change="changeValue('activeColor')"
|
|
|
/>
|
|
|
- <label style="width: 44px">选中</label>
|
|
|
+ <label style="width: 64px">选中颜色</label>
|
|
|
</div>
|
|
|
|
|
|
<div class="form-item">
|
|
@@ -364,6 +364,70 @@
|
|
|
<div class="mt-4" style="font-size: 12px">连接样式</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div class="form-item">
|
|
|
+ <label style="width: 32px">背景</label>
|
|
|
+ <div class="ml-8">
|
|
|
+ <t-radio-group
|
|
|
+ size="small"
|
|
|
+ v-model="data.pen.bkType"
|
|
|
+ :default-value="0"
|
|
|
+ @change="changeValue('bkType')"
|
|
|
+ >
|
|
|
+ <t-radio-button :value="0"> 纯色 </t-radio-button>
|
|
|
+ <t-radio-button :value="1"> 线性渐变 </t-radio-button>
|
|
|
+ <t-radio-button :value="2"> 径向渐变 </t-radio-button>
|
|
|
+ </t-radio-group>
|
|
|
+ <div v-if="data.pen.bkType === 0" class="mt-8 -ml-8">
|
|
|
+ <t-color-picker
|
|
|
+ class="w-full"
|
|
|
+ format="CSS"
|
|
|
+ :color-modes="['monochrome']"
|
|
|
+ :show-primary-color-preview="false"
|
|
|
+ v-model="data.pen.background"
|
|
|
+ @change="changeValue('background')"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-else-if="data.pen.bkType === 1"
|
|
|
+ class="mt-8 -ml-8"
|
|
|
+ style="width: 200px"
|
|
|
+ >
|
|
|
+ <t-color-picker
|
|
|
+ class="w-full"
|
|
|
+ format="CSS"
|
|
|
+ :color-modes="['linear-gradient']"
|
|
|
+ :show-primary-color-preview="false"
|
|
|
+ v-model="data.pen.gradientColors"
|
|
|
+ @change="changeValue('gradientColors')"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <div
|
|
|
+ v-else-if="data.pen.bkType === 2"
|
|
|
+ class="mt-8 flex middle"
|
|
|
+ >
|
|
|
+ <t-color-picker
|
|
|
+ class="simple"
|
|
|
+ format="CSS"
|
|
|
+ :color-modes="['linear-gradient']"
|
|
|
+ :show-primary-color-preview="false"
|
|
|
+ v-model="data.pen.gradientColors"
|
|
|
+ @change="changeValue('gradientColors')"
|
|
|
+ />
|
|
|
+
|
|
|
+ <t-input-number
|
|
|
+ theme="column"
|
|
|
+ placeholder="渐变半径"
|
|
|
+ v-model="data.pen.gradientRadius"
|
|
|
+ :min="0"
|
|
|
+ :max="1"
|
|
|
+ :step="0.1"
|
|
|
+ @change="changeValue('gradientRadius')"
|
|
|
+ class="ml-8"
|
|
|
+ style="width: 100px"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="form-item">
|
|
|
<label style="width: 32px">阴影 </label>
|
|
|
<div class="flex middle ml-8">
|
|
@@ -913,6 +977,12 @@ const fonts = [
|
|
|
const { selections } = useSelection();
|
|
|
|
|
|
onBeforeMount(() => {
|
|
|
+ const d = meta2d.store.data as any;
|
|
|
+ if (!d.groups) {
|
|
|
+ d.groups = [];
|
|
|
+ }
|
|
|
+ data.groups = d.groups;
|
|
|
+
|
|
|
data.pen = selections.pen;
|
|
|
if (!data.pen.props) {
|
|
|
data.pen.props = {};
|
|
@@ -940,6 +1010,12 @@ onBeforeMount(() => {
|
|
|
},
|
|
|
];
|
|
|
}
|
|
|
+ if (!data.pen.tags) {
|
|
|
+ data.pen.tags = [];
|
|
|
+ }
|
|
|
+ if (data.pen.bkType == undefined) {
|
|
|
+ data.pen.bkType = 0;
|
|
|
+ }
|
|
|
|
|
|
// 测试代码
|
|
|
data.pen.props.custom = [
|
|
@@ -1042,6 +1118,32 @@ const upload = () => {
|
|
|
uploadRef.value.triggerUpload();
|
|
|
};
|
|
|
|
|
|
+const onSelectTag = (tag: string) => {
|
|
|
+ data.tagPopupVisible = false;
|
|
|
+ if (data.pen.tags.includes(tag)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ data.pen.tags.push(tag);
|
|
|
+ changeValue('tags');
|
|
|
+};
|
|
|
+
|
|
|
+const onChangeInputTag = (currentTags: any, context: any) => {
|
|
|
+ const { trigger, index, item } = context;
|
|
|
+ if (['tag-remove', 'backspace'].includes(trigger)) {
|
|
|
+ data.pen.tags.splice(index, 1);
|
|
|
+ }
|
|
|
+ if (trigger === 'enter') {
|
|
|
+ onSelectTag(item);
|
|
|
+ const d = meta2d.store.data as any;
|
|
|
+ if (!d.groups.includes(item)) {
|
|
|
+ d.groups.push(item);
|
|
|
+ data.groups = d.groups;
|
|
|
+ }
|
|
|
+ data.inputTag = '';
|
|
|
+ }
|
|
|
+ data.tagPopupVisible = false;
|
|
|
+};
|
|
|
+
|
|
|
onUnmounted(() => {
|
|
|
meta2d.off('translatePens', getRect);
|
|
|
meta2d.off('resizePens', getRect);
|