diff --git a/alibabacloud_sample/dataservice.py b/alibabacloud_sample/dataservice.py index 6fa597e..275a460 100644 --- a/alibabacloud_sample/dataservice.py +++ b/alibabacloud_sample/dataservice.py @@ -134,7 +134,7 @@ class DataService: "WHERE id = ?", (datetime.now().strftime("%Y-%m-%d %H:%M:%S"), verify_status,inspectionAmount, invoice_id)) conn.commit() - def update_invoice_desc(self, invoice_id: int|str, desc: str, desc_file: str,status: str): + def update_invoice_desc(self, invoice_id: int|str, desc: str, desc_file: str,status: str) -> str: conn = DBService().get_conn() cursor = conn.cursor() cursor.execute( @@ -145,6 +145,7 @@ class DataService: "WHERE id = ?", (desc, desc_file,status, invoice_id)) conn.commit() + return "success" # 查询验证记录 def get_verify_log(self, file_path: str) -> dict[Any, Any]|None: conn = DBService().get_conn() @@ -205,9 +206,9 @@ class DataService: else: sql += " verify_status = '" + verify_status+"'" if start_date is not None: - sql += " and verify_time >= '" + start_date.strftime("%Y-%m-%d") + "'" + sql += " and verify_time >= '" + start_date + "'" if end_date is not None: - sql += " and verify_time <= '" + end_date.strftime("%Y-%m-%d") + "'" + sql += " and verify_time <= '" + end_date + "'" if value is not None and value != '': sql += " and ( " sql += "file_path like '%" + value + "%' or " @@ -243,7 +244,7 @@ class DataService: sql += "desc_files like '%" + value + "%' " sql += ")" sql += " order by verify_time desc" - # print(sql) + print(sql) cursor.execute(sql) rows = cursor.fetchall() datas = [] diff --git a/alibabacloud_sample/main.py b/alibabacloud_sample/main.py index 30f7d48..0235c6f 100644 --- a/alibabacloud_sample/main.py +++ b/alibabacloud_sample/main.py @@ -67,7 +67,13 @@ def reverify(): def list_invoice(): value = request.json.get('value') verify_status = request.json.get('verify_status') - return dataservice.get_invoice_list(value=value,verify_status=verify_status) + verify_time = request.json.get('verify_time') + start_date = None + end_date = None + if verify_time is not None: + start_date = verify_time[0].split(' ')[0] + end_date = verify_time[1].split(' ')[0] + return dataservice.get_invoice_list(value=value,verify_status=verify_status,start_date=start_date,end_date=end_date) @app.route('/listInvoiceTimeOut',methods=['POST']) def list_invoice_time_out(): time_out = request.form.get('timeOut') diff --git a/alibabacloud_sample/verify.db b/alibabacloud_sample/verify.db index aea8c57..73a6f90 100644 Binary files a/alibabacloud_sample/verify.db and b/alibabacloud_sample/verify.db differ diff --git a/webapp/vite-project/src/pages/manage.vue b/webapp/vite-project/src/pages/manage.vue index ca5c55e..e270f39 100644 --- a/webapp/vite-project/src/pages/manage.vue +++ b/webapp/vite-project/src/pages/manage.vue @@ -3,11 +3,19 @@ import {h, onMounted, ref} from "vue"; import { SearchOutlined, - FileSearchOutlined + FileSearchOutlined, + PlusOutlined } from '@ant-design/icons-vue' import request from '#/utils/request.ts'; import {baseURL} from "../utils/baseurl.ts"; -import type {TableProps} from "ant-design-vue"; +import type {TableProps, UploadChangeParam, UploadProps} from "ant-design-vue"; +import { message } from 'ant-design-vue'; +import zhCN from 'ant-design-vue/es/locale/zh_CN'; + +import dayjs from 'dayjs'; +import 'dayjs/locale/zh-cn'; +import type {UploadFile} from "ant-design-vue/es/upload/interface"; +const [messageApi, contextHolder] = message.useMessage(); interface DataType { id: string; status: string; @@ -57,7 +65,6 @@ const columns = [ dataIndex: 'invoiceDate', key: 'invoiceDate', }, - { title: '查验结果', dataIndex: 'verify_status', @@ -90,6 +97,7 @@ let searchParams = ref({ params: { verify_status: 'success', value: null, + verify_time: null, } }); // 下拉框 @@ -111,6 +119,7 @@ const formData = ref({ status: false, desc: '', desc_files: '', + fileIds: new Array(), }); const handleOk = () => { @@ -119,28 +128,125 @@ const handleOk = () => { invoiceId: formData.value.id, status: formData.value.status?'yes':'no', desc: formData.value.desc, - desc_files: formData.value.desc_files, + desc_files: formData.value.fileIds.join(','), }).then(( res ) => { - console.log(res) - if (res.code === 200) { - openModal.value = false; - confirmLoading.value = false; - } + if(res.status == 200){ + openModal.value = false; + confirmLoading.value = false; + messageApi.success("修改成功") + } }) }; const handleOpen = (record) => { - formData.value = record + if (record.status === 'yes') { + modalTitle.value = "备注" + }else { + modalTitle.value = "入账" + } + formData.value = Object.assign({}, record); + formData.value.status = (record.status === 'yes') + formData.value.fileIds = record.desc_files.split(','); + if (record.desc_files) { + let paths = record.desc_files.split(",") + fileList.value = [] + for(let i = 0; i < paths.length; i++) { + fileList.value.push({ + uid: paths[i], + name: paths[i].split("/")[2], + url: baseURL+"/"+paths[i], + }); + } + } openModal.value = true; }; // 数据列表 const getList = () => { request.post("/listInvoice", { - verify_status : 'success' + verify_status : searchParams.value.params.verify_status, + value : searchParams.value.params.value, + verify_time : searchParams.value.params.verify_time, }).then(( res ) => { console.log(res) data.value = res.data }) } +const fileList = ref([]) +const previewVisible = ref(false); +const previewImage = ref(''); +const previewTitle = ref(''); + +function getBase64(file: File) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.readAsDataURL(file); + reader.onload = () => resolve(reader.result); + reader.onerror = error => reject(error); + }); +} +// +const handleCancelPreview = () => { + previewVisible.value = false; + previewTitle.value = ''; +}; +const handlePreview = async (file: UploadProps['fileList'][number]) => { + if (!file.url && !file.preview) { + file.preview = (await getBase64(file.originFileObj)) as string; + } + previewImage.value = file.url || file.preview; + previewVisible.value = true; + previewTitle.value = file.name || file.url.substring(file.url.lastIndexOf('/') + 1); +}; + +const handleFileChange = (info: UploadChangeParam) => { + if(info.file.status === 'done'){ + info.file.uid = info.file.response.file_path + formData.value.fileIds.push(info.file.response.file_path) + } +} +const handleFileRemove = (file: UploadFile ) => { + let index = formData.value.fileIds.indexOf(file.uid) + formData.value.fileIds.splice(index, 1); +} +const handleUpload = (options: any) => { + const { file, onSuccess, onError, onProgress } = options; + // 创建 FormData 对象 + const formData1 = new FormData(); + formData1.append('file', file); + // 使用 XMLHttpRequest 进行上传 + const xhr = new XMLHttpRequest(); + // 监听上传进度 + xhr.upload.onprogress = (event) => { + if (event.lengthComputable) { + onProgress({ percent: (event.loaded / event.total) * 100 }, file); + } + }; + // 上传成功回调 + xhr.onload = () => { + if (xhr.status === 200 || xhr.status === 201) { + console.log(xhr.responseText); + onSuccess(xhr.responseText, file); + let res = JSON.parse(xhr.responseText) + + if(formData.value.desc_files){ + formData.value.desc_files += ","; + }else{ + formData.value.desc_files = "" + } + formData.value.desc_files += res.file_path; + + } else { + onError(new Error(`Upload failed with status ${xhr.status}`)); + } + }; + // 上传错误回调 + xhr.onerror = () => { + onError(new Error('Network error')); + }; + // 发送请求到服务器 + xhr.open('POST', baseURL+'/upload'); + xhr.send(formData1); +}; +dayjs.locale('zh-cn') onMounted(() => { getList() }) @@ -151,11 +257,15 @@ onMounted(() => { - - + + - - + + @@ -164,7 +274,7 @@ onMounted(() => { - 搜索 + 搜索 @@ -177,36 +287,60 @@ onMounted(() => { 异常 - - - - + + + + + + + + +
+ +
+ +
上传
+
+
+ + example + +
+
+