p-pc-ui 1.3.0 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,7 +14,8 @@ interface Base<K extends string = string> {
14
14
  colon?: boolean,
15
15
  labelSpan?: number,
16
16
  valueSpan?: number,
17
- labelAlign?: 'left' | 'right'
17
+ labelAlign?: 'left' | 'right',
18
+ disabled:?: boolean
18
19
  }
19
20
 
20
21
 
@@ -75,13 +76,13 @@ interface UploadBase<K extends string = string> extends Base<K> {
75
76
 
76
77
  export interface UploadOss<K extends string = string> extends UploadBase<K> {
77
78
  type: 'uploadOss',
78
- getOssToken: ({file_name}) => Promise<any>,
79
+ getOssToken: ({ file_name }) => Promise<any>,
79
80
  baseOssUrl: string,
80
81
  }
81
82
 
82
83
  export interface UploadTos<K extends string = string> extends UploadBase<K> {
83
84
  type: 'uploadTos',
84
- getTosToken: ({file_name}) => Promise<any>,
85
+ getTosToken: ({ file_name }) => Promise<any>,
85
86
  baseTosUrl: string,
86
87
  }
87
88
 
@@ -256,7 +256,9 @@ const initFormState = (renderData: FormDataItem[], initFromData = {}) => {
256
256
  };
257
257
 
258
258
  const handlePicPreview = (file: any) => {
259
- viewerApi({ images: [file.url || file.key] });
259
+ const url = URL.createObjectURL(file.originFileObj);
260
+
261
+ viewerApi({ images: [url || file.url || file.key || file.thumbUrl] });
260
262
  };
261
263
 
262
264
  const replaceUrl = (str, urlToReplace, replacement) => {
@@ -492,180 +494,188 @@ defineExpose({
492
494
  :tooltip="renderItem.tooltip"
493
495
  :label-align="renderItem.labelAlign || 'right'"
494
496
  >
495
- <a-input
496
- v-model:value="formState[renderItem.key]"
497
- v-if="renderItem.type == 'input' && [undefined, 'string'].includes(renderItem.fieldType)"
498
- type="text"
499
- :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
500
- >
501
- <template v-if="renderItem.prefix" v-slot:prefix>
502
- <component :is="renderItem.prefix" />
503
- </template>
504
- <template v-if="renderItem.suffix" v-slot:suffix>
505
- <component :is="renderItem.suffix" />
506
- </template>
507
- </a-input>
508
-
509
- <a-input
510
- v-model:value.number="formState[renderItem.key]"
511
- v-if="renderItem.type == 'input' && renderItem.fieldType == 'number'"
512
- type="number"
513
- :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
514
- >
515
- <template v-if="renderItem.prefix" v-slot:prefix>
516
- <component :is="renderItem.prefix" />
517
- </template>
518
- <template v-if="renderItem.suffix" v-slot:suffix>
519
- <component :is="renderItem.suffix" />
520
- </template>
521
- </a-input>
522
-
523
- <a-input-password
524
- v-model:value="formState[renderItem.key]"
525
- v-if="renderItem.type == 'password'"
526
- type="password"
527
- :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
528
- >
529
- <template v-if="renderItem.prefix" v-slot:prefix>
530
- <component :is="renderItem.prefix" />
531
- </template>
532
- </a-input-password>
533
-
534
- <a-input
535
- v-model:value="formState[renderItem.key]"
536
- v-if="renderItem.type == 'code' && [undefined, 'string'].includes(renderItem.fieldType)"
537
- type="text"
538
- :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
539
- >
540
- <template v-if="renderItem.prefix" v-slot:prefix>
541
- <component :is="renderItem.prefix" />
542
- </template>
543
- <template v-slot:suffix>
544
- <span
545
- v-if="
546
- (!renderItem.activityFunc || (renderItem.activityFunc && renderItem.activityFunc(formState))) &&
547
- renderItem.sendStatus != 'sending'
548
- "
549
- class="send-notice send-notice-activity"
550
- @click="sendNoticeClick(renderItem)"
551
- >
552
- {{ renderItem.codeName }}
553
- </span>
554
- <span v-else class="send-notice">
555
- {{ renderItem.codeName }}
556
- </span>
557
- </template>
558
- </a-input>
559
-
560
- <a-textarea
561
- v-model:value="formState[renderItem.key]"
562
- v-if="renderItem.type == 'textarea'"
563
- :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
564
- :auto-size="{ minRows: 2, maxRows: 10 }"
565
- />
566
-
567
- <a-select
568
- style="min-width: 170px; margin-right: 15px"
569
- v-model:value="formState[renderItem.key]"
570
- :placeholder="renderItem.placeholder || `请选择`"
571
- v-if="renderItem.type == 'select'"
572
- :fieldNames="renderItem.fieldNames || { label: 'label', value: 'value' }"
573
- :options="renderItem.optionList"
574
- :mode="renderItem.isMultiple ? 'multiple' : undefined"
575
- ></a-select>
576
-
577
- <a-radio-group v-if="renderItem.type == 'radio'" v-model:value="formState[renderItem.key]">
578
- <a-radio v-for="item in renderItem.optionList" :value="item[renderItem.fieldNames?.value || 'value']">
579
- {{ item[renderItem.fieldNames?.label || "label"] }}
580
- </a-radio>
581
- </a-radio-group>
582
-
583
- <a-date-picker
584
- v-model:value="formState[renderItem.key]"
585
- v-if="renderItem.type === 'datePicker'"
586
- show-time
587
- :placeholder="`请选择${renderItem.label}`"
588
- class="ant-input"
589
- format="YYYY-MM-DD HH:mm:ss"
590
- value-format="YYYY-MM-DD HH:mm:ss"
591
- />
592
-
593
- <a-tree-select
594
- style="min-width: 170px; margin-right: 15px"
595
- v-model:value="formState[renderItem.key]"
596
- :tree-data="renderItem.optionList"
597
- v-if="renderItem.type == 'treeSelect'"
598
- :fieldNames="renderItem.fieldNames || { children: 'children', label: 'name', value: 'id' }"
599
- :placeholder="renderItem.placeholder || `请选择`"
600
- ></a-tree-select>
601
-
602
- <a-upload
603
- v-if="renderItem.type == 'uploadOss' || renderItem.type == 'uploadTos' || renderItem.type == 'upload'"
604
- :file-list="formState[renderItem.key]"
605
- :multiple="true"
606
- :max-count="renderItem?.maxCount || 1"
607
- @preview="handlePicPreview"
608
- :customRequest="
609
- (e) => {
610
- uploadRequest(e, renderItem);
611
- }
612
- "
613
- @change="
614
- (e) => {
615
- uploadChange(e, renderItem);
616
- }
617
- "
618
- :headers="{
619
- 'Cache-Control': 'max-age=15552000',
497
+ <div
498
+ :style="{
499
+ pointerEvents: renderItem.disabled ? 'none' : 'auto',
500
+ opacity: renderItem.disabled ? 0.6 : 1,
501
+ cursor: renderItem.disabled ? 'not-allowed' : 'auto',
620
502
  }"
621
- :list-type="renderItem.uploadType == 'pic' ? 'picture-card' : undefined"
622
503
  >
623
- <div v-if="renderItem.uploadType == 'pic'">
624
- <plus-outlined />
625
- <div style="margin-top: 8px">{{ renderItem.label }}</div>
626
- </div>
504
+ <a-input
505
+ v-model:value="formState[renderItem.key]"
506
+ v-if="renderItem.type == 'input' && [undefined, 'string'].includes(renderItem.fieldType)"
507
+ type="text"
508
+ :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
509
+ >
510
+ <template v-if="renderItem.prefix" v-slot:prefix>
511
+ <component :is="renderItem.prefix" />
512
+ </template>
513
+ <template v-if="renderItem.suffix" v-slot:suffix>
514
+ <component :is="renderItem.suffix" />
515
+ </template>
516
+ </a-input>
517
+
518
+ <a-input
519
+ v-model:value.number="formState[renderItem.key]"
520
+ v-if="renderItem.type == 'input' && renderItem.fieldType == 'number'"
521
+ type="number"
522
+ :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
523
+ >
524
+ <template v-if="renderItem.prefix" v-slot:prefix>
525
+ <component :is="renderItem.prefix" />
526
+ </template>
527
+ <template v-if="renderItem.suffix" v-slot:suffix>
528
+ <component :is="renderItem.suffix" />
529
+ </template>
530
+ </a-input>
531
+
532
+ <a-input-password
533
+ v-model:value="formState[renderItem.key]"
534
+ v-if="renderItem.type == 'password'"
535
+ type="password"
536
+ :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
537
+ >
538
+ <template v-if="renderItem.prefix" v-slot:prefix>
539
+ <component :is="renderItem.prefix" />
540
+ </template>
541
+ </a-input-password>
542
+
543
+ <a-input
544
+ v-model:value="formState[renderItem.key]"
545
+ v-if="renderItem.type == 'code' && [undefined, 'string'].includes(renderItem.fieldType)"
546
+ type="text"
547
+ :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
548
+ >
549
+ <template v-if="renderItem.prefix" v-slot:prefix>
550
+ <component :is="renderItem.prefix" />
551
+ </template>
552
+ <template v-slot:suffix>
553
+ <span
554
+ v-if="
555
+ (!renderItem.activityFunc || (renderItem.activityFunc && renderItem.activityFunc(formState))) &&
556
+ renderItem.sendStatus != 'sending'
557
+ "
558
+ class="send-notice send-notice-activity"
559
+ @click="sendNoticeClick(renderItem)"
560
+ >
561
+ {{ renderItem.codeName }}
562
+ </span>
563
+ <span v-else class="send-notice">
564
+ {{ renderItem.codeName }}
565
+ </span>
566
+ </template>
567
+ </a-input>
568
+
569
+ <a-textarea
570
+ v-model:value="formState[renderItem.key]"
571
+ v-if="renderItem.type == 'textarea'"
572
+ :placeholder="renderItem.placeholder || `请输入${renderItem.label}`"
573
+ :auto-size="{ minRows: 2, maxRows: 10 }"
574
+ />
627
575
 
628
- <div v-else>
629
- <a-button style="display: flex; align-items: center">
630
- <upload-outlined></upload-outlined>
631
- 上传
632
- </a-button>
633
- </div>
634
- </a-upload>
635
-
636
- <div style="border: 1px solid #ccc" v-if="renderItem.type == 'editor'">
637
- <Toolbar
638
- style="border-bottom: 1px solid #ccc"
639
- :editor="editorRef"
640
- :defaultConfig="{
641
- excludeKeys: ['insertVideo', 'insertImage', 'codeBlock'],
642
- }"
643
- mode="default"
576
+ <a-select
577
+ style="min-width: 170px; margin-right: 15px"
578
+ v-model:value="formState[renderItem.key]"
579
+ :placeholder="renderItem.placeholder || `请选择`"
580
+ v-if="renderItem.type == 'select'"
581
+ :fieldNames="renderItem.fieldNames || { label: 'label', value: 'value' }"
582
+ :options="renderItem.optionList"
583
+ :mode="renderItem.isMultiple ? 'multiple' : undefined"
584
+ ></a-select>
585
+
586
+ <a-radio-group v-if="renderItem.type == 'radio'" v-model:value="formState[renderItem.key]">
587
+ <a-radio v-for="item in renderItem.optionList" :value="item[renderItem.fieldNames?.value || 'value']">
588
+ {{ item[renderItem.fieldNames?.label || "label"] }}
589
+ </a-radio>
590
+ </a-radio-group>
591
+
592
+ <a-date-picker
593
+ v-model:value="formState[renderItem.key]"
594
+ v-if="renderItem.type === 'datePicker'"
595
+ show-time
596
+ :placeholder="`请选择${renderItem.label}`"
597
+ class="ant-input"
598
+ format="YYYY-MM-DD HH:mm:ss"
599
+ value-format="YYYY-MM-DD HH:mm:ss"
644
600
  />
645
- <Editor
646
- style="height: 500px; overflow-y: hidden"
647
- v-model="formState[renderItem.key]"
648
- :defaultConfig="{
649
- placeholder: '请输入内容...',
650
- MENU_CONF: {
651
- uploadImage: {
652
- customUpload: async (file, insertFn) => {
653
- await editorUpload(renderItem, file, insertFn);
601
+
602
+ <a-tree-select
603
+ style="min-width: 170px; margin-right: 15px"
604
+ v-model:value="formState[renderItem.key]"
605
+ :tree-data="renderItem.optionList"
606
+ v-if="renderItem.type == 'treeSelect'"
607
+ :fieldNames="renderItem.fieldNames || { children: 'children', label: 'name', value: 'id' }"
608
+ :placeholder="renderItem.placeholder || `请选择`"
609
+ ></a-tree-select>
610
+
611
+ <a-upload
612
+ v-if="renderItem.type == 'uploadOss' || renderItem.type == 'uploadTos' || renderItem.type == 'upload'"
613
+ :file-list="formState[renderItem.key]"
614
+ :multiple="true"
615
+ :max-count="renderItem?.maxCount || 1"
616
+ @preview="handlePicPreview"
617
+ :customRequest="
618
+ (e) => {
619
+ uploadRequest(e, renderItem);
620
+ }
621
+ "
622
+ @change="
623
+ (e) => {
624
+ uploadChange(e, renderItem);
625
+ }
626
+ "
627
+ :headers="{
628
+ 'Cache-Control': 'max-age=15552000',
629
+ }"
630
+ :list-type="renderItem.uploadType == 'pic' ? 'picture-card' : undefined"
631
+ >
632
+ <div v-if="renderItem.uploadType == 'pic'">
633
+ <plus-outlined />
634
+ <div style="margin-top: 8px">{{ renderItem.label }}</div>
635
+ </div>
636
+
637
+ <div v-else>
638
+ <a-button style="display: flex; align-items: center">
639
+ <upload-outlined></upload-outlined>
640
+ 上传
641
+ </a-button>
642
+ </div>
643
+ </a-upload>
644
+
645
+ <div style="border: 1px solid #ccc" v-if="renderItem.type == 'editor'">
646
+ <Toolbar
647
+ style="border-bottom: 1px solid #ccc"
648
+ :editor="editorRef"
649
+ :defaultConfig="{
650
+ excludeKeys: ['insertVideo', 'insertImage', 'codeBlock'],
651
+ }"
652
+ mode="default"
653
+ />
654
+ <Editor
655
+ style="height: 500px; overflow-y: hidden"
656
+ v-model="formState[renderItem.key]"
657
+ :defaultConfig="{
658
+ placeholder: '请输入内容...',
659
+ MENU_CONF: {
660
+ uploadImage: {
661
+ customUpload: async (file, insertFn) => {
662
+ await editorUpload(renderItem, file, insertFn);
663
+ },
654
664
  },
655
- },
656
- uploadVideo: {
657
- customUpload: async (file, insertFn) => {
658
- await editorUpload(renderItem, file, insertFn);
665
+ uploadVideo: {
666
+ customUpload: async (file, insertFn) => {
667
+ await editorUpload(renderItem, file, insertFn);
668
+ },
659
669
  },
660
670
  },
661
- },
662
- }"
663
- mode="default"
664
- @onCreated="handleRichEditorCreated"
665
- />
666
- </div>
671
+ }"
672
+ mode="default"
673
+ @onCreated="handleRichEditorCreated"
674
+ />
675
+ </div>
667
676
 
668
- <component v-if="renderItem.type == 'component'" :is="renderItem.component"></component>
677
+ <component v-if="renderItem.type == 'component'" :is="renderItem.component"></component>
678
+ </div>
669
679
  </a-form-item>
670
680
  </div>
671
681
 
@@ -1,5 +1,5 @@
1
1
  <script setup lang="ts">
2
- import { ref, reactive, onMounted, computed, withDefaults, useSlots } from 'vue'
2
+ import { ref, reactive, onMounted, computed, useSlots } from 'vue'
3
3
  import PButtonRounded from '../p-button-rounded/p-button-rounded.vue'
4
4
  import { Modal as AModal } from 'ant-design-vue'
5
5
  const {
@@ -69,7 +69,7 @@ const confirmClick = async () => {
69
69
  :closable="closable"
70
70
  >
71
71
  <template #title v-if="title">
72
- <div class="p-[20px] text-[18px] font-bold leading-[27px] text-[#272727]">
72
+ <div style="padding: 20px; font-size: 18px; font-weight: bold; line-height: 27px; color: #272727;">
73
73
  {{ title }}
74
74
  </div>
75
75
  </template>
@@ -81,8 +81,8 @@ const confirmClick = async () => {
81
81
  <slot name="footer"></slot>
82
82
  </div>
83
83
 
84
- <div v-else class="flex p-[24px]" v-if="showFooter">
85
- <div class="flex items-center justify-start gap-[4px]" v-if="footerTip">
84
+ <div v-else style="display: flex; padding: 24px;" v-if="showFooter">
85
+ <div style="display: flex; align-items: center; justify-content: flex-start; gap: 4px;" v-if="footerTip">
86
86
  <svg width="16" height="17" viewBox="0 0 16 17" fill="none" xmlns="http://www.w3.org/2000/svg">
87
87
  <path
88
88
  fill-rule="evenodd"
@@ -91,12 +91,12 @@ const confirmClick = async () => {
91
91
  fill="#5A5A5A"
92
92
  />
93
93
  </svg>
94
- <div class="text-[12px] text-[#5A5A5A]">
94
+ <div style="font-size: 12px; color: #5A5A5A;">
95
95
  {{ footerTip }}
96
96
  </div>
97
97
  </div>
98
98
 
99
- <div class="ml-auto">
99
+ <div style="margin-left: auto;">
100
100
  <p-button-rounded
101
101
  :width="btnWidth"
102
102
  :height="btnHeight"
@@ -83,8 +83,9 @@ const renderTableColumns = (tableColumns: TableColumn[]) => {
83
83
  // return h("div", { style: { display: "flex", justifyContent: "space-around" } }, buttons);
84
84
  // };
85
85
 
86
-
87
- renderItem.width = renderItem.operateButtons.length * 55;
86
+ if(!renderItem.width){
87
+ renderItem.width = renderItem.operateButtons.length * 60;
88
+ }
88
89
 
89
90
  if(editColumns.length > 0){
90
91
  renderItem.width +=110
@@ -299,11 +300,8 @@ defineExpose({
299
300
  rowKey="id"
300
301
  :row-selection="rowSelection"
301
302
  :columns="columns"
302
- :data-source="tableData?.data || []"
303
+ :data-source="data && data.length >0 ? data : (tableData.data || [])"
303
304
  :loading="loading"
304
- :scroll="{
305
- y: height,
306
- }"
307
305
  :pagination="data.length >0? false :{
308
306
  current: pageQuery.p,
309
307
  defaultPageSize: pageQuery.pc,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "p-pc-ui",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "type": "module",
5
5
  "module": "dist/index.ts",
6
6
  "main": "dist/index.ts",
@@ -21,7 +21,7 @@
21
21
  "vue": "3.5.13"
22
22
  },
23
23
  "devDependencies": {
24
- "typescript": "5.8.3",
25
- "@dcloudio/types": "^3.4.8"
24
+ "ts-node": "^10.9.2",
25
+ "typescript": "5.8.3"
26
26
  }
27
- }
27
+ }