Commit a23a69aeeb5372bab3146671370a7d3002f920b6

Authored by fengtao
2 parents e2b51250 3378ef5b

Merge branch 'main' into f-dev

... ... @@ -18,6 +18,10 @@
18 18 config: {
19 19 type: Object as PropType<ColorPicker.Options>,
20 20 },
  21 + defaultValue: {
  22 + type: String,
  23 + default: '',
  24 + },
21 25 });
22 26
23 27 const emit = defineEmits(['update:value']);
... ... @@ -47,6 +51,12 @@
47 51 unref(picker)?.hide();
48 52 };
49 53
  54 + const onClear = () => {
  55 + emit('update:value', props.defaultValue);
  56 + unref(picker)?.hide();
  57 + unref(picker)?.setColor(props.defaultValue);
  58 + };
  59 +
50 60 const getOption = computed<ColorPicker.Options>(() => {
51 61 const { config = {} } = props;
52 62 return {
... ... @@ -94,11 +104,13 @@
94 104 picker.value = ColorPicker.create(unref(getOption));
95 105 unref(picker)?.on('init', onInit);
96 106 unref(picker)?.on('save', onSave);
  107 + unref(picker)?.on('clear', onClear);
97 108 });
98 109
99 110 onUnmounted(() => {
100 111 unref(picker)?.off('init', onInit);
101 112 unref(picker)?.off('save', onSave);
  113 + unref(picker)?.off('clear', onClear);
102 114
103 115 unref(picker)?.destroyAndRemove();
104 116 });
... ...
... ... @@ -60,19 +60,31 @@
60 60 }
61 61
62 62 const getRadio = computed(() => {
63   - const { radio } = props.radio;
64   - return radio;
  63 + // const { radio } = props.radio;
  64 + return props.radio;
  65 + });
  66 +
  67 + const getChardRadio = computed(() => {
  68 + const realWidth = unref(chartRef)?.getWidth();
  69 + const realHeight = unref(chartRef)?.getHeight();
  70 + const radioRecord = props.radio;
  71 + // const widht
  72 + return {
  73 + ...radioRecord,
  74 + height: realHeight || radioRecord.height,
  75 + width: realWidth || radioRecord.height,
  76 + };
65 77 });
66 78
67 79 const beforeUpdateFn = (componentType: InstrumentComponentType) => {
68 80 if (componentType === 'instrument-component-1') return update_instrument_1_font;
69 81 if (componentType === 'instrument-component-2') return update_instrument_2_font;
70   - return (_radio: number) => {};
  82 + return (_radio: RadioRecord) => {};
71 83 };
72 84
73 85 function update() {
74 86 const option = beforeUpdateFn(props.layout.componentType);
75   - unref(chartRef)?.setOption((option(unref(getRadio)) as unknown as EChartsOption) || {});
  87 + unref(chartRef)?.setOption((option(unref(getChardRadio)) as unknown as EChartsOption) || {});
76 88 unref(chartRef)?.resize();
77 89 }
78 90
... ... @@ -97,7 +109,7 @@
97 109 const updateChartFont = useThrottleFn(() => {
98 110 const option = beforeUpdateFn(props.layout.componentType);
99 111 setTimeout(() => {
100   - unref(chartRef)?.setOption((option(unref(getRadio)) as unknown as EChartsOption) || {});
  112 + unref(chartRef)?.setOption((option(unref(getChardRadio)) as unknown as EChartsOption) || {});
101 113 });
102 114 }, 500);
103 115
... ... @@ -143,7 +155,10 @@
143 155 <div>
144 156 <div
145 157 class="text-center"
146   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 16, max: 18 }), color: '#666' }"
  158 + :style="{
  159 + fontSize: fontSize({ radioRecord: getRadio, basic: 16, max: 18 }),
  160 + color: '#666',
  161 + }"
147 162 >
148 163 {{ props.value.name }}
149 164 </div>
... ... @@ -157,7 +172,10 @@
157 172 >
158 173 <div
159 174 class="text-xs text-center truncate p-5"
160   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 12 }), color: '#999' }"
  175 + :style="{
  176 + fontSize: fontSize({ radioRecord: getRadio, basic: 12, max: 12 }),
  177 + color: '#999',
  178 + }"
161 179 >
162 180 <span class="mr-2">更新时间:</span>
163 181 <span>
... ...
... ... @@ -53,8 +53,9 @@
53 53 });
54 54
55 55 const getRadio = computed(() => {
56   - const { radio } = props.radio || DEFAULT_RADIO_RECORD;
57   - return radio;
  56 + // const { radio } = props.radio || DEFAULT_RADIO_RECORD;
  57 + // return radio;
  58 + return props.radio || DEFAULT_RADIO_RECORD;
58 59 });
59 60
60 61 let timeout: Nullable<number> = null;
... ... @@ -91,7 +92,7 @@
91 92 :size="4"
92 93 :style="{
93 94 backgroundColor: '#585357',
94   - padding: fontSize({ radio: getRadio, basic: 10 }),
  95 + padding: fontSize({ radioRecord: getRadio, basic: 10 }),
95 96 }"
96 97 >
97 98 <div
... ... @@ -100,8 +101,8 @@
100 101 class="digital-wrapper__int"
101 102 :style="{
102 103 color: getPropsValue.fontColor,
103   - fontSize: fontSize({ radio: getRadio, basic: 20, max: 20 }),
104   - padding: fontSize({ radio: getRadio, basic: 5 }),
  104 + fontSize: fontSize({ radioRecord: getRadio, basic: 20, max: 20 }),
  105 + padding: fontSize({ radioRecord: getRadio, basic: 5 }),
105 106 }"
106 107 >
107 108 <div class="digital-text__int p-1 text-light-50"> {{ number }}</div>
... ... @@ -118,7 +119,7 @@
118 119 :size="4"
119 120 :style="{
120 121 backgroundColor: '#b74940',
121   - padding: fontSize({ radio: getRadio, basic: 10 }),
  122 + padding: fontSize({ radioRecord: getRadio, basic: 10 }),
122 123 }"
123 124 >
124 125 <div
... ... @@ -127,8 +128,8 @@
127 128 class="digital-wrapper__float"
128 129 :style="{
129 130 color: getPropsValue.fontColor,
130   - fontSize: fontSize({ radio: getRadio, basic: 20, max: 20 }),
131   - padding: fontSize({ radio: getRadio, basic: 5 }),
  131 + fontSize: fontSize({ radioRecord: getRadio, basic: 20, max: 20 }),
  132 + padding: fontSize({ radioRecord: getRadio, basic: 5 }),
132 133 }"
133 134 >
134 135 <div class="digital-text__float p-1 text-light-50">
... ... @@ -137,8 +138,8 @@
137 138 </div>
138 139 </Space>
139 140 <div
140   - class="px-1"
141   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 18, max: 18 }) }"
  141 + class="px-1 font-bold"
  142 + :style="{ fontSize: fontSize({ radioRecord: getRadio, basic: 18, max: 18 }) }"
142 143 >
143 144 {{ getPropsValue.unit }}
144 145 </div>
... ... @@ -147,7 +148,7 @@
147 148
148 149 <div
149 150 class="text-center truncate"
150   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 18 }) }"
  151 + :style="{ fontSize: fontSize({ radioRecord: getRadio, basic: 18 }) }"
151 152 >
152 153 <span>{{ props.value.name || '电表' }}</span>
153 154 </div>
... ... @@ -161,7 +162,10 @@
161 162 >
162 163 <div
163 164 class="text-center text-xs truncate p-5"
164   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 16 }), color: '#999' }"
  165 + :style="{
  166 + fontSize: fontSize({ radioRecord: getRadio, basic: 12, max: 16 }),
  167 + color: '#999',
  168 + }"
165 169 >
166 170 <span class="mr-1">更新时间:</span>
167 171 <span>
... ...
1 1 import { EChartsOption } from 'echarts';
2   -import { fontSize } from '../../detail/config/util';
  2 +import { fontSize, RadioRecord } from '../../detail/config/util';
3 3 import { Gradient, visualOptionField } from '../../detail/config/visualOptions';
4 4 import {
5 5 ComponentInfo,
... ... @@ -240,8 +240,8 @@ export const getGradient = (key: Gradient, record: GradientInfo[] = []) => {
240 240 return record.find((item) => item.key === key);
241 241 };
242 242
243   -export const update_instrument_1_font = (radio: number) => {
244   - const basicFontSize = fontSize({ radio, basic: 16, max: 16, min: 12 });
  243 +export const update_instrument_1_font = (radioRecord: RadioRecord) => {
  244 + const basicFontSize = fontSize({ radioRecord, basic: 16, max: 16, min: 12 });
245 245 return {
246 246 series: [
247 247 {
... ... @@ -256,9 +256,9 @@ export const update_instrument_1_font = (radio: number) => {
256 256 } as EChartsOption;
257 257 };
258 258
259   -export const update_instrument_2_font = (radio: number) => {
260   - const axisLabelFontSize = fontSize({ radio, basic: 10, max: 16 });
261   - const detailFontSize = fontSize({ radio, basic: 16, max: 16, min: 10 });
  259 +export const update_instrument_2_font = (radioRecord: RadioRecord) => {
  260 + const axisLabelFontSize = fontSize({ radioRecord, basic: 10, max: 16 });
  261 + const detailFontSize = fontSize({ radioRecord, basic: 16, max: 16, min: 10 });
262 262 return {
263 263 series: [
264 264 {
... ...
... ... @@ -22,8 +22,9 @@
22 22 const getImagBase64 = ref(fallback);
23 23
24 24 const getRadio = computed(() => {
25   - const { radio } = props.radio || DEFAULT_RADIO_RECORD;
26   - return radio;
  25 + // const { radio } = props.radio || DEFAULT_RADIO_RECORD;
  26 + // return radio;
  27 + return props.radio || DEFAULT_RADIO_RECORD;
27 28 });
28 29
29 30 const getWidth = computed(() => {
... ... @@ -69,7 +70,7 @@
69 70 <!-- <Image :style="{ width: `${getWidth}px` }" :src="getImagBase64" /> -->
70 71 <div
71 72 class="w-full text-center truncate p-5"
72   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 12 }), color: '#999' }"
  73 + :style="{ fontSize: fontSize({ radioRecord: getRadio, basic: 12, max: 12 }), color: '#999' }"
73 74 >
74 75 <Tooltip
75 76 placement="top"
... ...
... ... @@ -47,8 +47,9 @@
47 47 });
48 48
49 49 const getRadio = computed(() => {
50   - const { radio } = props.radio;
51   - return radio;
  50 + // const { radio } = props.radio;
  51 + // return radio;
  52 + return props.radio || DEFAULT_RADIO_RECORD;
52 53 });
53 54 </script>
54 55
... ... @@ -66,8 +67,8 @@
66 67 prefix="iconfont"
67 68 :style="{
68 69 color: props.value.iconColor,
69   - width: fontSize({ radio: getRadio, basic: 50, min: 16 }),
70   - height: fontSize({ radio: getRadio, basic: 50, min: 16 }),
  70 + width: fontSize({ radioRecord: getRadio, basic: 50, min: 16 }),
  71 + height: fontSize({ radioRecord: getRadio, basic: 50, min: 16 }),
71 72 }"
72 73 />
73 74 </div>
... ... @@ -77,12 +78,12 @@
77 78 class="truncate"
78 79 :suffix="getShowUnit ? props.value.unit : ''"
79 80 :value-style="{
80   - fontSize: fontSize({ radio: getRadio, basic: 24, min: 16 }),
  81 + fontSize: fontSize({ radioRecord: getRadio, basic: 24, min: 16 }),
81 82 color: props.value.fontColor,
82 83 }"
83 84 />
84 85 </div>
85   - <div :style="{ color: '#666', fontSize: fontSize({ radio: getRadio, basic: 16 }) }">
  86 + <div :style="{ color: '#666', fontSize: fontSize({ radioRecord: getRadio, basic: 16 }) }">
86 87 <!-- {{ getShowUnit ? props.value.unit : '' }} -->
87 88 {{ props.value.name }}
88 89 </div>
... ... @@ -103,7 +104,7 @@
103 104 >
104 105 <div class="text-center text-xs truncate p-5" style="color: #999">
105 106 <div
106   - :style="{ fontSize: fontSize({ radio: getRadio, basic: 12, max: 12 }) }"
  107 + :style="{ fontSize: fontSize({ radioRecord: getRadio, basic: 12, max: 12 }) }"
107 108 class="truncate"
108 109 >
109 110 <span class="mr-1">更新时间:</span>
... ...
... ... @@ -63,7 +63,7 @@
63 63 :key="index"
64 64 >
65 65 <Tooltip :title="item.deviceName" placement="top">
66   - <span>
  66 + <span class="font-bold">
67 67 <!-- <SvgIcon name="" prefix="iconfont" class="!fill-emerald-400" /> -->
68 68 <span>{{ item.deviceRename || item.deviceName }}</span>
69 69 </span>
... ...
  1 +import { getOrganizationList } from '/@/api/system/system';
1 2 import { FormSchema } from '/@/components/Form';
  3 +import { copyTransFun } from '/@/utils/fnUtils';
2 4 export enum ViewType {
3 5 PRIVATE_VIEW = 'PRIVATE_VIEW',
4 6 PUBLIC_VIEW = 'PUBLIC_VIEW',
... ... @@ -9,12 +11,29 @@ export const formSchema: FormSchema[] = [
9 11 field: 'name',
10 12 label: '名称',
11 13 component: 'Input',
12   - required: true,
  14 + rules: [{ required: true, message: '请输入看板名称' }],
13 15 componentProps: {
14 16 placeholder: '请输入看板名称',
15 17 },
16 18 },
17 19 {
  20 + field: 'organizationId',
  21 + component: 'ApiTreeSelect',
  22 + label: '组织',
  23 + rules: [{ required: true, message: '组织为必填项' }],
  24 + componentProps() {
  25 + return {
  26 + placeholder: '请选择组织',
  27 + api: async () => {
  28 + const data = await getOrganizationList();
  29 + copyTransFun(data as any as any[]);
  30 + return data;
  31 + },
  32 + getPopupContainer: () => document.body,
  33 + };
  34 + },
  35 + },
  36 + {
18 37 field: 'viewType',
19 38 label: '名称',
20 39 component: 'RadioGroup',
... ...
  1 +import { getOrganizationList } from '/@/api/system/system';
  2 +import { FormSchema } from '/@/components/Form';
  3 +import { ColEx } from '/@/components/Form/src/types';
  4 +import { useGridLayout } from '/@/hooks/component/useGridLayout';
  5 +import { copyTransFun } from '/@/utils/fnUtils';
  6 +
  7 +export const formSchema: FormSchema[] = [
  8 + {
  9 + field: 'name',
  10 + label: '看板名称',
  11 + component: 'Input',
  12 + // colProps: { span: 10 },
  13 + colProps: useGridLayout(2, 3, 4) as unknown as ColEx,
  14 + },
  15 + {
  16 + field: 'organizationId',
  17 + component: 'ApiTreeSelect',
  18 + label: '组织',
  19 + // colProps: { span: 10 },
  20 + colProps: useGridLayout(2, 3, 4) as unknown as ColEx,
  21 + componentProps() {
  22 + return {
  23 + placeholder: '请选择组织',
  24 + api: async () => {
  25 + const data = await getOrganizationList();
  26 + copyTransFun(data as any as any[]);
  27 + return data;
  28 + },
  29 + getPopupContainer: () => document.body,
  30 + };
  31 + },
  32 + },
  33 +];
... ...
... ... @@ -25,7 +25,7 @@ export const calcScale = (
25 25 width = width * (widthRadio / 100);
26 26 height = height * (heightRadio / 100);
27 27
28   - const temp = width * height;
  28 + const temp = width > height ? height ** 2 : width ** 2;
29 29
30 30 const isLess = temp < 300 * 300;
31 31
... ... @@ -40,16 +40,17 @@ export const calcScale = (
40 40 };
41 41
42 42 export const fontSize = ({
43   - radio,
  43 + radioRecord,
44 44 basic,
45 45 max,
46 46 min,
47 47 }: {
48   - radio: number;
  48 + radioRecord: RadioRecord;
49 49 basic: number;
50 50 max?: number;
51 51 min?: number;
52 52 }) => {
  53 + const { radio } = radioRecord;
53 54 let res = basic * radio;
54 55 if (max && res > max) res = max;
55 56 if (min && res < min) res = min;
... ...
... ... @@ -28,6 +28,11 @@ export enum Gradient {
28 28 SECOND = 'second',
29 29 THIRD = 'third',
30 30 }
  31 +export enum GradientColor {
  32 + FIRST = '#67e0e3',
  33 + SECOND = '#37a2da',
  34 + THIRD = '#fd666d',
  35 +}
31 36
32 37 export enum visualOptionField {
33 38 FONT_COLOR = 'fontColor',
... ... @@ -48,6 +53,9 @@ export const modeOne: FormSchema[] = [
48 53 label: '数值字体颜色',
49 54 component: 'ColorPicker',
50 55 changeEvent: 'update:value',
  56 + componentProps: {
  57 + defaultValue: '#000',
  58 + },
51 59 },
52 60 ];
53 61
... ... @@ -57,6 +65,9 @@ export const modeTwo: FormSchema[] = [
57 65 label: '数值字体颜色',
58 66 component: 'ColorPicker',
59 67 changeEvent: 'update:value',
  68 + componentProps: {
  69 + defaultValue: '#000',
  70 + },
60 71 },
61 72 {
62 73 field: visualOptionField.UNIT,
... ... @@ -71,6 +82,9 @@ export const modeTwo: FormSchema[] = [
71 82 label: '图标颜色',
72 83 component: 'ColorPicker',
73 84 changeEvent: 'update:value',
  85 + componentProps: {
  86 + defaultValue: '#367BFF',
  87 + },
74 88 },
75 89 {
76 90 field: visualOptionField.ICON,
... ... @@ -92,6 +106,9 @@ export const modeThree: FormSchema[] = [
92 106 label: '数值字体颜色',
93 107 component: 'ColorPicker',
94 108 changeEvent: 'update:value',
  109 + componentProps: {
  110 + defaultValue: '#000',
  111 + },
95 112 },
96 113 {
97 114 field: visualOptionField.UNIT,
... ... @@ -106,6 +123,9 @@ export const modeThree: FormSchema[] = [
106 123 label: '一阶段颜色',
107 124 component: 'ColorPicker',
108 125 changeEvent: 'update:value',
  126 + componentProps: {
  127 + defaultValue: GradientColor.FIRST,
  128 + },
109 129 },
110 130 {
111 131 field: visualOptionField.FIRST_PHASE_VALUE,
... ... @@ -121,6 +141,9 @@ export const modeThree: FormSchema[] = [
121 141 label: '二阶段颜色',
122 142 component: 'ColorPicker',
123 143 changeEvent: 'update:value',
  144 + componentProps: {
  145 + defaultValue: GradientColor.SECOND,
  146 + },
124 147 },
125 148 {
126 149 field: visualOptionField.SECOND_PHASE_VALUE,
... ... @@ -138,6 +161,9 @@ export const modeThree: FormSchema[] = [
138 161 label: '三阶段颜色',
139 162 component: 'ColorPicker',
140 163 changeEvent: 'update:value',
  164 + componentProps: {
  165 + defaultValue: GradientColor.THIRD,
  166 + },
141 167 },
142 168 {
143 169 field: visualOptionField.THIRD_PHASE_VALUE,
... ... @@ -158,6 +184,9 @@ export const modeFour: FormSchema[] = [
158 184 label: '数值字体颜色',
159 185 component: 'ColorPicker',
160 186 changeEvent: 'update:value',
  187 + componentProps: {
  188 + defaultValue: '#000',
  189 + },
161 190 },
162 191 {
163 192 field: visualOptionField.UNIT,
... ...
... ... @@ -19,6 +19,8 @@
19 19 import { computed } from '@vue/reactivity';
20 20 import { usePermission } from '/@/hooks/web/usePermission';
21 21 import { encode } from './config/config';
  22 + import { useForm, BasicForm } from '/@/components/Form';
  23 + import { formSchema } from './config/searchForm';
22 24
23 25 const ListItem = List.Item;
24 26 const router = useRouter();
... ... @@ -28,6 +30,21 @@
28 30 const listEL = ref();
29 31 const loading = ref(false);
30 32 const dataBoardList = ref<DataBoardRecord[]>([]);
  33 +
  34 + const [searchFormRegister, searchFormMethod] = useForm({
  35 + schemas: formSchema,
  36 + labelWidth: 80,
  37 + layout: 'inline',
  38 + submitButtonOptions: {
  39 + loading: loading,
  40 + },
  41 + submitFunc: async () => {
  42 + try {
  43 + await getDatasource();
  44 + } catch (error) {}
  45 + },
  46 + });
  47 +
31 48 //分页相关
32 49 const page = ref(1);
33 50 const pageSize = ref(10);
... ... @@ -87,9 +104,11 @@
87 104 const getDatasource = async () => {
88 105 try {
89 106 loading.value = true;
  107 + const params = searchFormMethod.getFieldsValue() || {};
90 108 const { total, items } = await getDataBoardList({
91 109 page: unref(paginationProp).current,
92 110 pageSize: unref(paginationProp).pageSize,
  111 + ...params,
93 112 });
94 113 dataBoardList.value = items;
95 114 paginationProp.value.total = total;
... ... @@ -176,12 +195,16 @@
176 195
177 196 <template>
178 197 <PageWrapper>
179   - <div class="flex mb-6 items-center bg-light-100 h-78px">
  198 + <div class="flex items-center mb-3 bg-light-100 h-78px">
180 199 <div class="text-lg ml-30px mr-9px font-bold">自定义看板</div>
181 200 <Authority value="api:yt:data_board:add:post">
182 201 <Button type="primary" @click="handleOpenDetailModal">创建看板</Button>
183 202 </Authority>
184 203 </div>
  204 + <div class="bg-light-100 mb-6 w-full p-3 search-form">
  205 + <BasicForm class="flex-auto w-full" @register="searchFormRegister" />
  206 + </div>
  207 + <!-- <div> </div> -->
185 208 <Spin :spinning="loading">
186 209 <List
187 210 ref="listEL"
... ... @@ -193,7 +216,7 @@
193 216 <ListItem>
194 217 <Card class="data-card cursor-pointer">
195 218 <template #title>
196   - <div>{{ item.name }}</div>
  219 + <div class="font-bold">{{ item.name }}</div>
197 220 </template>
198 221 <template #extra>
199 222 <Dropdown
... ... @@ -266,4 +289,19 @@
266 289 background-image: url('/@/assets/svg/component.svg');
267 290 }
268 291 }
  292 +
  293 + .search-form {
  294 + width: 100%;
  295 + form {
  296 + width: 100%;
  297 + :deep(.ant-row) {
  298 + width: 100%;
  299 + }
  300 +
  301 + :deep(.ant-row > div:last-child) {
  302 + flex: 1;
  303 + max-width: 100%;
  304 + }
  305 + }
  306 + }
269 307 </style>
... ...