zydx-plus 1.20.123 → 1.22.124

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zydx-plus",
3
- "version": "1.20.123",
3
+ "version": "1.22.124",
4
4
  "description": "Vue.js",
5
5
  "main": "src/index.js",
6
6
  "files": [
@@ -31,6 +31,7 @@
31
31
  "@tiptap/extension-image": "^2.0.3",
32
32
  "@tiptap/starter-kit": "^2.0.3",
33
33
  "@tiptap/vue-3": "^2.0.3",
34
+ "@tiptap/extension-text-align": "^2.0.3",
34
35
  "@vue-office/docx": "^1.1.3",
35
36
  "@vue-office/excel": "^1.1.3"
36
37
  },
@@ -1858,7 +1858,7 @@ let buttonNames = {
1858
1858
  headLevel: {
1859
1859
  default: "demand",
1860
1860
  demand: '思政要求',
1861
- resourceIndex: '思政项目',
1861
+ resourceIndex: '思政主题',
1862
1862
  review: '思政点评',
1863
1863
  analyse: '思政分析',
1864
1864
  countermeasure: '教学对策'
@@ -2006,18 +2006,18 @@ let buttonNames = {
2006
2006
  headLevel: {
2007
2007
  default: "demand",
2008
2008
  demand: '训练要求',
2009
- resourceIndex: '训练试题',
2009
+ resourceIndex: '训练题目',
2010
2010
  analyse: '训练分析',
2011
2011
  countermeasure: '教学对策'
2012
2012
  },
2013
2013
  otherLevel: {
2014
2014
  default: "singletonClass",
2015
- singletonClass: this.getCurrentPrefix(item) + '试题',
2016
- allClass: this.getPrefix(item) + '试题'
2015
+ singletonClass: this.getCurrentPrefix(item) + '题目',
2016
+ allClass: this.getPrefix(item) + '题目'
2017
2017
  },
2018
2018
  lowLevel: {
2019
2019
  default: "singletonClass",
2020
- singletonClass: this.getCurrentPrefix(item) + '试题'
2020
+ singletonClass: this.getCurrentPrefix(item) + '题目'
2021
2021
  }
2022
2022
  }
2023
2023
  }
@@ -2091,19 +2091,19 @@ let buttonNames = {
2091
2091
  headLevel: {
2092
2092
  default: "demand",
2093
2093
  demand: '作业要求',
2094
- resourceIndex: '作业试题',
2094
+ resourceIndex: '作业题目',
2095
2095
  review: '作业点评',
2096
2096
  analyse: '作业分析',
2097
2097
  countermeasure: '教学对策'
2098
2098
  },
2099
2099
  otherLevel: {
2100
2100
  default: "singletonClass",
2101
- singletonClass: this.getCurrentPrefix(item) + '试题',
2102
- allClass: this.getPrefix(item) + '试题'
2101
+ singletonClass: this.getCurrentPrefix(item) + '题目',
2102
+ allClass: this.getPrefix(item) + '题目'
2103
2103
  },
2104
2104
  lowLevel: {
2105
2105
  default: "singletonClass",
2106
- singletonClass: this.getCurrentPrefix(item) + '试题'
2106
+ singletonClass: this.getCurrentPrefix(item) + '题目'
2107
2107
  }
2108
2108
  }
2109
2109
  }
@@ -2404,6 +2404,27 @@ let buttonNames = {
2404
2404
  }
2405
2405
  }
2406
2406
  },
2407
+ resource_lesson_rhyme: {
2408
+ actionName: '课程歌诀',
2409
+ buttonList: {
2410
+ 0: {
2411
+ headLevel: {
2412
+ default: "btnIndex1",
2413
+ btnIndex1: this.getCurrentPrefix(item) + '歌诀',
2414
+ btnIndex2: this.getPrefix(item) + '歌诀'
2415
+ },
2416
+ otherLevel: {
2417
+ default: "btnIndex1",
2418
+ btnIndex1: this.getCurrentPrefix(item) + '歌诀',
2419
+ btnIndex2: this.getPrefix(item) + '歌诀'
2420
+ },
2421
+ lowLevel: {
2422
+ default: "btnIndex1",
2423
+ btnIndex1: this.getCurrentPrefix(item) + '歌诀',
2424
+ }
2425
+ }
2426
+ }
2427
+ },
2407
2428
  }[this.actionId];
2408
2429
  },
2409
2430
  // 获取前缀内容
@@ -4,7 +4,7 @@
4
4
  <div v-if="actionConfig[actionId].isShowFinishState" class="task_item_main width100" :class="isWidth50 ? 'width50': 'width100'" style="z-index: 110">
5
5
  <div class="task_text_desc">动作性质:</div>
6
6
  <div class="width250">
7
- <zydxSelect :options="finishStateOptions" v-model:value="finishState"></zydxSelect>
7
+ <zydxSelect :readonly="readonly" :options="finishStateOptions" v-model:value="finishState"></zydxSelect>
8
8
  </div>
9
9
  </div>
10
10
  <template v-if="actionConfig[actionId].isShowEndTime">
@@ -13,10 +13,12 @@
13
13
  <div class="task_text_desc"><span v-if="actionId === 'action_lesson015'">{{getUppercase(index)}}轮</span>{{actionConfig[actionId].endTimeBtn2}}:</div>
14
14
  <div class="width250">
15
15
  <zydx-input v-model:value="info.examJoinTime"
16
+ :readonly="readonly"
16
17
  :placeholder="'不限制'"
18
+ :border="!readonly"
17
19
  :type="'number'">
18
20
  <template #suffix>
19
- <span>分钟</span>
21
+ <span v-if="!readonly">分钟</span>
20
22
  </template>
21
23
  </zydx-input>
22
24
  </div>
@@ -24,12 +26,13 @@
24
26
  <div v-else class="task_item_main" :class="getZindex(index)">
25
27
  <div class="task_text_desc"><span v-if="actionId === 'action_lesson015'">{{getUppercase(index)}}轮</span>{{actionConfig[actionId].endTimeBtn1}}:</div>
26
28
  <div class="width250" style=" position: relative">
27
- <zydx-input v-model:value="info.endTime"
29
+ <zydx-input :value="dateFormat(info.endTime)"
28
30
  :placeholder="'不限制'"
29
- :readonly="true"
31
+ :readonly="readonly"
32
+ :border="!readonly"
30
33
  :type="'input'">
31
34
  <template #suffix>
32
- <span><img @click="showExamJoinCalenderTime[index] = !showExamJoinCalenderTime[index]" src="data:image/png;base64,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"/></span>
35
+ <span><img v-if="!readonly" @click="this.showExamJoinCalenderTime[index] = !this.showExamJoinCalenderTime[index]" src="data:image/png;base64,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"/></span>
33
36
  </template>
34
37
  </zydx-input>
35
38
  <div style="position: absolute; right: 0px; top: 15px;">
@@ -40,7 +43,7 @@
40
43
  <div v-if="actionConfig[actionId].isShowLaterScore" class="task_item_main" :class="getZindex(index)">
41
44
  <div class="task_text_desc">迟交扣分:</div>
42
45
  <div class="width250">
43
- <zydxSelect :options="laterScoreOptions" v-model:value="info.laterScore"></zydxSelect>
46
+ <zydxSelect :readonly="readonly" :options="laterScoreOptions" v-model:value="info.laterScore"></zydxSelect>
44
47
  </div>
45
48
  </div>
46
49
  </template>
@@ -48,25 +51,25 @@
48
51
  <div v-if="actionConfig[actionId].isShowScreenLimit" class="task_item_main" style="z-index: 2">
49
52
  <div class="task_text_desc">切屏限制:</div>
50
53
  <div class="width250">
51
- <zydxSelect :options="screenLimitOptions" v-model:value="screenLimit"></zydxSelect>
54
+ <zydxSelect :readonly="readonly" :options="screenLimitOptions" v-model:value="screenLimit"></zydxSelect>
52
55
  </div>
53
56
  </div>
54
57
  <div v-if="actionConfig[actionId].isShowFunDisable" class="task_item_main" style="z-index: 2">
55
58
  <div class="task_text_desc">复制限制:</div>
56
59
  <div class="width250">
57
- <zydxSelect :options="funDisableOptions" v-model:value="funDisable"></zydxSelect>
60
+ <zydxSelect :readonly="readonly" :options="funDisableOptions" v-model:value="funDisable"></zydxSelect>
58
61
  </div>
59
62
  </div>
60
63
  <div v-if="actionConfig[actionId].isShowReviewObj" class="task_item_main" style="z-index: 1">
61
64
  <div class="task_text_desc">评价主体:</div>
62
65
  <div class="width250">
63
- <zydxSelect :options="reviewObjOptions" v-model:value="reviewObj"></zydxSelect>
66
+ <zydxSelect :readonly="readonly" :options="reviewObjOptions" v-model:value="reviewObj"></zydxSelect>
64
67
  </div>
65
68
  </div>
66
69
  <div v-if="actionConfig[actionId].isShowReviewDemand" class="task_item_main" style="z-index: 1">
67
70
  <div class="task_text_desc">评价要求:</div>
68
71
  <div class="width250">
69
- <zydxSelect :options="reviewDemandOptions" v-model:value="reviewDemand"></zydxSelect>
72
+ <zydxSelect :readonly="readonly" :options="reviewDemandOptions" v-model:value="reviewDemand"></zydxSelect>
70
73
  </div>
71
74
  </div>
72
75
 
@@ -92,12 +95,16 @@
92
95
  props: {
93
96
  actionId: {
94
97
  type: String,
95
- default: "action_lesson052"
98
+ default: ""
96
99
  },
97
100
  isTimeModel: {
98
101
  type: Boolean,
99
102
  default: false
100
103
  },
104
+ readonly: {
105
+ type: Boolean,
106
+ required: true
107
+ },
101
108
  taskList: {
102
109
  type: Array,
103
110
  default: () => []
@@ -531,9 +538,9 @@
531
538
  reviewObj: '1',
532
539
  reviewDemand: "1",
533
540
  finishState: "0",
534
- laterScore: '10',
535
- examJoinTime: '30',
536
- endTime: '2021-01-10',
541
+ laterScore: '0',
542
+ examJoinTime: '',
543
+ endTime: null,
537
544
  screenLimit: '0',
538
545
  funDisable: '0',
539
546
  round: 1
@@ -543,8 +550,8 @@
543
550
  reviewDemand: "1",
544
551
  finishState: "0",
545
552
  laterScore: '0',
546
- examJoinTime: '30',
547
- endTime: '2021-01-10',
553
+ examJoinTime: '',
554
+ endTime: null,
548
555
  screenLimit: '0',
549
556
  funDisable: '0',
550
557
  round: 2
@@ -554,8 +561,8 @@
554
561
  reviewDemand: "1",
555
562
  finishState: "0",
556
563
  laterScore: '0',
557
- examJoinTime: '30',
558
- endTime: '2021-01-10',
564
+ examJoinTime: '',
565
+ endTime: null,
559
566
  screenLimit: '0',
560
567
  funDisable: '0',
561
568
  round: 3
@@ -568,8 +575,8 @@
568
575
  reviewDemand: "1",
569
576
  finishState: "0",
570
577
  laterScore: '0',
571
- examJoinTime: '30',
572
- endTime: '2021-01-10',
578
+ examJoinTime: '',
579
+ endTime: null,
573
580
  screenLimit: '0',
574
581
  funDisable: '0',
575
582
  round: 1
@@ -606,7 +613,7 @@
606
613
  },
607
614
  examJoinConfirm (param, index) {
608
615
  this.showExamJoinCalenderTime[index] = !this.showExamJoinCalenderTime[index]
609
- this.taskInfoList[index].endTime = param.start + param.date
616
+ this.taskInfoList[index].endTime = new Date(param.start + ' '+ param.date)
610
617
  },
611
618
  getUppercase (index) {
612
619
  if (index === 0) {
@@ -617,9 +624,40 @@
617
624
  return "三"
618
625
  }
619
626
  },
620
- // 排序方法
621
627
  confirm () {
628
+ this.taskInfoList.forEach(item => {
629
+ Object.keys(item).forEach(key=>{
630
+ if(this.isEmpty(item[key])) {
631
+ delete item[key];
632
+ }
633
+ })
634
+ })
622
635
  return this.taskInfoList;
636
+ },
637
+ dateFormat (date) {
638
+ if (date != null) {
639
+ var y = date.getFullYear();
640
+ var m = date.getMonth() + 1;
641
+ m = m < 10 ? ('0' + m) : m;
642
+ var d = date.getDate();
643
+ d = d < 10 ? ('0' + d) : d;
644
+ var h = date.getHours();
645
+ h = h < 10 ? ('0' + h) : h;
646
+ var minute = date.getMinutes();
647
+ minute = minute < 10 ? ('0' + minute) : minute;
648
+ var second = date.getSeconds();
649
+ second = second < 10 ? ('0' + second) : second;
650
+ return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + second;
651
+ } else {
652
+ return null;
653
+ }
654
+ },
655
+ isEmpty(obj) {
656
+ if (typeof obj === 'undefined' || obj === null || obj === '') {
657
+ return true;
658
+ } else {
659
+ return false;
660
+ }
623
661
  }
624
662
  }
625
663
  }
@@ -0,0 +1,6 @@
1
+ import main from './src/choice';
2
+
3
+ main.install = function(Vue) {
4
+ Vue.component(main.name, main);
5
+ };
6
+ export default main;
@@ -0,0 +1,148 @@
1
+ <template>
2
+ <div class="choice">
3
+ <div class="choice-title">
4
+ <div class="choice-title-left">
5
+ <span><i>*</i>试题选项:</span>
6
+ <em>(每道多选题至少有两个正确项, 所有选项需给出至少一个答案)</em>
7
+ </div>
8
+ <div class="choice-title-right">
9
+ <button class="but" @click="add('correct')">增正确项</button>
10
+ <button class="but" @click="add('interfere')">增干扰项</button>
11
+ </div>
12
+ </div>
13
+ <div class="choice-list" v-for="(item,index) in list">
14
+ <div class="list-title" :class="{'lv-color': item.type === 'correct','red-color': item.type === 'interfere'}">
15
+ <span>{{ item.letter }} . {{ item.title }}</span>
16
+ <button class="but" @click="alternative(index)">增加备选</button>
17
+ </div>
18
+ <div class="list-cont">
19
+ <div class="list-cont-li" v-for="(it,ins) in item.list">
20
+ <span>{{ ins + 1 }}.</span>
21
+ <div class="list-cont-input">
22
+ <input type="text" v-model="it.value" placeholder="请输入选项..." />
23
+ <img @click="del(index,ins)" v-if="ins !== 0" src="data:image/png;base64,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" alt="" />
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ </template>
30
+
31
+ <script>
32
+ export default {
33
+ name: "zydx-choice",
34
+ data() {
35
+ return {
36
+ list: [],
37
+ letter: {0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',6:'G',7:'H'},
38
+ }
39
+ },
40
+ methods: {
41
+ getContent() {
42
+ return this.list
43
+ },
44
+ add(str) {
45
+ const index = this.list.length
46
+ this.list.push({
47
+ type: str,
48
+ letter: this.letter[index],
49
+ title: (str === 'correct')? '正确选项' : '干扰选项',
50
+ list: [{value: ''}]
51
+ })
52
+ },
53
+ alternative(index) {
54
+ this.list[index].list.push({value: ''})
55
+ },
56
+ del(index,ins) {
57
+ this.list[index].list.splice(ins, 1)
58
+ },
59
+ }
60
+ }
61
+ </script>
62
+
63
+ <style scoped>
64
+ .list-cont-input{
65
+ width: 100%;
66
+ height: 30px;
67
+ border: 1px solid #ccc;
68
+ position: relative;
69
+ }
70
+ .list-cont-input input{
71
+ width: 100%;
72
+ height: 100%;
73
+ border: none;
74
+ outline: none;
75
+ padding: 0 30px 0 10px;
76
+ }
77
+ .list-cont-input img{
78
+ width: 18px;
79
+ height: 18px;
80
+ cursor: pointer;
81
+ position: absolute;
82
+ top: 5px;
83
+ right: 10px;
84
+ z-index: 1;
85
+ }
86
+ .list-cont-li{
87
+ padding: 2px 0;
88
+ display: flex;
89
+ }
90
+ .list-cont-li>span{
91
+ font-size: 14px;
92
+ font-weight: 400;
93
+ margin-right: 5px;
94
+ line-height: 30px;
95
+ }
96
+ .list-cont{
97
+ padding: 0 0 8px 30px;
98
+ }
99
+ .lv-color span{
100
+ color: #13BF6C;
101
+ }
102
+ .red-color span{
103
+ color: #FF0000;
104
+ }
105
+ .list-title{
106
+ padding: 2px 0 2px 10px;
107
+ display: flex;
108
+ justify-content: center;
109
+ }
110
+ .list-title span{
111
+ font-size: 14px;
112
+ font-weight: 400;
113
+ flex: 1;
114
+ }
115
+ .choice-title{
116
+ display: flex;
117
+ justify-content: center;
118
+ padding: 2px 0;
119
+ }
120
+ .choice-title-left{
121
+ flex: 1;
122
+ }
123
+ .choice-title-left span{
124
+ font-size: 14px;
125
+ font-weight: 700;
126
+ }
127
+ .choice-title-left span i{
128
+ color: red;
129
+ margin-right: 2px;
130
+ font-style: normal;
131
+ }
132
+ .choice-title-left em{
133
+ font-size: 12px;
134
+ font-style: normal;
135
+ }
136
+ .but{
137
+ margin-left: 5px;
138
+ font-size: 12px;
139
+ background-color: transparent;
140
+ border: 1px solid #000;
141
+ border-radius: 3px;
142
+ padding: 2px 5px;
143
+ cursor: pointer;
144
+ min-width: 60px;
145
+ height: 21px;
146
+ display: inline-block;
147
+ }
148
+ </style>
@@ -80,6 +80,7 @@ import { html2json, json2html } from 'html2json'
80
80
  import { Editor, EditorContent } from '@tiptap/vue-3'
81
81
  import StarterKit from '@tiptap/starter-kit'
82
82
  import Image from '@tiptap/extension-image'
83
+ import TextAlign from '@tiptap/extension-text-align'
83
84
  export default {
84
85
  name: 'zydx-xiao-editor',
85
86
  components: {
@@ -207,6 +208,9 @@ export default {
207
208
  editable: this.readOnly,
208
209
  extensions: [
209
210
  StarterKit,
211
+ TextAlign.configure({
212
+ types: ['heading', 'paragraph'],
213
+ }),
210
214
  Image.configure({
211
215
  inline: true,
212
216
  HTMLAttributes: {
@@ -369,6 +373,8 @@ export default {
369
373
  if(v === 'h2') this.editor.chain().focus().toggleHeading({level:2}).run()
370
374
  if(v === 'h3') this.editor.chain().focus().toggleHeading({level:3}).run()
371
375
  if(v === 'p') this.editor.chain().focus().setParagraph().run()
376
+ if(v === 'bold') this.editor.chain().focus().toggleBold().run()
377
+ if(v === 'center' || v === 'left' || v === 'right') this.editor.chain().focus().setTextAlign(v).run()
372
378
  }
373
379
  }
374
380
  }
@@ -162,6 +162,7 @@ export default defineComponent({
162
162
  align-items: center;
163
163
  justify-content: flex-start;
164
164
  border-radius: 3px;
165
+ border:1px solid transparent;
165
166
  }
166
167
 
167
168
  .input_wrapper.border {
@@ -0,0 +1,6 @@
1
+ import main from './src/preface';
2
+
3
+ main.install = function(Vue) {
4
+ Vue.component(main.name, main);
5
+ };
6
+ export default main;
@@ -0,0 +1,114 @@
1
+ <template>
2
+ <div class="preface">
3
+ <div class="preface-left">
4
+ <span>题序设置:</span>
5
+ <div class="preface-input">
6
+ <input type="number" @input="numbers" @keypress="isNumberKey($event)" />
7
+ </div>
8
+ </div>
9
+ <div class="preface-right">
10
+ <span>难易设置:</span>
11
+ <div class="preface-list" v-for="(item,index) in radioList">
12
+ <label>
13
+ <input type="radio" name="difficulty" :value="item.value" @change="radioTao(item.value)" :checked="item.checked" />
14
+ <span>{{ item.label }}</span>
15
+ </label>
16
+ </div>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script>
22
+ export default {
23
+ name: "zydx-preface",
24
+ data() {
25
+ return {
26
+ radioList: [
27
+ {value: 1, label: '易',checked: true},
28
+ {value: 2, label: '中',checked: false},
29
+ {value: 3, label: '难',checked: false}
30
+ ],
31
+ radioValue: 1,
32
+ inputValue: ''
33
+ }
34
+ },
35
+ emits: ['change'],
36
+ methods: {
37
+ radioTao(v) {
38
+ this.radioValue = v;
39
+ this.$emit('change', {
40
+ diffLeve: this.radioValue,
41
+ quesNo: this.inputValue
42
+ })
43
+ },
44
+ numbers(v) {
45
+ this.inputValue = v.target.value;
46
+ this.$emit('change', {
47
+ diffLeve: this.radioValue,
48
+ quesNo: this.inputValue
49
+ })
50
+ },
51
+ isNumberKey(event) {
52
+ const charCode = (event.which) ? event.which : event.keyCode;
53
+ if(event.target.value.length > 2) event.preventDefault();
54
+ if (charCode > 31 && (charCode < 48 || charCode > 57)) event.preventDefault();
55
+ if (this.valueState(event.target.value) && String.fromCharCode(charCode) === '0') event.preventDefault();
56
+ },
57
+ valueState(v) {
58
+ return v === '' || v === undefined || v === null;
59
+ },
60
+ }
61
+ }
62
+ </script>
63
+
64
+ <style scoped>
65
+ .preface{
66
+ display: flex;
67
+ justify-content: center;
68
+ }
69
+ .preface-left{
70
+ flex: 1;
71
+ display: flex;
72
+ }
73
+ .preface-left>span,.preface-right>span{
74
+ font-size: 14px;
75
+ color: #000;
76
+ font-weight: 700;
77
+ line-height: 30px;
78
+ }
79
+ .preface-input{
80
+ width: 40px;
81
+ height: 30px;
82
+ border: 1px solid rgba(204, 204, 204, 1);
83
+ display: inline-block;
84
+ overflow: hidden;
85
+ }
86
+ .preface-input>input{
87
+ width: 50px;
88
+ height: 29px;
89
+ border: none;
90
+ padding-left: 5px;
91
+ }
92
+ .preface-right{
93
+ display: flex;
94
+ line-height: 30px;
95
+ }
96
+ .preface-list>label{
97
+ display: inline-block;
98
+ position: relative;
99
+ }
100
+ .preface-list input{
101
+ width: 16px;
102
+ height: 16px;
103
+ position: absolute;
104
+ top: 7px;
105
+ left: 0;
106
+ z-index: 1;
107
+ }
108
+ .preface-list span{
109
+ font-size: 14px;
110
+ color: #666;
111
+ line-height: 30px;
112
+ padding: 0 10px 0 25px;
113
+ }
114
+ </style>
@@ -0,0 +1,48 @@
1
+ <script>
2
+ export default {
3
+ props: {
4
+ target: {
5
+ type: [HTMLElement, String],
6
+ default: null
7
+ },
8
+ handler: {
9
+ type: Function,
10
+ default: () => { }
11
+ }
12
+ },
13
+ mounted() {
14
+ window.addEventListener("pointerdown", this.listener)
15
+ },
16
+ beforeUnmount() {
17
+ window.removeEventListener("pointerdown", this.listener)
18
+ },
19
+ methods: {
20
+ listener: function (event) {
21
+ const el = this.target
22
+ if (!el || el === event.target || this.eventPath(event).includes(el)) {
23
+ return
24
+ }
25
+ this.handler(event)
26
+ },
27
+ eventPath(event) {
28
+ const path = (event.composedPath && event.composedPath()) || event.path
29
+
30
+ if (path != null)
31
+ return path
32
+
33
+ function getParents(node, memo = []) {
34
+ const parentNode = node.parentNode
35
+
36
+ return parentNode
37
+ ? getParents(parentNode, memo.concat([parentNode]))
38
+ : memo
39
+ }
40
+
41
+ return [event.target].concat(getParents(event.target))
42
+ }
43
+ },
44
+ render() {
45
+ return this.$slots.default()
46
+ }
47
+ }
48
+ </script>
@@ -1,48 +1,57 @@
1
1
  <template>
2
- <div class="wrapper">
3
- <div class="custom-select"
4
- :class="{ 'readonly': readonly }">
5
- <input type="text"
6
- :value="selected"
7
- :placeholder="placeholder"
8
- :readonly="true"
9
- @click="toggleDropDown"
10
- class="select-css" />
11
-
12
- <span class="custom-select-icons"
13
- v-if="!readonly"
14
- @click="toggleDropDown">
15
- <svg xmlns="http://www.w3.org/2000/svg"
16
- width="16"
17
- height="16"
18
- viewBox="0 0 24 24">
19
- <g :transform="transform"
20
- :style="style">
21
- <path fill="#c0c4cc"
22
- d="M15.125 21.1L6.7 12.7q-.15-.15-.213-.325T6.425 12q0-.2.062-.375T6.7 11.3l8.425-8.425q.35-.35.875-.35t.9.375q.375.375.375.875t-.375.875L9.55 12l7.35 7.35q.35.35.35.863t-.375.887q-.375.375-.875.375t-.875-.375Z" />
23
- </g>
24
- </svg>
25
- </span>
26
- <transition>
27
- <template v-if="!readonly">
28
- <template v-if="options.length">
29
- <ul v-if="isOpen"
30
- :class="{ 'custom-select-options': true, 'scroll': maxHeight > 0 }">
31
- <li v-for="(option, idx) in options"
32
- :key="idx"
33
- @click="handleClick(option)">{{ option.label }}</li>
34
- </ul>
2
+ <onClickOutSide :target="dropdown"
3
+ :handler="handler">
4
+ <div class="wrapper">
5
+ <div class="custom-select"
6
+ :class="{ 'readonly': readonly }">
7
+ <input type="text"
8
+ :value="selected"
9
+ :placeholder="placeholder"
10
+ :readonly="true"
11
+ @click="toggleDropDown"
12
+ class="select-css" />
13
+
14
+ <span class="custom-select-icons"
15
+ v-if="!readonly"
16
+ @click="toggleDropDown">
17
+ <svg xmlns="http://www.w3.org/2000/svg"
18
+ width="16"
19
+ height="16"
20
+ viewBox="0 0 24 24">
21
+ <g :transform="transform"
22
+ :style="style">
23
+ <path fill="#c0c4cc"
24
+ d="M15.125 21.1L6.7 12.7q-.15-.15-.213-.325T6.425 12q0-.2.062-.375T6.7 11.3l8.425-8.425q.35-.35.875-.35t.9.375q.375.375.375.875t-.375.875L9.55 12l7.35 7.35q.35.35.35.863t-.375.887q-.375.375-.875.375t-.875-.375Z" />
25
+ </g>
26
+ </svg>
27
+ </span>
28
+ <transition>
29
+ <template v-if="!readonly">
30
+ <template v-if="options.length">
31
+ <ul v-if="isOpen"
32
+ ref="dropdown"
33
+ :class="{ 'custom-select-options': true, 'scroll': maxHeight > 0 }">
34
+ <li v-for="(option, idx) in options"
35
+ :key="idx"
36
+ @click="handleClick(option)">{{ option.label }}</li>
37
+ </ul>
38
+ </template>
35
39
  </template>
36
- </template>
37
- </transition>
40
+ </transition>
41
+ </div>
38
42
  </div>
39
- </div>
43
+ </onClickOutSide>
40
44
  </template>
41
-
45
+ <script setup>
46
+ import { ref } from 'vue'
47
+ let dropdown = ref(null)
48
+ </script>
42
49
  <script>
50
+ import onClickOutSide from './onClickOutSide.vue'
43
51
  import { defineComponent } from 'vue'
44
52
  export default defineComponent({
45
53
  name: 'zydx-select',
54
+ components: { onClickOutSide },
46
55
  props: {
47
56
  options: {
48
57
  type: Array,
@@ -88,9 +97,13 @@ export default defineComponent({
88
97
  this.$emit('select', option)
89
98
  this.selected = option.label
90
99
  this.isOpen = false
100
+ },
101
+ handler: function () {
102
+ if (this.isOpen) {
103
+ this.isOpen = false
104
+ }
91
105
  }
92
106
  },
93
-
94
107
  computed: {
95
108
  transform: function () {
96
109
  return this.isOpen
@@ -155,7 +168,7 @@ export default defineComponent({
155
168
  }
156
169
 
157
170
  .custom-select.readonly .select-css {
158
- border: none;
171
+ border: 1px solid transparent;
159
172
  }
160
173
 
161
174
  .select-css {
package/src/index.js CHANGED
@@ -25,6 +25,8 @@ import textarea from './components/textarea/index';
25
25
  import titleBox from './components/titleBox/index';
26
26
  import input from './components/input/index';
27
27
  import time from './components/time/index';
28
+ import preface from './components/preface/index';
29
+ import choice from './components/choice/index';
28
30
 
29
31
  const components = [
30
32
  Calendar,
@@ -51,7 +53,9 @@ const components = [
51
53
  textarea,
52
54
  titleBox,
53
55
  input,
54
- time
56
+ time,
57
+ preface,
58
+ choice
55
59
  ];
56
60
 
57
61
  function install(app) {
@@ -63,7 +67,7 @@ function install(app) {
63
67
  }
64
68
 
65
69
  export default {
66
- version: '1.20.123',
70
+ version: '1.22.124',
67
71
  install,
68
72
  Calendar,
69
73
  Message,
@@ -91,6 +95,8 @@ export default {
91
95
  textarea,
92
96
  titleBox,
93
97
  input,
94
- time
98
+ time,
99
+ preface,
100
+ choice
95
101
  };
96
102