@scenetechnology/cj_element_table 0.0.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 (61) hide show
  1. package/.browserslistrc +4 -0
  2. package/.env.base +11 -0
  3. package/.env.dev +23 -0
  4. package/.env.gitee +23 -0
  5. package/.env.pro +24 -0
  6. package/.env.test +23 -0
  7. package/.eslintrc.js +18 -0
  8. package/README.md +24 -0
  9. package/babel.config.js +6 -0
  10. package/dist/cj_element_table.common.js +66535 -0
  11. package/dist/cj_element_table.common.js.map +1 -0
  12. package/dist/cj_element_table.css +1 -0
  13. package/dist/cj_element_table.umd.js +66554 -0
  14. package/dist/cj_element_table.umd.js.map +1 -0
  15. package/dist/cj_element_table.umd.min.js +61 -0
  16. package/dist/cj_element_table.umd.min.js.map +1 -0
  17. package/dist/demo.html +1 -0
  18. package/package.json +42 -0
  19. package/packages/components/SaveViewDialog.vue +109 -0
  20. package/packages/components/exportExcel.js +305 -0
  21. package/packages/components/exportTable.vue +361 -0
  22. package/packages/components/historyDialog.vue +100 -0
  23. package/packages/components/index.vue +1235 -0
  24. package/packages/components/tablesetting.vue +344 -0
  25. package/packages/components/tuo-drag.vue +197 -0
  26. package/packages/components/viewEdit.vue +239 -0
  27. package/packages/index.js +13 -0
  28. package/public/favicon.ico +0 -0
  29. package/public/index.html +17 -0
  30. package/src/App.vue +59 -0
  31. package/src/api/All.ts +104 -0
  32. package/src/assets/images/TablehederTool.png +0 -0
  33. package/src/assets/images/addIcon.png +0 -0
  34. package/src/assets/images/blue_lock.png +0 -0
  35. package/src/assets/images/changeIcon.png +0 -0
  36. package/src/assets/images/downImg.png +0 -0
  37. package/src/assets/images/kong_icon.png +0 -0
  38. package/src/assets/images/lbIcon.png +0 -0
  39. package/src/assets/images/lookImg.png +0 -0
  40. package/src/assets/images/model_title_icon.png +0 -0
  41. package/src/assets/images/pgIcon.png +0 -0
  42. package/src/assets/images/pzIcon.png +0 -0
  43. package/src/assets/images/tuozhui_icon.png +0 -0
  44. package/src/assets/images/view_save_icon.png +0 -0
  45. package/src/assets/images/view_setting_icon.png +0 -0
  46. package/src/assets/images/yaIcon.png +0 -0
  47. package/src/assets/logo.png +0 -0
  48. package/src/components/Dialog/index.ts +3 -0
  49. package/src/components/Dialog/src/Dialog.vue +72 -0
  50. package/src/components/HelloWorld.vue +60 -0
  51. package/src/components/Upload/index.vue +287 -0
  52. package/src/config/axios/config.ts +122 -0
  53. package/src/config/axios/index.ts +48 -0
  54. package/src/config/axios/service.ts +118 -0
  55. package/src/main.ts +13 -0
  56. package/src/router/index.ts +16 -0
  57. package/src/shims-vue.d.ts +6 -0
  58. package/tsconfig.json +41 -0
  59. package/types/global.d.ts +39 -0
  60. package/types/vite-env.d.ts +0 -0
  61. package/vue.config.js +24 -0
@@ -0,0 +1,239 @@
1
+ <template>
2
+ <el-dialog :model-value="modelValue" @update:model-value="$emit('update:modelValue', $event)" width="800" @close="modleStatuschange">
3
+ <template #header>
4
+ <div style="display: flex;justify-content: flex-start;align-items: center;">
5
+ <img style="width: 11px;height: 12px;vertical-align: middle;margin-right: 5px;" :src="model_title_icon"/>
6
+ <span class="headerTitle" style="vertical-align:middle;"> 列表视图</span>
7
+ </div>
8
+ </template>
9
+ <el-table
10
+ border
11
+ ref="tableRef"
12
+ row-class-name="drag-row"
13
+ @row-contextmenu.prevent
14
+ :row-config="rowConfig"
15
+ :column-config="columnConfig"
16
+ :data="viewList"
17
+ >
18
+ <el-table-column type="index" width="55" label="序号" :fixed="true" align="center" />
19
+ <el-table-column prop="name" label="视图名称"></el-table-column>
20
+ <el-table-column width="100" prop="type" label="视图类型">
21
+ <template #default="{ row }">
22
+ <span>{{ row.type==1?'公共':'个人' }}</span>
23
+ </template>
24
+ </el-table-column>
25
+ <el-table-column width="150" title="操作">
26
+ <template #default="{ row }">
27
+ <div style="display: flex;"><el-button @click="onEdit(row)" size="small" type="primary">编辑</el-button>
28
+ <el-popconfirm
29
+ title="确定要删除吗?"
30
+ @confirm="onDelete(row)"
31
+ >
32
+ <template #reference>
33
+ <el-button size="small" type="danger" style="margin-left:10px;">删除</el-button>
34
+ </template>
35
+ </el-popconfirm></div>
36
+ </template>
37
+ </el-table-column>
38
+ </el-table>
39
+ <template #footer>
40
+ <el-button @click="$emit('update:modelValue',false)">取消</el-button>
41
+ <el-button type="primary" :loading="submitLoading" @click="handleSaveView"
42
+ style="margin-left: 8px">确定</el-button>
43
+ </template>
44
+ </el-dialog>
45
+ <SaveViewDialog v-model="saveViewDialogVisible" :title="saveViewTitle" :Form="rowData" @save="handleSaveRow" />
46
+ </template>
47
+
48
+ <script setup>
49
+ import { ref, computed, watch, reactive, onMounted, nextTick, inject } from 'vue'
50
+ import model_title_icon from '@/assets/images/model_title_icon.png'
51
+ import tuoDrag from './tuo-drag.vue'
52
+ import { ElDialog, ElButton, ElPopconfirm, ElMessage } from 'element-plus'
53
+ import SaveViewDialog from './SaveViewDialog.vue'
54
+ import { UserQuery_sort, UserQuery_delete,UserQuery_update } from '@/api/All.ts'
55
+
56
+ const props = defineProps({
57
+ viewList: {
58
+ type: Array,
59
+ required: true,
60
+ default:[]
61
+ },
62
+ modelValue: {
63
+ type: Boolean,
64
+ required: true,
65
+ default:false
66
+ }
67
+ })
68
+
69
+ const emit = defineEmits(['update:modelValue',"update"])
70
+
71
+ const project = ref(JSON.parse(localStorage.getItem('selectedProject')))
72
+ const exportModal = ref(false)
73
+ const submitLoading = ref(false)
74
+ const rowConfig = ref({ drag: true })
75
+ const columnConfig = ref({})
76
+ const tableRef = ref(null)
77
+ const draggingIndex = ref(null)
78
+ const saveViewDialogVisible = ref(false)
79
+ const saveViewTitle = ref('')
80
+ const rowData=ref()
81
+
82
+ onMounted(() => {
83
+ // addDragEvents()
84
+ })
85
+ watch(() => props.modelValue, () => {
86
+ nextTick(() => {
87
+ addDragEvents()
88
+ })
89
+ },{deep:true,immediate: true})
90
+ const addDragEvents = () => {
91
+ const rows = document.querySelectorAll('.drag-row')
92
+ console.log(rows,"rows")
93
+ rows.forEach((row, index) => {
94
+ row.draggable = true
95
+ row.ondragstart = (event) => handleDragStart(event, index)
96
+ row.ondragover = (event) => handleDragOver(event)
97
+ row.ondrop = (event) => handleDrop(event, index)
98
+ })
99
+ }
100
+
101
+ const handleDragStart = (event, index) => {
102
+ draggingIndex.value = index
103
+ event.dataTransfer.effectAllowed = 'move'
104
+ event.dataTransfer.setData('text/plain', index)
105
+ }
106
+
107
+ const handleDragOver = (event) => {
108
+ event.preventDefault()
109
+ event.dataTransfer.dropEffect = 'move'
110
+ }
111
+
112
+ const handleDrop = (event, targetIndex) => {
113
+ const sourceIndex = draggingIndex.value
114
+ if (sourceIndex === targetIndex) return
115
+ const item = props.viewList.splice(sourceIndex, 1)[0]
116
+ props.viewList.splice(targetIndex, 0, item)
117
+ draggingIndex.value = null
118
+ }
119
+ const onEdit = (row) => {
120
+ const parent = inject('parentComponent')
121
+ rowData.value={
122
+ id:row.id,
123
+ name: row.name,
124
+ type: row.type
125
+ }
126
+ saveViewDialogVisible.value = true
127
+ saveViewTitle.value = '保存视图'
128
+ }
129
+
130
+ const onDelete = (row) => {
131
+ console.log(row)
132
+ UserQuery_delete({ id: row.id }).then(res => {
133
+ console.log(res)
134
+ if (res.code == 200) {
135
+ emit('update')
136
+ } else {
137
+ ElMessage.error(res.msg)
138
+ }
139
+ })
140
+ }
141
+
142
+ const modleStatuschange = (e) => {
143
+ if (!e) {
144
+ console.log('执行-----', e)
145
+ }
146
+ }
147
+
148
+ const handleReset = () => {
149
+ exportModal.value = false
150
+ }
151
+ const handleSaveRow = async (row) => {
152
+ if (tableRef.value) {
153
+ submitLoading.value = true
154
+ try {
155
+ const res = await UserQuery_update(row)
156
+ if (res.code == 200) {
157
+ saveViewDialogVisible.value = false
158
+ emit('update')
159
+ } else {
160
+ ElMessage.error(res.msg)
161
+ }
162
+ } finally {
163
+ submitLoading.value = false
164
+ }
165
+ }
166
+ }
167
+ const handleSaveView = async (formData) => {
168
+ if (tableRef.value) {
169
+ const ids = props.viewList.map(item => item.id)
170
+ submitLoading.value = true
171
+ try {
172
+ const res = await UserQuery_sort({ids:ids})
173
+ if (res.code == 200) {
174
+ emit('update')
175
+ emit('update:modelValue',false)
176
+ } else {
177
+ ElMessage.error(res.msg)
178
+ }
179
+ } finally {
180
+ submitLoading.value = false
181
+ }
182
+ }
183
+ }
184
+ </script>
185
+
186
+ <style lang="less" scoped>
187
+ .classTitle::before{
188
+ content: "*";
189
+ display: inline-block;
190
+ margin-right: 4px;
191
+ line-height: 1;
192
+ font-family: SimSun;
193
+ font-size: 12px;
194
+ color: #ed4014;
195
+ }
196
+ .classTitle{
197
+ font-family: PingFang SC;
198
+ font-weight: 400;
199
+ font-size: 15px;
200
+ color: #333;
201
+ }
202
+ .content {
203
+ display: flex;
204
+ justify-content: space-between;
205
+ }
206
+ .headerTitle{
207
+ font-weight: 500;
208
+ font-size: 16px;
209
+ color: #1D2027;
210
+ }
211
+ /deep/ thead tr{
212
+ background-color: #eff2fa !important;
213
+ font-size: 14px;
214
+ font-family: "Source Han Sans";
215
+ font-weight: 500;
216
+ color: #222222;
217
+ }
218
+ .sort-container {
219
+ padding: 15px;
220
+
221
+ .title {
222
+ font-size: 24px;
223
+ font-weight: bold;
224
+ }
225
+
226
+ .el-table {
227
+ margin-top: 20px;
228
+ }
229
+ }
230
+
231
+ .drag-row {
232
+ cursor: move;
233
+ user-select: none;
234
+
235
+ &:hover {
236
+ background-color: #f0f9ff;
237
+ }
238
+ }
239
+ </style>
@@ -0,0 +1,13 @@
1
+ // 引入组件
2
+ import cj_element_table from './components/index.vue'
3
+
4
+ const components = [ cj_element_table ]
5
+ const install = function (Vue) {
6
+ // 全局注册所有的组件
7
+ components.forEach(item => { Vue.component(item.name, item) })
8
+ }
9
+ if (typeof window !== 'undefined' && window.Vue) {
10
+ install(window.Vue)
11
+ }
12
+ // 导出 install (如果作为一个包,一定要有install !!!)
13
+ export default { install }
Binary file
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html lang="">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
+ <meta name="viewport" content="width=device-width,initial-scale=1.0">
7
+ <link rel="icon" href="<%= BASE_URL %>favicon.ico">
8
+ <title><%= htmlWebpackPlugin.options.title %></title>
9
+ </head>
10
+ <body>
11
+ <noscript>
12
+ <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
13
+ </noscript>
14
+ <div id="app"></div>
15
+ <!-- built files will be auto injected -->
16
+ </body>
17
+ </html>
package/src/App.vue ADDED
@@ -0,0 +1,59 @@
1
+ <template>
2
+ <div id="app">
3
+ <pro-table
4
+ ref="tableRef"
5
+ :tableData="tableData"
6
+ :columns="columns"
7
+ :showInputButtons="false"
8
+ :showOutputButtons="false"
9
+ @selection-change="
10
+ (rows) => {
11
+ selectionRows = rows.ids
12
+ }
13
+ "
14
+ @search="handleSearch"></pro-table>
15
+ </div>
16
+ </template>
17
+
18
+ <script setup lang="ts">
19
+ import { ref } from 'vue';
20
+ import proTable from '../packages/components/index.vue'
21
+ const tableData = ref({})
22
+ const tableRef = ref()
23
+ const selectionRows = ref([])
24
+ const columns = ref([
25
+ {
26
+ prop: 'department_item_name',
27
+ label: '岗位名称',
28
+ search: true,
29
+ searchType: 'select',
30
+ searchKey:'department_item_id',
31
+ options: []
32
+ },
33
+ {
34
+ prop: 'department_name',
35
+ label: '所属部门',
36
+ search: true,
37
+ searchKey:'department_id',
38
+ searchType: 'select',
39
+ options: [] // 初始为空数组
40
+ },
41
+ {
42
+ prop: 'duty',
43
+ label: '岗位职责',
44
+ search: true
45
+ // searchType: 'datePicker',
46
+ // dataType:true,
47
+ //dataName:'sasss'
48
+ }
49
+ ])
50
+
51
+ const handleSearch = (query) => {
52
+ // getSaftDutyList(query).then((res) => {
53
+ // tableData.value = res.data
54
+ // })
55
+ }
56
+ </script>
57
+
58
+ <style>
59
+ </style>
package/src/api/All.ts ADDED
@@ -0,0 +1,104 @@
1
+ import request from '@/config/axios'
2
+ import { config } from '@/config/axios/config'
3
+ export const FieldGroup_index = (data: any) => {
4
+ return request.post({ url: '/FieldGroup/index', data })
5
+ }
6
+ export const FieldGroup_read = (data: any) => {
7
+ return request.post({ url: '/FieldGroup/read', data })
8
+ }
9
+ export const Field_read = (data: any) => {
10
+ return request.post({ url: '/Field/read', data })
11
+ }
12
+ export const FieldGroup_save = (data: any) => {
13
+ return request.post({ url: '/FieldGroup/save', data })
14
+ }
15
+ export const FieldGroup_update = (data: any) => {
16
+ return request.post({ url: '/FieldGroup/update', data })
17
+ }
18
+ export const Field_save = (data: any) => {
19
+ return request.post({ url: '/Field/save', data })
20
+ }
21
+ export const Field_update = (data: any) => {
22
+ return request.post({ url: '/Field/update', data })
23
+ }
24
+ export const Three_index = (data: any) => {
25
+ return request.post({ url: '/Three/index', data })
26
+ }
27
+ export const Three_save = (data: any) => {
28
+ return request.post({ url: '/Three/save', data })
29
+ }
30
+ export const Three_update = (data: any) => {
31
+ return request.post({ url: '/Three/update', data })
32
+ }
33
+ export const Three_delete = (data: any) => {
34
+ return request.post({ url: '/Three/delete', data })
35
+ }
36
+ export const Three_download = (data: any) => {
37
+ return request.post({ url: '/Three/download', data })
38
+ }
39
+ export const Three_import = (data: any) => {
40
+ return request.post({ url: '/Three/import', data })
41
+ }
42
+ export const Three_read = (data: any) => {
43
+ return request.post({ url: '/Three/read', data })
44
+ }
45
+ export const Three_save_field = (data: any) => {
46
+ return request.post({ url: '/Three/save_field', data })
47
+ }
48
+ export const Three_read_field = (data: any) => {
49
+ return request.post({ url: '/Three/read_field', data })
50
+ }
51
+ export const Field_sort = (data: any) => {
52
+ return request.post({ url: '/Field/sort', data })
53
+ }
54
+ export const FieldGroup_sort = (data: any) => {
55
+ return request.post({ url: '/FieldGroup/sort', data })
56
+ }
57
+ export const Field_delete = (data: any) => {
58
+ return request.post({ url: '/Field/delete', data })
59
+ }
60
+ export const FieldGroup_delete = (data: any) => {
61
+ return request.post({ url: '/FieldGroup/delete', data })
62
+ }
63
+ export const upload = (data: any) => {
64
+ return request.post({ url: '/File/upload', data })
65
+ }
66
+ export const config_config = (data: any) => {
67
+ return request.post({ url: `${config.simpUseUrl}/Config/config`, data })
68
+ }
69
+ export const config_read = (data: any) => {
70
+ return request.post({ url: `${config.simpUseUrl}/Config/config_read`, data })
71
+ }
72
+ export const FieldGroup_export = (data: any) => {
73
+ return request.post({ url: '/FieldGroup/export', data })
74
+ }
75
+ export const FieldGroup_import = (data: any) => {
76
+ return request.post({ url: '/FieldGroup/import', data })
77
+ }
78
+ export const Person_index = (data: any) => {
79
+ return request.post({ url: `${config.simpUrl}/simp/api/Person/index`, data })
80
+ }
81
+ export const File_update_all = (data: any) => {
82
+ return request.post({ url: `${config.simpUrl}/simp/api/File/update_all`, data })
83
+ }
84
+ export const UserQuery_index = (params: any) => {
85
+ return request.get({ url: `${config.simpUrl}/simp/api/UserQuery/index`, params })
86
+ }
87
+ export const UserQuery_update = (data: any) => {
88
+ return request.post({ url: `${config.simpUrl}/simp/api/UserQuery/update`, data })
89
+ }
90
+ export const UserQuery_save = (data: any) => {
91
+ return request.post({ url: `${config.simpUrl}/simp/api/UserQuery/save`, data })
92
+ }
93
+ export const UserQuery_sort = (data: any) => {
94
+ return request.post({ url: `${config.simpUrl}/simp/api/UserQuery/sort`, data })
95
+ }
96
+ export const UserQuery_delete = (data: any) => {
97
+ return request.post({ url: `${config.simpUrl}/simp/api/UserQuery/delete`, data })
98
+ }
99
+ export const ImportRecord_index = (data: any) => {
100
+ return request.post({ url: `${config.simpUrl}/simp/api/ImportRecord/index`, data })
101
+ }
102
+ // export const getFlowRead = (id) => {
103
+ // return request.get({ url: '/flow/'+id })
104
+ // }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,3 @@
1
+ import Dialog from './src/Dialog.vue'
2
+
3
+ export { Dialog }
@@ -0,0 +1,72 @@
1
+ <script setup lang="ts">
2
+
3
+ </script>
4
+
5
+ <template>
6
+
7
+ </template>
8
+
9
+ <style lang="less">
10
+ .el-dialog__header {
11
+ margin-right: 0 !important;
12
+ border-bottom: 1px solid var(--tags-view-border-color);
13
+ }
14
+
15
+ .el-dialog__footer {
16
+ border-top: 1px solid var(--tags-view-border-color);
17
+ }
18
+
19
+ .is-hover {
20
+ &:hover {
21
+ color: var(--el-color-primary) !important;
22
+ }
23
+ }
24
+
25
+ .dark {
26
+ .el-dialog__header {
27
+ border-bottom: 1px solid var(--el-border-color);
28
+ }
29
+
30
+ .el-dialog__footer {
31
+ border-top: 1px solid var(--el-border-color);
32
+ }
33
+ }
34
+ .round {
35
+ width: 8px;
36
+ height: 8px;
37
+ border: 1px solid #3145de;
38
+ box-shadow: 0px 2px 1px 0px rgba(59, 67, 133, 0.18);
39
+ border-radius: 50%;
40
+ }
41
+ .alCen {
42
+ display: flex;
43
+ align-items: center;
44
+ justify-content: space-between;
45
+ }
46
+
47
+ /* 添加新的样式来修复对齐问题 */
48
+ .dialog-title {
49
+ line-height: 24px;
50
+ display: inline-block;
51
+ }
52
+
53
+ .fullscreen-icon {
54
+ display: flex;
55
+ align-items: center;
56
+ margin-top: 0 !important;
57
+ margin-right: 5px !important;
58
+ }
59
+
60
+ /* 修复右上角关闭图标的对齐问题 */
61
+ .el-dialog__headerbtn {
62
+ top: 5px !important;
63
+ display: flex;
64
+ align-items: center;
65
+ }
66
+
67
+ .el-dialog__close {
68
+ display: flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ }
72
+ </style>
@@ -0,0 +1,60 @@
1
+ <template>
2
+ <div class="hello">
3
+ <h1>{{ msg }}</h1>
4
+ <p>
5
+ For a guide and recipes on how to configure / customize this project,<br>
6
+ check out the
7
+ <a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
8
+ </p>
9
+ <h3>Installed CLI Plugins</h3>
10
+ <ul>
11
+ <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-typescript" target="_blank" rel="noopener">typescript</a></li>
12
+ <li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
13
+ </ul>
14
+ <h3>Essential Links</h3>
15
+ <ul>
16
+ <li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
17
+ <li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
18
+ <li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
19
+ <li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
20
+ <li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
21
+ </ul>
22
+ <h3>Ecosystem</h3>
23
+ <ul>
24
+ <li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
25
+ <li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
26
+ <li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
27
+ <li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
28
+ <li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
29
+ </ul>
30
+ </div>
31
+ </template>
32
+
33
+ <script lang="ts">
34
+ import { defineComponent } from 'vue';
35
+
36
+ export default defineComponent({
37
+ name: 'HelloWorld',
38
+ props: {
39
+ msg: String,
40
+ },
41
+ });
42
+ </script>
43
+
44
+ <!-- Add "scoped" attribute to limit CSS to this component only -->
45
+ <style scoped>
46
+ h3 {
47
+ margin: 40px 0 0;
48
+ }
49
+ ul {
50
+ list-style-type: none;
51
+ padding: 0;
52
+ }
53
+ li {
54
+ display: inline-block;
55
+ margin: 0 10px;
56
+ }
57
+ a {
58
+ color: #42b983;
59
+ }
60
+ </style>