Commit 651cc82e844e131a786b586a881512aa3f2790f7

Authored by fengtao
2 parents 3c1da43e d55a262b

Merge branch 'main' into ft_local_dev

... ... @@ -16,7 +16,7 @@ VITE_PUBLIC_PATH = /
16 16 # VITE_PROXY = [["/api","http://localhost:8080/api"],["/thingskit-drawio","http://localhost:3000/"]]
17 17 VITE_PROXY = [["/api","https://dev.thingskit.com/api"],["/thingskit-drawio","http://localhost:3000/"]]
18 18 # VITE_PROXY = [["/api","http://121.37.251.8:8080/api"],["/thingskit-drawio","http://localhost:3000/"]]
19   -# VITE_PROXY = [["/api","http://192.168.10.111:8080/api"],["/thingskit-drawio","http://192.168.10.106:8080/api"]]
  19 +# VITE_PROXY = [["/api","http://192.168.10.136:8080/api"],["/thingskit-drawio","http://192.168.10.136:8080/api"]]
20 20
21 21 # 实时数据的ws地址
22 22 # VITE_WEB_SOCKET = ws://localhost:8080/api/ws/plugins/telemetry?token=
... ...
... ... @@ -16,6 +16,11 @@
16 16 </Popconfirm>
17 17 </Authority>
18 18 </template>
  19 + <template #remark="{ record }">
  20 + <Tooltip :title="record.remark">
  21 + <div class="truncate w-full">{{ record.remark }}</div>
  22 + </Tooltip>
  23 + </template>
19 24 <template #action="{ record }">
20 25 <TableAction
21 26 :actions="[
... ... @@ -51,11 +56,11 @@
51 56 import EmailDetail from './EmailDetail.vue';
52 57 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
53 58 import { Authority } from '/@/components/Authority';
54   - import { Popconfirm } from 'ant-design-vue';
  59 + import { Popconfirm, Tooltip } from 'ant-design-vue';
55 60
56 61 export default defineComponent({
57 62 name: 'EmailLog',
58   - components: { EmailDetail, BasicTable, TableAction, Authority, Popconfirm },
  63 + components: { EmailDetail, BasicTable, TableAction, Authority, Popconfirm, Tooltip },
59 64 setup() {
60 65 const [registerModal, { openModal }] = useModal();
61 66 const [registerTable, { reload, setProps }] = useTable({
... ...
... ... @@ -16,6 +16,11 @@
16 16 </Popconfirm>
17 17 </Authority>
18 18 </template>
  19 + <template #remark="{ record }">
  20 + <Tooltip :title="record.remark">
  21 + <div class="truncate w-full">{{ record.remark }}</div>
  22 + </Tooltip>
  23 + </template>
19 24 <template #action="{ record }">
20 25 <TableAction
21 26 :actions="[
... ... @@ -45,7 +50,7 @@
45 50 import { defineComponent, h, nextTick } from 'vue';
46 51 import { BasicTable, useTable, TableAction } from '/@/components/Table';
47 52 import { columns, searchFormSchema } from './sms.data';
48   - import { Modal, Popconfirm } from 'ant-design-vue';
  53 + import { Modal, Popconfirm, Tooltip } from 'ant-design-vue';
49 54 import { smsLogPage, deleteSmsLog } from '/@/api/message/records';
50 55 import { JsonPreview } from '/@/components/CodeEditor';
51 56 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
... ... @@ -53,7 +58,7 @@
53 58
54 59 export default defineComponent({
55 60 name: 'SmsLog',
56   - components: { BasicTable, TableAction, Authority, Popconfirm },
  61 + components: { BasicTable, TableAction, Authority, Popconfirm, Tooltip },
57 62 setup() {
58 63 const [registerTable, { reload, setProps }] = useTable({
59 64 title: '短信发送列表',
... ... @@ -86,7 +91,7 @@
86 91 });
87 92 function handleQuery(record: Recordable) {
88 93 Modal.info({
89   - title: '当前配置',
  94 + title: '消息内容',
90 95 width: 480,
91 96 centered: true,
92 97 maskClosable: true,
... ...
... ... @@ -36,6 +36,14 @@ export const columns: BasicColumn[] = [
36 36 width: 160,
37 37 },
38 38 {
  39 + title: '备注',
  40 + dataIndex: 'remark',
  41 + width: 120,
  42 + slots: {
  43 + customRender: 'remark',
  44 + },
  45 + },
  46 + {
39 47 title: '发送时间',
40 48 dataIndex: 'sendTime',
41 49 width: 180,
... ...
... ... @@ -36,6 +36,14 @@ export const columns: BasicColumn[] = [
36 36 },
37 37 },
38 38 {
  39 + title: '备注',
  40 + dataIndex: 'remark',
  41 + width: 120,
  42 + slots: {
  43 + customRender: 'remark',
  44 + },
  45 + },
  46 + {
39 47 title: '发送时间',
40 48 dataIndex: 'sendTime',
41 49 width: 160,
... ...
... ... @@ -14,6 +14,7 @@
14 14 const props = defineProps<{
15 15 id: string;
16 16 record: DataSource[];
  17 + panelName: string;
17 18 }>();
18 19 const { hasPermission } = usePermission();
19 20 const dropMenuList = computed<DropMenu[]>(() => {
... ... @@ -54,37 +55,40 @@
54 55 </script>
55 56
56 57 <template>
57   - <div class="flex justify-between w-full p-5">
58   - <div class="flex" :style="{ width: `calc(100% - 60px)` }">
59   - <div
60   - v-for="(item, index) in props.record"
61   - class="box-border truncate"
62   - :style="{ width: `${100 / props.record.length}%` }"
63   - :key="index"
64   - >
65   - <Tooltip :title="item.deviceName" placement="topLeft">
66   - <div class="flex p-1">
67   - <!-- <SvgIcon name="" prefix="iconfont" class="!fill-emerald-400" /> -->
68   - <div class="truncate font-bold">{{ item.deviceRename || item.deviceName }}</div>
69   - </div>
70   - </Tooltip>
  58 + <div>
  59 + <div class="text-center pt-5 px-5 pb-3 font-bold text-lg">{{ props.panelName || '' }}</div>
  60 + <div class="flex justify-between w-full px-5 pb-5">
  61 + <div class="flex" :style="{ width: `calc(100% - 60px)` }">
  62 + <div
  63 + v-for="(item, index) in props.record"
  64 + class="box-border truncate"
  65 + :style="{ width: `${100 / props.record.length}%` }"
  66 + :key="index"
  67 + >
  68 + <Tooltip :title="item.deviceName" placement="topLeft">
  69 + <div class="flex p-1">
  70 + <!-- <SvgIcon name="" prefix="iconfont" class="!fill-emerald-400" /> -->
  71 + <div class="truncate font-bold">{{ item.deviceRename || item.deviceName }}</div>
  72 + </div>
  73 + </Tooltip>
  74 + </div>
  75 + </div>
  76 + <div class="flex items-center gap-5">
  77 + <slot name="moreAction"></slot>
  78 + <Dropdown
  79 + v-if="dropMenuList.length"
  80 + :drop-menu-list="dropMenuList"
  81 + :trigger="['click']"
  82 + @menu-event="handleMenuEvent"
  83 + >
  84 + <Tooltip title="更多">
  85 + <MoreOutlined
  86 + v-if="!getIsSharePage"
  87 + class="transform rotate-90 cursor-pointer w-4.5 h-4.5 text-lg"
  88 + />
  89 + </Tooltip>
  90 + </Dropdown>
71 91 </div>
72   - </div>
73   - <div class="flex items-center gap-5">
74   - <slot name="moreAction"></slot>
75   - <Dropdown
76   - v-if="dropMenuList.length"
77   - :drop-menu-list="dropMenuList"
78   - :trigger="['click']"
79   - @menu-event="handleMenuEvent"
80   - >
81   - <Tooltip title="更多">
82   - <MoreOutlined
83   - v-if="!getIsSharePage"
84   - class="transform rotate-90 cursor-pointer w-4.5 h-4.5 text-lg"
85   - />
86   - </Tooltip>
87   - </Dropdown>
88 92 </div>
89 93 </div>
90 94 </template>
... ...
... ... @@ -203,6 +203,21 @@
203 203 },
204 204 });
205 205
  206 + if (options.length && options.at(0)?.value) {
  207 + const value = options.at(0)!.value;
  208 + getDeviceDataKey(value);
  209 + try {
  210 + deviceAttrs.value = (await getDeviceAttributes({ deviceId: value })) || [];
  211 + method.updateSchema({
  212 + field: SchemaFiled.KEYS,
  213 + componentProps: {
  214 + options: unref(deviceAttrs).map((item) => ({ label: item, value: item })),
  215 + },
  216 + });
  217 + await method.setFieldsValue({ [SchemaFiled.DEVICE_ID]: value });
  218 + } catch (error) {}
  219 + }
  220 +
206 221 await handleModalOpen();
207 222 });
208 223 </script>
... ...
... ... @@ -32,7 +32,7 @@ export const basicSchema: FormSchema[] = [
32 32 field: BasicConfigField.NAME,
33 33 label: '组件名称',
34 34 component: 'Input',
35   - rules: [{ required: true, message: '组件名称为必填项' }],
  35 + // rules: [{ required: true, message: '组件名称为必填项' }],
36 36 componentProps: {
37 37 placeholder: '请输入组件名称',
38 38 },
... ...
... ... @@ -443,6 +443,7 @@
443 443 <BaseWidgetHeader
444 444 :record="item.record.dataSource"
445 445 :id="item.record.id"
  446 + :panel-name="item.record.name"
446 447 @action="handleMoreAction"
447 448 >
448 449 <template #moreAction>
... ...