Sanakey
6 天以前 cb165187ddcf5d9cfd8aad97a2868d0343b14bd9
提交 | 用户 | age
f353bc 1 <template>
cb1651 2   <a-collapse class="customer-modal-document" v-model:activeKey="activeKey" ghost>
f353bc 3     <a-collapse-panel key="1" header="文档">
S 4       <BasicTable
5         @register="registerTable"
6       >
cb1651 7         <template #bodyCell="{ column, record, index }">
f353bc 8           <template v-if="column.key === 'cluesName'">
S 9             <div>
cb1651 10               <FileImageFilled class="icon-color font-size-20px" />
S 11               <a class="ml-5px c-black" data-index="{{index}}" @click="setImgVisible(record.id)">
12                 {{ record.cluesName }}
13               </a>
14               <a-image
15                 :style="{ display: 'none' }"
16                 :preview="{
17                   visible: index == curImgIndex,
18                   onVisibleChange: setImgVisible,
19                 }"
20                 :src="record.avatar"
21               />
f353bc 22             </div>
S 23           </template>
cb1651 24           <template v-else-if="column.key === 'action'">
S 25             <TableAction
26               stopButtonPropagation
27               :dropDownActions="[
28               {
29                 label: '发送邮件',
30                 onClick: handleWriteEmail.bind(null, record),
31               },
32               {
33                 label: '下载附件',
34                 onClick: handleDownloadFiles.bind(null, record),
35               },
36               {
37                 label: '删除文件',
38                 onClick: handleDeleteFiles.bind(null, record),
39               },
40             ]"
41             />
42           </template>
f353bc 43         </template>
cb1651 44
f353bc 45       </BasicTable>
cb1651 46       <template #extra >
S 47         <PlusCircleOutlined @click="addUploadFile" />
48         <BasicUpload
49           ref="uploadRef"
50           :maxSize="20"
51           :maxNumber="10"
52           @change="handleUploadFileChange"
53           :api="uploadApi"
54           class="customer-modal-document-btn"
55           :accept="['image/*']"
56         />
57       </template>
f353bc 58     </a-collapse-panel>
S 59   </a-collapse>
60
61   <ScheduleDetailModal @register="registerScheduleModal"></ScheduleDetailModal>
62
63 </template>
64 <script lang="ts" setup>
65 import {projectList} from './data';
cb1651 66 import {PlusSquareOutlined,FileImageFilled,PlusCircleOutlined} from '@ant-design/icons-vue';
f353bc 67 import {BasicArrow} from "@/components/Basic";
S 68 import {ref} from 'vue';
69 import ScheduleDetailModal from './ScheduleDetail.vue';
70
71 import EventBus from '@/utils/eventBus';
72 import {BasicTable, ColumnChangeParam, TableAction, useTable} from "@/components/Table";
73 import {cluesListApi} from "@/api/clues/table";
74 import {getEditCellColumns, getFormConfig} from "@/views/clues/components/tableData";
75 import {useModal} from "@/components/Modal";
cb1651 76 import {uploadApi} from "@/api/sys/upload";
S 77 import {BasicUpload} from "@/components/Upload";
78 import {useMessage} from "@/hooks/web/useMessage";
f353bc 79
S 80 const [registerScheduleModal, {openModal, setModalProps}] = useModal();
81 const openScheduleModal = () => {
82   Logger.log('点击openScheduleModal');
83   EventBus.emit('openScheduleModal', {
84     title: '新建任务',
85     content: '新建任务内容'
86   });
87 };
88
cb1651 89 // 获取子组件的引用
S 90 const uploadRef = ref();
91 function addUploadFile(event) {
92     Logger.log('addUploadFile', event);
93     event.stopPropagation();
94     if (uploadRef.value) {
95       Logger.log('uploadRef', uploadRef.value);
96       uploadRef.value.openUploadModal();
97     }
98
99 }
100 // const addUploadFile = (event: MouseEvent) => {
101 //   Logger.log('addUploadFile', event);
102 //   // If you don't want click extra trigger collapse, you can prevent this:
103 //   event.stopPropagation();
104 //
105 // };
106 const { createMessage } = useMessage();
107 function handleUploadFileChange(list: string[]) {
108   createMessage.success(`已上传文件${JSON.stringify(list)}`);
109 }
110
f353bc 111 const activeKey = ref(['1']);
S 112
cb1651 113 const curImgIndex = ref<boolean>(-1);
S 114 const setImgVisible = (value): void => {
115   Logger.log('setImgVisible', value);
116   if (value === false) {
117     curImgIndex.value = -1;
118   } else {
119     curImgIndex.value = value;
120   }
121   // imgVisible.value = value;
f353bc 122 };
S 123
124 const [
125   registerTable,
126   {
127     // setLoading,
128     // setProps,
129     // getColumns,
130     // getDataSource,
131     // getRawDataSource,
132     // reload,
133     // getPaginationRef,
134     // setPagination,
135     // getSelectRows,
136     // getSelectRowKeys,
137     // setSelectedRowKeys,
138     // clearSelectedRowKeys,
139   },
140 ] = useTable({
141   canResize: true,
142   api: cluesListApi,
143   // beforeFetch: (params) => {
144   //   console.log('beforeFetch', params);
145   //   params.pageNo = params.page;
146   //   // return Promise.resolve(params);
147   // },
148   showIndexColumn: false,
149   columns: [
150     {
cb1651 151       title: '文件名称',
f353bc 152       // defaultHidden: true,
S 153       dataIndex: 'cluesName',
154       width: 200
155     },
156     {
cb1651 157       title: '关联类型',
S 158       dataIndex: 'statusId',
159       width: 200,
160     },
161     {
162       title: '文件大小',
163       dataIndex: 'formId',
164       width: 80,
165     },
166     {
167       title: '添加人',
168       dataIndex: 'name',
169       width: 80,
170     },
171     {
172       title: '上传日期',
f353bc 173       dataIndex: 'archiveTime',
S 174       width: 200,
175     },
cb1651 176
f353bc 177   ],
S 178   // defSort: {
179   //   pageNo: 1,
180   //   pageSize: 20,
181   //   field: 'name',
182   //   order: 'ascend',
183   // },
184   rowKey: 'id',
185   // showTableSetting: false,
186   // showIndexColumn: false, // 是否显示序号列
187   // useSearchForm: false, // 使用搜索表单
188   // clickToRowSelect: false,
189   pagination: {
190     // pageSize: 20,
191     pageSizeOptions: ['10', '20', '50', '100'],
192     defaultPageSize: 20,
193     // showSizeChanger: true,
194   },
cb1651 195   actionColumn: {
S 196     width: 50,
197     title: '操作',
198     dataIndex: 'action',
199     fixed: 'right',
200   },
201   useSearchForm: true, // 使用搜索表单
202   formConfig: {
203     // labelWidth: 100,
204     // layout: 'horizontal',
205     rowProps: {
206       // justify: 'start',
207       gutter: 12,
208     },
209     showActionButtonGroup: false,
210     // showResetButton: false,
211     // showSubmitButton: false,
212     schemas: [
213       {
214         field: `field1`,
215         label: ``,
216         component: 'Input',
217         componentProps: {
218           placeholder: '搜索文档名称',
219         },
220         colProps: {
221           span:8,
222         },
223       },
224       {
225         field: 'recurringDates',
226         label: '',
227         component: 'Select',
228         colProps: {
229           span:8,
230         },
231         componentProps: {
232           options: [
233             {
234               label: '全部类型',
235               value: '1',
236             },
237             {
238               label: '邮件附件',
239               value: '2',
240             },
241             {
242               label: '手动上传',
243               value: '3',
244             },
245             {
246               label: '销售订单已导单据',
247               value: '4',
248             },
249             {
250               label: '报价单已导单据',
251               value: '5',
252             },
253           ],
254         },
255         defaultValue: '1'
256       },
257       {
258         field: '[startDate, endDate]',
259         label: '',
260         component: 'RangePicker',
261         componentProps: {
262           style: {width: '100%'},
263           format: 'YYYY-MM-DD',
264           placeholder: ['开始日期、时间', '结束日期、时间'],
265           // showTime: {format: 'HH:mm:ss'},
266         },
267         colProps: {
268           span:8,
269         },
270       },
271     ],
272   },
273
f353bc 274 });
S 275
276
277
cb1651 278 function handleWriteEmail(record: Recordable) {
S 279   Logger.log('点击了写邮件', record);
280 }
281 function handleDownloadFiles(record: Recordable) {
282   Logger.log('点击了下载文件', record);
283 }
284 function handleDeleteFiles(record: Recordable) {
285   Logger.log('点击了删除文件', record);
f353bc 286 }
S 287
288 </script>
cb1651 289 <style lang="less" scoped>
S 290 .customer-modal-document{
291   .icon-color{
292     color: #1890ff;
293   }
294   :deep(&-btn) .ant-space{
295     display: none;
296   }
297   :deep(.ant-collapse-content-box), :deep(.onbus-basic-table) {
298     padding: 0;
299   }
300 }
301
f353bc 302
S 303 </style>