From decd8e6edb53c111823cb0c0caf7fb0b3a0dc1a0 Mon Sep 17 00:00:00 2001 From: gyj Date: Mon, 5 Feb 2024 13:52:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/handlecase/index.js | 35 + pages/handlecase/component/newlyAddedCase.vue | 274 +++- uni_modules/uni-file-picker/changelog.md | 138 +- .../uni-file-picker/choose-and-upload-file.js | 471 +++--- .../uni-file-picker/uni-file-picker.vue | 1340 +++++++++-------- .../uni-file-picker/upload-file.vue | 650 ++++---- .../uni-file-picker/upload-image.vue | 584 +++---- .../components/uni-file-picker/utils.js | 218 +-- uni_modules/uni-file-picker/package.json | 166 +- uni_modules/uni-file-picker/readme.md | 20 +- 10 files changed, 2068 insertions(+), 1828 deletions(-) diff --git a/api/handlecase/index.js b/api/handlecase/index.js index 16b7615..2fe34cc 100644 --- a/api/handlecase/index.js +++ b/api/handlecase/index.js @@ -77,4 +77,39 @@ export function updateBooking(data) { method: 'post', data: data }) +} + +// 根据机构id查询模板 +export function getTemplate(data) { + return request({ + url: `/deptIdentify/getTemplate`, + method: 'get', + params: data + }) +} + +// 根据身份证获取生日和性别 +export function getInfoByIdCard(query) { + return request({ + url: '/caseApplication/getInfoByIdCard', + method: 'get', + params: query + }) +} + +/** 新增案件 */ +export function caseApplicationInsert(data) { + return request({ + url: '/caseApplication/insert', + method: 'post', + data: data + }) +} +// 修改立案申请接口 +export function updateComfire(data) { + return request({ + url: "/caseApplication/update", + method: "post", + data: data, + }) } \ No newline at end of file diff --git a/pages/handlecase/component/newlyAddedCase.vue b/pages/handlecase/component/newlyAddedCase.vue index 50b84b3..eb9ac2f 100644 --- a/pages/handlecase/component/newlyAddedCase.vue +++ b/pages/handlecase/component/newlyAddedCase.vue @@ -12,11 +12,13 @@ - - + + - + @@ -25,85 +27,145 @@ v-model="formData.affiliate.organizeFlag" @change='clearValidate'> - - + + - - + - - + - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + - - + + - - + - - + + - - + - - + + - - + + - - + + - - + + - - + + - - + + @@ -119,6 +181,11 @@ - - + }, + + /** + * 批传 + * @param {Object} e + */ + uploadFiles(files) { + files = [].concat(files) + return uploadCloudFiles.call(this, files, 5, res => { + this.setProgress(res, res.index, true) + }) + .then(result => { + this.setSuccessAndError(result) + return result; + }) + .catch(err => { + console.log(err) + }) + }, + + /** + * 成功或失败 + */ + async setSuccessAndError(res, fn) { + let successData = [] + let errorData = [] + let tempFilePath = [] + let errorTempFilePath = [] + for (let i = 0; i < res.length; i++) { + const item = res[i] + const index = item.uuid ? this.files.findIndex(p => p.uuid === item.uuid) : item.index + + if (index === -1 || !this.files) break + if (item.errMsg === 'request:fail') { + this.files[index].url = item.path + this.files[index].status = 'error' + this.files[index].errMsg = item.errMsg + // this.files[index].progress = -1 + errorData.push(this.files[index]) + errorTempFilePath.push(this.files[index].url) + } else { + this.files[index].errMsg = '' + this.files[index].fileID = item.url + const reg = /cloud:\/\/([\w.]+\/?)\S*/ + if (reg.test(item.url)) { + this.files[index].url = await this.getTempFileURL(item.url) + }else{ + this.files[index].url = item.url + } + + this.files[index].status = 'success' + this.files[index].progress += 1 + successData.push(this.files[index]) + tempFilePath.push(this.files[index].fileID) + } + } + + if (successData.length > 0) { + this.setEmit() + // 状态改变返回 + this.$emit('success', { + tempFiles: this.backObject(successData), + tempFilePaths: tempFilePath + }) + } + + if (errorData.length > 0) { + this.$emit('fail', { + tempFiles: this.backObject(errorData), + tempFilePaths: errorTempFilePath + }) + } + }, + + /** + * 获取进度 + * @param {Object} progressEvent + * @param {Object} index + * @param {Object} type + */ + setProgress(progressEvent, index, type) { + const fileLenth = this.files.length + const percentNum = (index / fileLenth) * 100 + const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total) + let idx = index + if (!type) { + idx = this.files.findIndex(p => p.uuid === progressEvent.tempFile.uuid) + } + if (idx === -1 || !this.files[idx]) return + // fix by mehaotian 100 就会消失,-1 是为了让进度条消失 + this.files[idx].progress = percentCompleted - 1 + // 上传中 + this.$emit('progress', { + index: idx, + progress: parseInt(percentCompleted), + tempFile: this.files[idx] + }) + }, + + /** + * 删除文件 + * @param {Object} index + */ + delFile(index) { + this.$emit('delete', { + tempFile: this.files[index], + tempFilePath: this.files[index].url + }) + this.files.splice(index, 1) + this.$nextTick(() => { + this.setEmit() + }) + }, + + /** + * 获取文件名和后缀 + * @param {Object} name + */ + getFileExt(name) { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } + }, + + /** + * 处理返回事件 + */ + setEmit() { + let data = [] + if (this.returnType === 'object') { + data = this.backObject(this.files)[0] + this.localValue = data?data:null + } else { + data = this.backObject(this.files) + if (!this.localValue) { + this.localValue = [] + } + this.localValue = [...data] + } + // #ifdef VUE3 + this.$emit('update:modelValue', this.localValue) + // #endif + // #ifndef VUE3 + this.$emit('input', this.localValue) + // #endif + }, + + /** + * 处理返回参数 + * @param {Object} files + */ + backObject(files) { + let newFilesData = [] + files.forEach(v => { + newFilesData.push({ + extname: v.extname, + fileType: v.fileType, + image: v.image, + name: v.name, + path: v.path, + size: v.size, + fileID:v.fileID, + url: v.url, + // 修改删除一个文件后不能再上传的bug, #694 + uuid: v.uuid, + status: v.status, + cloudPath: v.cloudPath + }) + }) + return newFilesData + }, + async getTempFileURL(fileList) { + fileList = { + fileList: [].concat(fileList) + } + const urls = await uniCloud.getTempFileURL(fileList) + return urls.fileList[0].tempFileURL || '' + }, + /** + * 获取父元素实例 + */ + getForm(name = 'uniForms') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false; + parentName = parent.$options.name; + } + return parent; + } + } + } + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue index 625d92e..ab15bad 100644 --- a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue @@ -1,325 +1,325 @@ - - - - - + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue index 2a29bc2..0c1abe8 100644 --- a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue @@ -1,292 +1,292 @@ - - - - - + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js index 60aaa3e..6d94b1a 100644 --- a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js +++ b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js @@ -1,109 +1,109 @@ -/** - * 获取文件名和后缀 - * @param {String} name - */ -export const get_file_ext = (name) => { - const last_len = name.lastIndexOf('.') - const len = name.length - return { - name: name.substring(0, last_len), - ext: name.substring(last_len + 1, len) - } -} - -/** - * 获取扩展名 - * @param {Array} fileExtname - */ -export const get_extname = (fileExtname) => { - if (!Array.isArray(fileExtname)) { - let extname = fileExtname.replace(/(\[|\])/g, '') - return extname.split(',') - } else { - return fileExtname - } - return [] -} - -/** - * 获取文件和检测是否可选 - */ -export const get_files_and_is_max = (res, _extname) => { - let filePaths = [] - let files = [] - if(!_extname || _extname.length === 0){ - return { - filePaths, - files - } - } - res.tempFiles.forEach(v => { - let fileFullName = get_file_ext(v.name) - const extname = fileFullName.ext.toLowerCase() - if (_extname.indexOf(extname) !== -1) { - files.push(v) - filePaths.push(v.path) - } - }) - if (files.length !== res.tempFiles.length) { - uni.showToast({ - title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, - icon: 'none', - duration: 5000 - }) - } - - return { - filePaths, - files - } -} - - -/** - * 获取图片信息 - * @param {Object} filepath - */ -export const get_file_info = (filepath) => { - return new Promise((resolve, reject) => { - uni.getImageInfo({ - src: filepath, - success(res) { - resolve(res) - }, - fail(err) { - reject(err) - } - }) - }) -} -/** - * 获取封装数据 - */ -export const get_file_data = async (files, type = 'image') => { - // 最终需要上传数据库的数据 - let fileFullName = get_file_ext(files.name) - const extname = fileFullName.ext.toLowerCase() - let filedata = { - name: files.name, - uuid: files.uuid, - extname: extname || '', - cloudPath: files.cloudPath, - fileType: files.fileType, - url: files.path || files.path, - size: files.size, //单位是字节 - image: {}, - path: files.path, - video: {} - } - if (type === 'image') { - const imageinfo = await get_file_info(files.path) - delete filedata.video - filedata.image.width = imageinfo.width - filedata.image.height = imageinfo.height - filedata.image.location = imageinfo.path - } else { - delete filedata.image - } - return filedata -} +/** + * 获取文件名和后缀 + * @param {String} name + */ +export const get_file_ext = (name) => { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } +} + +/** + * 获取扩展名 + * @param {Array} fileExtname + */ +export const get_extname = (fileExtname) => { + if (!Array.isArray(fileExtname)) { + let extname = fileExtname.replace(/(\[|\])/g, '') + return extname.split(',') + } else { + return fileExtname + } + return [] +} + +/** + * 获取文件和检测是否可选 + */ +export const get_files_and_is_max = (res, _extname) => { + let filePaths = [] + let files = [] + if(!_extname || _extname.length === 0){ + return { + filePaths, + files + } + } + res.tempFiles.forEach(v => { + let fileFullName = get_file_ext(v.name) + const extname = fileFullName.ext.toLowerCase() + if (_extname.indexOf(extname) !== -1) { + files.push(v) + filePaths.push(v.path) + } + }) + if (files.length !== res.tempFiles.length) { + uni.showToast({ + title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, + icon: 'none', + duration: 5000 + }) + } + + return { + filePaths, + files + } +} + + +/** + * 获取图片信息 + * @param {Object} filepath + */ +export const get_file_info = (filepath) => { + return new Promise((resolve, reject) => { + uni.getImageInfo({ + src: filepath, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }) +} +/** + * 获取封装数据 + */ +export const get_file_data = async (files, type = 'image') => { + // 最终需要上传数据库的数据 + let fileFullName = get_file_ext(files.name) + const extname = fileFullName.ext.toLowerCase() + let filedata = { + name: files.name, + uuid: files.uuid, + extname: extname || '', + cloudPath: files.cloudPath, + fileType: files.fileType, + url: files.path || files.path, + size: files.size, //单位是字节 + image: {}, + path: files.path, + video: {} + } + if (type === 'image') { + const imageinfo = await get_file_info(files.path) + delete filedata.video + filedata.image.width = imageinfo.width + filedata.image.height = imageinfo.height + filedata.image.location = imageinfo.path + } else { + delete filedata.image + } + return filedata +} diff --git a/uni_modules/uni-file-picker/package.json b/uni_modules/uni-file-picker/package.json index 35c926c..f1f148c 100644 --- a/uni_modules/uni-file-picker/package.json +++ b/uni_modules/uni-file-picker/package.json @@ -1,83 +1,83 @@ -{ - "id": "uni-file-picker", - "displayName": "uni-file-picker 文件选择上传", - "version": "1.0.4", - "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", - "keywords": [ - "uni-ui", - "uniui", - "图片上传", - "文件上传" -], - "repository": "https://github.com/dcloudio/uni-ui", - "engines": { - "HBuilderX": "" - }, - "directories": { - "example": "../../temps/example_temps" - }, -"dcloudext": { - "sale": { - "regular": { - "price": "0.00" - }, - "sourcecode": { - "price": "0.00" - } - }, - "contact": { - "qq": "" - }, - "declaration": { - "ads": "无", - "data": "无", - "permissions": "无" - }, - "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", - "type": "component-vue" - }, - "uni_modules": { - "dependencies": ["uni-scss"], - "encrypt": [], - "platforms": { - "cloud": { - "tcb": "y", - "aliyun": "y" - }, - "client": { - "App": { - "app-vue": "y", - "app-nvue": "n" - }, - "H5-mobile": { - "Safari": "y", - "Android Browser": "y", - "微信浏览器(Android)": "y", - "QQ浏览器(Android)": "y" - }, - "H5-pc": { - "Chrome": "y", - "IE": "y", - "Edge": "y", - "Firefox": "y", - "Safari": "y" - }, - "小程序": { - "微信": "y", - "阿里": "y", - "百度": "y", - "字节跳动": "y", - "QQ": "y" - }, - "快应用": { - "华为": "u", - "联盟": "u" - }, - "Vue": { - "vue2": "y", - "vue3": "y" - } - } - } - } -} +{ + "id": "uni-file-picker", + "displayName": "uni-file-picker 文件选择上传", + "version": "1.0.6", + "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", + "keywords": [ + "uni-ui", + "uniui", + "图片上传", + "文件上传" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-file-picker/readme.md b/uni_modules/uni-file-picker/readme.md index c8399a5..781aea7 100644 --- a/uni_modules/uni-file-picker/readme.md +++ b/uni_modules/uni-file-picker/readme.md @@ -1,11 +1,11 @@ - -## FilePicker 文件选择上传 - -> **组件名:uni-file-picker** -> 代码块: `uFilePicker` - - -文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 - -### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) + +## FilePicker 文件选择上传 + +> **组件名:uni-file-picker** +> 代码块: `uFilePicker` + + +文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) #### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file