fl-web-component 0.1.0 → 0.1.1

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.
Files changed (33) hide show
  1. package/README.md +35 -24
  2. package/dist/fl-web-component.common.js +67035 -54
  3. package/dist/fl-web-component.common.js.map +1 -1
  4. package/dist/fl-web-component.css +1 -1
  5. package/dist/fl-web-component.umd.js +67035 -54
  6. package/dist/fl-web-component.umd.js.map +1 -1
  7. package/dist/fl-web-component.umd.min.js +13 -1
  8. package/dist/fl-web-component.umd.min.js.map +1 -1
  9. package/package.json +59 -47
  10. package/packages/components/button/index.vue +6 -3
  11. package/packages/components/com-card/card-page.vue +100 -0
  12. package/packages/components/com-card/index.vue +54 -0
  13. package/packages/components/com-dialogWrapper/Readme.md +53 -0
  14. package/packages/components/com-dialogWrapper/index.vue +101 -0
  15. package/packages/components/com-formDialog/Readme.md +409 -0
  16. package/packages/components/com-formDialog/index.vue +470 -0
  17. package/packages/components/com-graphics/index.vue +240 -0
  18. package/packages/components/com-page/index.vue +101 -0
  19. package/packages/components/com-selectTree/Readme.md +17 -0
  20. package/packages/components/com-selectTree/index.vue +238 -0
  21. package/packages/components/com-table/column-default.vue +76 -0
  22. package/packages/components/com-table/column-dynamic.vue +40 -0
  23. package/packages/components/com-table/column-menu.vue +71 -0
  24. package/packages/components/com-table/column-slot.vue +53 -0
  25. package/packages/components/com-table/column.vue +49 -0
  26. package/packages/components/com-table/config.js +21 -0
  27. package/packages/components/com-table/index.vue +281 -0
  28. package/packages/components/com-table/table-page.vue +106 -0
  29. package/packages/components/com-tabs/index.vue +50 -0
  30. package/packages/components/com-treeDynamic/Readme.md +271 -0
  31. package/packages/components/com-treeDynamic/index.vue +207 -0
  32. package/patches/camera-controls+2.9.0.patch +63 -0
  33. package/{packages/index.js → src/main.js} +5 -5
@@ -0,0 +1,101 @@
1
+ <template>
2
+ <el-pagination
3
+ :small="comTable.size == 'mini'"
4
+ :disabled="defaultPage.disabled"
5
+ :hide-on-single-page="defaultPage.single"
6
+ :pager-count="defaultPage.pagerCount"
7
+ :current-page.sync="defaultPage.currentPage"
8
+ :background="defaultPage.background"
9
+ :page-size="defaultPage.pageSize"
10
+ :page-sizes="defaultPage.pageSizes"
11
+ @size-change="sizeChange"
12
+ @prev-click="prevClick"
13
+ @next-click="nextClick"
14
+ @current-change="currentChange"
15
+ :layout="defaultPage.layout"
16
+ :total="defaultPage.total"
17
+ ></el-pagination>
18
+ </template>
19
+
20
+ <script>
21
+ import base from "../../utils/base.js";
22
+
23
+ export default {
24
+ name: "comTable",
25
+ inject: ["comTable"],
26
+ mixins: [base()],
27
+ data() {
28
+ return {
29
+ defaultPage: {
30
+ single: false,
31
+ total: 0, // 总页数
32
+ pagerCount: 7, //超过多少条隐藏
33
+ currentPage: 1, // 当前页数
34
+ pageSize: 10, // 每页显示多少条
35
+ pageSizes: [10, 20, 30, 40, 50, 100],
36
+ layout: "total, sizes, prev, pager, next, jumper",
37
+ background: true, // 背景颜色
38
+ },
39
+ };
40
+ },
41
+ created() {
42
+ this.pageInit();
43
+ this.comTable.$emit("on-load", this.defaultPage);
44
+ },
45
+ watch: {
46
+ "comTable.page": {
47
+ handler() {
48
+ this.pageInit();
49
+ },
50
+ deep: true,
51
+ },
52
+ },
53
+ computed: {
54
+ pageFlag() {
55
+ return this.defaultPage.total != 0;
56
+ },
57
+ },
58
+ methods: {
59
+ pageInit() {
60
+ this.defaultPage = Object.assign(this.defaultPage, this.comTable.page);
61
+ this.updateValue();
62
+ },
63
+ updateValue() {
64
+ console.log("updateValue defaultPage", this.defaultPage);
65
+ this.comTable.$emit("update:page", this.defaultPage);
66
+ },
67
+ //下一页事件
68
+ nextClick(val) {
69
+ console.log("nextClick", val);
70
+ this.comTable.$emit("next-click", val);
71
+ },
72
+ //上一页事件
73
+ prevClick(val) {
74
+ console.log("prevClick", val);
75
+ this.comTable.$emit("prev-click", val);
76
+ },
77
+ // 页大小回调
78
+ sizeChange(val) {
79
+ this.defaultPage.currentPage = 1;
80
+ this.defaultPage.pageSize = val;
81
+ this.updateValue();
82
+ console.log("sizeChange", val);
83
+ this.comTable.$emit("on-load", this.defaultPage);
84
+ this.comTable.$emit("size-change", val);
85
+ },
86
+ // 页码回调
87
+ currentChange(val) {
88
+ this.updateValue();
89
+ this.comTable.$emit("on-load", this.defaultPage);
90
+ this.comTable.$emit("current-change", val);
91
+ },
92
+ },
93
+ };
94
+ </script>
95
+
96
+ <style lang="scss" scoped>
97
+ .el-pagination {
98
+ text-align: right;
99
+ padding: 15px 10px 15px 20px !important;
100
+ }
101
+ </style>
@@ -0,0 +1,17 @@
1
+ <!-- 使用方法 样例 -->
2
+ <SelectTree
3
+ ref="SelectTree"
4
+ :filterable="true"
5
+ :value-key="`deptId`"
6
+ :select-key="`deptId`"
7
+ :value-name="`deptName`"
8
+ :tree-data="item.optionArr"
9
+ :tree-props="{
10
+ id: 'deptId',
11
+ label: 'deptName',
12
+ children: 'children'
13
+ }"
14
+ :tree-node-key="`deptId`"
15
+ :placeholder-title="`请选择${item.label}`"
16
+ @nodeClickTree="nodeClickTree"
17
+ />
@@ -0,0 +1,238 @@
1
+ <!--
2
+ * @Author: fengyang9326@163.com
3
+ * @Date: 2024-05-13 10:36:07
4
+ * @LastEditors: fengyang9326@163.com
5
+ * @LastEditTime: 2024-05-20 09:38:24
6
+ * @FilePath: /web/components/com-selectTree/index.vue
7
+ * @Description: 树结构下拉框
8
+ -->
9
+ <template>
10
+ <el-select
11
+ ref="Select"
12
+ v-model="formData"
13
+ :value-key="selectKey"
14
+ :placeholder="placeholderTitle"
15
+ size="medium"
16
+ :clearable="clearable"
17
+ :disabled="disabled"
18
+ :filterable="filterable"
19
+ :filter-method="filterMethod"
20
+ style="width: 100%;"
21
+ @clear="clear"
22
+ @visible-change="visibleChange"
23
+ @focus="setMinWidth"
24
+ >
25
+ <el-option
26
+ ref="option"
27
+ class="select_tree_option"
28
+ :value="formData.id"
29
+ :label="formData.name"
30
+ :style="{'width': minWidth + 2 + 'px'}"
31
+ >
32
+ <el-tree
33
+ ref="Tree"
34
+ class="select_tree_tree"
35
+ :node-key="treeNodeKey"
36
+ :current-node-key="currentSelect"
37
+ :data="treeData"
38
+ :props="treeProps"
39
+ :highlight-current="true"
40
+ :expand-on-click-node="false"
41
+ :default-expanded-keys="parentList"
42
+ :filter-node-method="filterNode"
43
+ @node-click="handleNodeClick"
44
+ >
45
+ <span slot-scope="{ node }" class="custom-tree-node">
46
+ <span :title="node.label" class="title_tree">{{ node.label }}</span>
47
+ </span>
48
+ </el-tree>
49
+ </el-option>
50
+ </el-select>
51
+ </template>
52
+ <script>
53
+
54
+ export default {
55
+ name: 'SelectTree',
56
+ props: {
57
+ // v-model绑定
58
+ // 作为 el-select value 唯一标识的键名,绑定值为对象类型时必填
59
+ selectKey: {
60
+ type: String,
61
+ default: 'id'
62
+ },
63
+ valueKey: {
64
+ type: String,
65
+ default: 'id'
66
+ },
67
+ valueName: {
68
+ type: String,
69
+ default: 'name'
70
+ },
71
+ // 树形的数据
72
+ treeData: {
73
+ type: Array,
74
+ default: () => ([])
75
+ },
76
+ // 下拉框默认提示
77
+ placeholderTitle: {
78
+ type: String,
79
+ default: '请选择'
80
+ },
81
+ // 每个树节点用来作为唯一标识的属性
82
+ treeNodeKey: {
83
+ type: [String, Number],
84
+ default: 'id'
85
+ },
86
+ // 是否可搜
87
+ filterable: {
88
+ type: Boolean,
89
+ default: false
90
+ },
91
+ // 是否禁用
92
+ disabled: {
93
+ type: Boolean,
94
+ default: false
95
+ },
96
+ // 是否可清空input
97
+ clearable: {
98
+ type: Boolean,
99
+ default: false
100
+ },
101
+ // tree的props配置
102
+ treeProps: {
103
+ type: Object,
104
+ default: () => ({})
105
+ },
106
+ // 弹窗标题
107
+ title: {
108
+ type: String,
109
+ default: '新建'
110
+ },
111
+ echoData: {
112
+ type: Object,
113
+ default: () => ({})
114
+ }
115
+ },
116
+ data() {
117
+ return {
118
+ // 下拉框最小宽度样式
119
+ minWidth: undefined,
120
+ formData: {
121
+ id: '',
122
+ name: ''
123
+ },
124
+ parentList: [], // 树结构默认展开的节点的 key 的数组
125
+ filterFlag: false,
126
+ currentSelect: '' // 当前选中的节点
127
+ }
128
+ },
129
+ computed: {
130
+ },
131
+ created() {
132
+ if (this.echoData[this.selectKey]) {
133
+ this.parentList.push(this.echoData[this.selectKey])
134
+ this.$set(this, 'currentSelect', this.echoData[this.selectKey])
135
+ this.$set(this.formData, 'id', this.echoData[this.selectKey])
136
+ }
137
+ },
138
+ mounted() {
139
+ this.$nextTick(() => {
140
+ this.$refs.Tree.setCurrentKey(this.currentSelect)
141
+ const nodeTree = this.$refs.Tree.getCurrentNode()
142
+ if (nodeTree) {
143
+ this.$set(this.formData, 'name', nodeTree[this.valueName])
144
+ }
145
+ if (!nodeTree) this.$set(this.formData, 'id', '')
146
+ })
147
+ },
148
+ methods: {
149
+ /* 下拉框样式 无数据的情况下,给请选择提示设置最小宽度*/
150
+ setMinWidth(val) {
151
+ this.minWidth = val.srcElement.clientWidth
152
+ },
153
+ /* 树节点被点击时的回调 */
154
+ handleNodeClick(data) {
155
+ if (!data[this.valueKey]) return
156
+ const DataId = data[this.valueKey]
157
+ const DataName = data[this.valueName]
158
+ this.$set(this.formData, 'id', DataId)
159
+ this.$set(this.formData, 'name', DataName)
160
+ this.$set(this, 'currentSelect', data[this.valueKey])
161
+ this.$refs.Select.visible = false
162
+ // this.$emit('nodeClickTree', this.formData)
163
+ this.$emit('nodeClickTree', data)
164
+ },
165
+ /* 下拉框出现/隐藏时触发 */
166
+ visibleChange(e) {
167
+ if (e) {
168
+ const tree = this.$refs.Tree
169
+ this.filterFlag && tree.filter('')
170
+ this.filterFlag = false
171
+ let selectDom = null
172
+ selectDom = tree.$el.querySelector('.is-current')
173
+ setTimeout(() => {
174
+ this.$refs.Select.scrollToOption({ $el: selectDom })
175
+ }, 0)
176
+ }
177
+ },
178
+ clear() {
179
+ this.formData = {
180
+ id: '',
181
+ name: ''
182
+ }
183
+ this.$refs.Tree.setCurrentKey(null)
184
+ this.$emit('nodeClickTree', this.formData)
185
+ },
186
+ /* 自定义搜索方法 */
187
+ filterMethod(val) {
188
+ this.filterFlag = true
189
+ this.$refs.Tree.filter(val)
190
+ },
191
+ /* 对树节点进行筛选时执行的方法 */
192
+ filterNode(value, data) {
193
+ if (!value) return true
194
+ const label = this.treeProps.label || 'name'
195
+ return data[label].indexOf(value) !== -1
196
+ }
197
+ }
198
+ }
199
+ </script>
200
+ <style lang="scss" scope>
201
+ .el-select-dropdown {
202
+ padding: 5px 0;
203
+ }
204
+ .select_tree_option {
205
+ &.el-select-dropdown__item {
206
+ height: auto;
207
+ line-height: 1;
208
+ padding: 0;
209
+ background-color: #fff;
210
+ }
211
+ }
212
+
213
+ .select_tree_tree {
214
+ padding: 0px 0px;
215
+ font-weight: 400;
216
+ }
217
+ .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
218
+ background-color: #fff;
219
+ color: #1890ff;
220
+ }
221
+ .el-tree-node__content {
222
+ width: 100%!important;
223
+ height: 34px!important;
224
+ line-height: 34px!important;
225
+ overflow: hidden;
226
+ &:hover{
227
+ background-color: transparent!important;
228
+ }
229
+ }
230
+ ::v-deep .select_tree_tree .el-tree-node .el-tree-node__content .custom-tree-node {
231
+ display: inline-block;
232
+ vertical-align: middle;
233
+ width: calc(100% - 50px)!important;
234
+ overflow: hidden;
235
+ white-space: nowrap;
236
+ text-overflow: ellipsis;
237
+ }
238
+ </style>
@@ -0,0 +1,76 @@
1
+ <template>
2
+ <div>
3
+ <component :is="comTable.tableColumnName" width="1px"></component>
4
+ <!-- 选择框 -->
5
+ <component
6
+ :is="comTable.tableColumnName"
7
+ v-if="comTable.tableOption.selection"
8
+ :fixed="
9
+ vaildData(comTable.tableOption.selectionFixed, config.selectionFixed)
10
+ "
11
+ type="selection"
12
+ key="selection"
13
+ :selectable="comTable.tableOption.selectable"
14
+ align="center"
15
+ ></component>
16
+ <!-- 序号 -->
17
+ <component
18
+ :is="comTable.tableColumnName"
19
+ v-if="vaildData(comTable.tableOption.index)"
20
+ :fixed="vaildData(comTable.tableOption.indexFixed, config.indexFixed)"
21
+ :label="comTable.tableOption.indexLabel || config.indexLabel"
22
+ type="index"
23
+ key="index"
24
+ :index="indexMethod"
25
+ align="center"
26
+ >
27
+ </component>
28
+ </div>
29
+ </template>
30
+
31
+ <script>
32
+ import config from "./config.js";
33
+ import base from "../../utils/base.js";
34
+
35
+ export default {
36
+ name: "comTable",
37
+ mixins: [base()],
38
+ components: {},
39
+ data() {
40
+ return {
41
+ config: config,
42
+ };
43
+ },
44
+ inject: ["comTable"],
45
+ mounted() {
46
+ this.setSort();
47
+ },
48
+ methods: {
49
+ indexMethod(index) {
50
+ return (
51
+ index +
52
+ 1 +
53
+ ((this.comTable.page.currentPage || 1) - 1) *
54
+ (this.comTable.page.pageSize || 10)
55
+ );
56
+ },
57
+ setSort() {
58
+ this.rowDrop();
59
+ },
60
+ rowDrop() {
61
+ if (!this.comTable.$refs.table) return;
62
+ const el = this.comTable.$refs.table.$el.querySelectorAll(
63
+ this.config.dropRowClass
64
+ )[0];
65
+ this.comTable.tableDrop("row", el, (evt) => {
66
+ const oldIndex = evt.oldIndex;
67
+ const newIndex = evt.newIndex;
68
+ const targetRow = this.comTable.list.splice(oldIndex, 1)[0];
69
+ this.comTable.list.splice(newIndex, 0, targetRow);
70
+ this.comTable.$emit("sortable-change", oldIndex, newIndex);
71
+ this.comTable.refreshTable(() => this.rowDrop());
72
+ });
73
+ },
74
+ },
75
+ };
76
+ </script>
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <component
3
+ :is="comTable.tableColumnName"
4
+ :prop="columnOption.prop"
5
+ :key="columnOption.prop"
6
+ :label="columnOption.label"
7
+ :show-overflow-tooltip="columnOption.overHidden"
8
+ :align="columnOption.align || comTable.tableOption.align"
9
+ >
10
+ <template v-for="column in columnOption.children">
11
+ <column-dynamic
12
+ v-if="column.children && column.children.length > 0"
13
+ :key="column.label"
14
+ :columnOption="column"
15
+ >
16
+ </column-dynamic>
17
+ <column-slot
18
+ v-else
19
+ :column="column"
20
+ :column-option="columnOption.children"
21
+ >
22
+ </column-slot>
23
+ </template>
24
+ </component>
25
+ </template>
26
+
27
+ <script>
28
+ import columnSlot from "./column-slot";
29
+ export default {
30
+ name: "column-dynamic",
31
+ components: {
32
+ columnSlot,
33
+ },
34
+ inject: ["comTable"],
35
+ props: {
36
+ columnOption: Object,
37
+ },
38
+ created() {},
39
+ };
40
+ </script>
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <!-- 操作栏 -->
3
+ <component
4
+ :is="comTable.tableColumnName"
5
+ prop="menu"
6
+ key="menu"
7
+ :fixed="vaildData(comTable.tableOption.menuFixed, config.menuFixed)"
8
+ v-if="vaildData(comTable.tableOption.menu, config.menu)"
9
+ :label="comTable.tableOption.menuTitle || '操作'"
10
+ :align="comTable.tableOption.menuAlign || config.menuAlign"
11
+ :header-align="comTable.tableOption.menuHeaderAlign || config.menuHeaderAlign"
12
+ :width="comTable.tableOption.menuWidth || config.menuWidth"
13
+ >
14
+ <template slot="header" slot-scope="scope">
15
+ <span>{{ comTable.tableOption.menuTitle || "操作" }}</span>
16
+ </template>
17
+ <template slot-scope="{ row, column: tableColumn, $index }">
18
+ <div>
19
+ <template>
20
+ <el-button
21
+ :type="`text`"
22
+ :icon="`el-icon-edit`"
23
+ :size="comTable.isMediumSize"
24
+ :disabled="comTable.btnDisabled"
25
+ @click.stop="comTable.rowEdit(row, $index)"
26
+ v-if="vaildData(comTable.tableOption.editBtn, config.editBtn)"
27
+ >
28
+ {{ "编 辑" }}
29
+ </el-button>
30
+ <el-button
31
+ :type="`text`"
32
+ :icon="`el-icon-delete`"
33
+ :size="comTable.isMediumSize"
34
+ :disabled="comTable.btnDisabled"
35
+ @click.stop="comTable.rowDel(row, $index)"
36
+ v-if="vaildData(comTable.tableOption.delBtn, config.delBtn)"
37
+ >
38
+ {{ "删 除" }}
39
+ </el-button>
40
+ </template>
41
+ <slot
42
+ name="menu"
43
+ :row="row"
44
+ :column="tableColumn"
45
+ :type="`text`"
46
+ :disabled="comTable.btnDisabled"
47
+ :size="comTable.isMediumSize"
48
+ :index="$index"
49
+ ></slot>
50
+ </div>
51
+ </template>
52
+ </component>
53
+ </template>
54
+
55
+ <script>
56
+ import config from "./config.js";
57
+ import base from "../../utils/base.js";
58
+
59
+ export default {
60
+ name: "comTable",
61
+ mixins: [base()],
62
+ components: {},
63
+ data() {
64
+ return {
65
+ config: config,
66
+ };
67
+ },
68
+ inject: ["comTable"],
69
+ mounted: function () {},
70
+ };
71
+ </script>
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <component
3
+ :is="comTable.tableColumnName"
4
+ :key="column.prop"
5
+ :prop="column.prop"
6
+ :label="column.label"
7
+ :column-key="column.prop"
8
+ :show-overflow-tooltip="column.showOverflowTooltip || column.overHidden"
9
+ :align="column.align || comTable.tableOption.align"
10
+ :header-align="column.headerAlign || comTable.tableOption.headerAlign"
11
+ :fixed="vaildData(column.fixed, config.columnFixed)"
12
+ >
13
+ <template slot-scope="{ row, column: tableColumn, $index }">
14
+ <slot
15
+ :row="row"
16
+ :tableColumn="tableColumn"
17
+ :column="column"
18
+ :index="$index"
19
+ :size="comTable.isMediumSize"
20
+ :label="row[column.prop]"
21
+ :name="column.prop"
22
+ v-if="comTable.$scopedSlots[column.prop]"
23
+ ></slot>
24
+ <template v-else>
25
+ <span v-text="row[column.prop]"></span>
26
+ </template>
27
+ </template>
28
+ </component>
29
+ </template>
30
+
31
+ <script>
32
+ import base from "../../utils/base.js";
33
+ import config from "./config.js";
34
+
35
+ export default {
36
+ name: "column-slot",
37
+ mixins: [base()],
38
+ inject: ["comTable"],
39
+ data: function () {
40
+ return {
41
+ config: config,
42
+ };
43
+ },
44
+ components: {},
45
+ props: {
46
+ column: Object,
47
+ },
48
+ created() {},
49
+ methods: {},
50
+ };
51
+ </script>
52
+
53
+ <style></style>
@@ -0,0 +1,49 @@
1
+ <template>
2
+ <div>
3
+ <slot name="header"></slot>
4
+ <!-- 动态列 -->
5
+ <template v-for="(column, index) in columnOption">
6
+ <column-dynamic
7
+ v-if="column.children && column.children.length > 0"
8
+ :columnOption="column"
9
+ :key="column.label"
10
+ >
11
+ </column-dynamic>
12
+ <column-slot
13
+ v-else
14
+ :column="column"
15
+ :column-option="columnOption"
16
+ >
17
+ <template
18
+ v-for="item in comTable.mainSlot"
19
+ slot-scope="scope"
20
+ :slot="item"
21
+ >
22
+ <slot v-bind="scope" :name="item"></slot>
23
+ </template>
24
+ </column-slot>
25
+ </template>
26
+ <slot name="footer"></slot>
27
+ </div>
28
+ </template>
29
+
30
+ <script>
31
+ import columnDynamic from "./column-dynamic";
32
+ import columnSlot from "./column-slot";
33
+ export default {
34
+ name: "comTable",
35
+ data() {
36
+ return {};
37
+ },
38
+ components: {
39
+ columnSlot,
40
+ columnDynamic,
41
+ },
42
+ inject: ["comTable"],
43
+ props: {
44
+ columnOption: Array,
45
+ },
46
+ computed: {},
47
+ methods: {},
48
+ };
49
+ </script>
@@ -0,0 +1,21 @@
1
+ // 配置文件
2
+ export default {
3
+ menuWidth: 220,
4
+ menuFixed: "right",
5
+ menuAlign: "center",
6
+ menuHeaderAlign: "center",
7
+ // 显隐
8
+ editBtn: true,
9
+ delBtn: true,
10
+ selectClearBtn: true,
11
+ tip: true,
12
+ menu: true,
13
+ indexLabel: "#",
14
+ indexFixed: "left",
15
+ selectionFixed: "left",
16
+ columnFixed: null,
17
+ width: "100%",
18
+ dropRowClass: ".el-table__body-wrapper > table > tbody",
19
+ showOverflowTooltip: true,
20
+ rowKey: "id",
21
+ };