| <template> | 
|   <LoadingLayout :loading="state.loading"> | 
|     <AppContainer> | 
|       <ProTableQueryFilterBar @on-reset="reset"> | 
|         <template #query> | 
|           <QueryFilterItem tip-content="制版状态"> | 
|             <FieldRadio | 
|               v-model="extraParamState.status" | 
|               :value-enum="EnumContractTemplateStatusText" | 
|               buttonStyle | 
|               showAllBtn | 
|               @change="getList()" | 
|             /> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem> | 
|             <FieldDatePicker | 
|               v-model="extraParamState.createdTime" | 
|               type="daterange" | 
|               range-separator="~" | 
|               start-placeholder="起始时间" | 
|               end-placeholder="截止时间" | 
|               clearable | 
|               @change="getList()" | 
|               tooltipContent="上传时间" | 
|             ></FieldDatePicker> | 
|           </QueryFilterItem> | 
|           <QueryFilterItem> | 
|             <SearchInput | 
|               v-model="extraParamState.keywords" | 
|               style="width: 250px" | 
|               placeholder="模板名称" | 
|               @on-click-search="getList" | 
|               @keyup.enter="getList()" | 
|             > | 
|             </SearchInput> | 
|           </QueryFilterItem> | 
|         </template> | 
|         <template #btn> | 
|           <el-button type="primary" @click="handleAdd()">新增模板</el-button> | 
|         </template> | 
|       </ProTableQueryFilterBar> | 
|       <ProTableV2 | 
|         v-bind="proTableProps" | 
|         :columns="AgreementbManageColumns" | 
|         :operationBtns="operationBtns" | 
|       > | 
|         <template #code="{ row }"> | 
|           <el-button | 
|             v-if="row.status === EnumContractTemplateStatus.Completed && !!row.wxmpQrCode" | 
|             link | 
|             type="primary" | 
|             @click="handlePreviewQrcode(row)" | 
|             >查看</el-button | 
|           > | 
|           <span v-else></span> | 
|         </template> | 
|       </ProTableV2> | 
|     </AppContainer> | 
|     <TemplateAddDialog v-bind="dialogProps"></TemplateAddDialog> | 
|     <QrcodeDialog v-bind="dialogQrcodeProps" :useQrcode="false"></QrcodeDialog> | 
|   </LoadingLayout> | 
| </template> | 
|   | 
| <script setup lang="ts"> | 
| import { | 
|   ProTableQueryFilterBar, | 
|   ProTableV2, | 
|   SearchInput, | 
|   LoadingLayout, | 
|   AppContainer, | 
|   QueryFilterItem, | 
|   useTable, | 
|   FieldDatePicker, | 
|   FieldRadio, | 
|   defineOperationBtns, | 
|   UploadUserFile, | 
|   useFormDialog, | 
|   bolePreview, | 
| } from '@bole-core/components'; | 
| import { AgreementbManageColumns } from './constants'; | 
| import { EnumContractTemplateStatus, EnumContractTemplateStatusText } from '@/constants'; | 
| import { convertPdfToImage, downloadFileByUrl, format, setOSSLink } from '@/utils'; | 
| import { ModelValueType } from 'element-plus'; | 
| import * as electronSignServices from '@/services/api/electronSign'; | 
| import TemplateAddDialog from './components/TemplateAddDialog.vue'; | 
| import QrcodeDialog from './components/QrcodeDialog.vue'; | 
| import { Message } from '@bole-core/core'; | 
|   | 
| defineOptions({ | 
|   name: 'AgreementManageList', | 
| }); | 
|   | 
| const operationBtns = defineOperationBtns([ | 
|   { | 
|     data: { | 
|       enCode: 'checkBtn', | 
|       name: '查看', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => handleCheck(role), | 
|     }, | 
|     extraProps: { | 
|       hide: (row) => row.status !== EnumContractTemplateStatus.Completed, | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'downloadBtn', | 
|       name: '下载', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => handleDownload(role), | 
|     }, | 
|     extraProps: { | 
|       hide: (row) => row.status !== EnumContractTemplateStatus.Completed, | 
|     }, | 
|   }, | 
|   { | 
|     data: { | 
|       enCode: 'deleteBtn', | 
|       name: '删除', | 
|     }, | 
|     emits: { | 
|       onClick: (role) => handleDelete(role), | 
|     }, | 
|     props: { type: 'danger' }, | 
|     extraProps: { | 
|       hide: (row) => row.status !== EnumContractTemplateStatus.Completed, | 
|     }, | 
|   }, | 
| ]); | 
|   | 
| const router = useRouter(); | 
|   | 
| const BaseState = { | 
|   loading: true, | 
| }; | 
|   | 
| const state = reactive({ ...BaseState }); | 
|   | 
| onMounted(async () => { | 
|   await getList(); | 
|   state.loading = false; | 
| }); | 
|   | 
| const { | 
|   getDataSource: getList, | 
|   proTableProps, | 
|   paginationState, | 
|   extraParamState, | 
|   reset, | 
| } = useTable( | 
|   async ({ pageIndex, pageSize }, extraParamState) => { | 
|     try { | 
|       let params: API.GetEnterpriseContractTemplatesQuery = { | 
|         pageModel: { | 
|           rows: pageSize, | 
|           page: pageIndex, | 
|           orderInput: extraParamState.orderInput, | 
|         }, | 
|         keywords: extraParamState.keywords, | 
|         status: extraParamState.status, | 
|         createdTimeBegin: format(extraParamState.createdTime?.[0] ?? '', 'YYYY-MM-DD 00:00:00'), | 
|         createdTimeEnd: format(extraParamState.createdTime?.[1] ?? '', 'YYYY-MM-DD 23:59:59'), | 
|       }; | 
|   | 
|       let res = await electronSignServices.getEnterpriseContractTemplates(params, { | 
|         showLoading: !state.loading, | 
|       }); | 
|       return res; | 
|     } catch (error) { | 
|       console.log('error: ', error); | 
|     } | 
|   }, | 
|   { | 
|     defaultExtraParams: { | 
|       keywords: '', | 
|       status: '' as any as EnumContractTemplateStatus, | 
|       createdTime: [] as unknown as ModelValueType, | 
|       orderInput: [{ property: 'createdTime', order: EnumPagedListOrder.Desc }], | 
|     }, | 
|     queryKey: ['electronSignServices/getEnterpriseContractTemplates'], | 
|     columnsRenderProps: { | 
|       createdTime: { type: 'date' }, | 
|       completedTime: { type: 'date' }, | 
|       status: { type: 'enum', valueEnum: EnumContractTemplateStatusText }, | 
|     }, | 
|   } | 
| ); | 
|   | 
| const { dialogProps, handleAdd, editForm } = useFormDialog({ | 
|   onConfirm: handleAddOrEdit, | 
|   defaultFormParams: { | 
|     name: '', | 
|     url: [] as UploadUserFile[], | 
|   }, | 
| }); | 
|   | 
| async function handleAddOrEdit() { | 
|   try { | 
|     let pdfToImage = await convertPdfToImage(editForm.url?.[0].url); | 
|     let params: API.SaveContractTemplateCommand = { | 
|       name: editForm.name, | 
|       file: editForm.url[0]?.path ?? '', | 
|       templateEditData: JSON.stringify( | 
|         pdfToImage.map( | 
|           (x) => | 
|             ({ | 
|               path: x.path, | 
|               width: x.width, | 
|               height: x.height, | 
|             } as TemplateEditDataItem) | 
|         ) | 
|       ), | 
|     }; | 
|     let res = await electronSignServices.saveContractTemplate(params); | 
|     if (res) { | 
|       Message.successMessage('保存成功'); | 
|       getList(); | 
|     } | 
|   } catch (error) {} | 
| } | 
|   | 
| async function handleDelete(row: API.GetEnterpriseContractTemplatesQueryResultItem) { | 
|   try { | 
|     await Message.deleteMessage(); | 
|     let res = await electronSignServices.setIsDisabledContractTemplate({ | 
|       ids: [row.id], | 
|       isDisabled: true, | 
|     }); | 
|     if (res) { | 
|       Message.successMessage('操作成功'); | 
|       getList(paginationState.pageIndex); | 
|     } | 
|   } catch (error) {} | 
| } | 
|   | 
| function handleDownload(row: API.GetEnterpriseContractTemplatesQueryResultItem) { | 
|   downloadFileByUrl(setOSSLink(row.file), '模板'); | 
| } | 
|   | 
| function handleCheck(row: API.GetEnterpriseContractTemplatesQueryResultItem) { | 
|   bolePreview({ | 
|     fileUrl: setOSSLink(row.file), | 
|   }); | 
| } | 
|   | 
| const { dialogProps: dialogQrcodeProps, handleEdit } = useFormDialog({ | 
|   defaultFormParams: { | 
|     qrcodeUrl: '', | 
|   }, | 
| }); | 
|   | 
| function handlePreviewQrcode(row: API.GetEnterpriseContractTemplatesQueryResultItem) { | 
|   handleEdit({ | 
|     // qrcodeUrl: setOSSLink(row.file), | 
|     qrcodeUrl: setOSSLink(row.wxmpQrCode), | 
|   }); | 
| } | 
| </script> |