From a3c5980f2853af896444aad3fc298dec50e799db Mon Sep 17 00:00:00 2001 From: wwl <xchao828@163.com> Date: 星期一, 28 四月 2025 10:01:26 +0800 Subject: [PATCH] 上传图片功能 --- src/api/picture/picture.js | 7 src/views/picture/picture/index.vue | 722 +++++++++++++++--------------------------------------- 2 files changed, 211 insertions(+), 518 deletions(-) diff --git a/src/api/picture/picture.js b/src/api/picture/picture.js index e387dd9..64fd221 100644 --- a/src/api/picture/picture.js +++ b/src/api/picture/picture.js @@ -95,3 +95,10 @@ }) } +export function tupian(data) { + return request({ + url: '/common/uploadXdtFile', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/src/views/picture/picture/index.vue b/src/views/picture/picture/index.vue index e182a8b..62558e2 100644 --- a/src/views/picture/picture/index.vue +++ b/src/views/picture/picture/index.vue @@ -1,273 +1,91 @@ <template> <div class="app-container"> - <el-form - :model="queryParams" - ref="queryForm" - size="small" - :inline="true" - label-width="68px" - > - <el-form-item label="濮撳悕" prop="name"> - <el-input - v-model="queryParams.name" - placeholder="璇疯緭鍏ュ鍚�" - clearable - @keyup.enter.native="handleQuery" - style="width: 110px" - /> - </el-form-item> + <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" label-width="68px"> <el-form-item label="浣撴鍙�" prop="tjNumber"> - <el-input - ref="inputName" - v-model="queryParams.tjNumber" - placeholder="璇疯緭鍏ヤ綋妫�鍙�" - clearable - @keyup.enter.native="handleQuery" - @blur="hb" - style="width: 170px" - /> + <el-input ref="inputName" v-model="queryParams.tjNumber" placeholder="璇疯緭鍏ヤ綋妫�鍙�" clearable + @keyup.enter.native="handleQuery" @blur="hb" style="width: 170px" /> </el-form-item> - <el-form-item label="椤圭洰" prop="tcm"> - <el-input - v-model="queryParams.tcm" - placeholder="璇疯緭鍏ラ」鐩�" - clearable - @keyup.enter.native="handleQuery" - style="width: 170px" - /> + + <el-form-item label="濮撳悕" prop="name"> + <el-input v-model="queryParams.name" placeholder="璇疯緭鍏ュ鍚�" clearable @keyup.enter.native="handleQuery" + style="width: 110px" /> </el-form-item> - <el-form-item - label="鍗曚綅鍚嶇О" - prop="tjCompName" - style="margin-left: 20px" - > - <el-select - :remote-method="getRemoteData" - v-model="queryParams.tjCompName" - value-key="drugManufacturerId" - style="width: 180px" - remote - filterable - placeholder="璇烽�夋嫨鍗曚綅鍚嶇О" - clearable - @change="searchSelect" - > - <el-option - v-for="dict in CompanyList" - :key="dict.drugManufacturerId" - :label="dict.cnName" - :value="dict" - /> + <el-form-item label="鍗曚綅鍚嶇О" prop="tjCompName" style="margin-left: 20px"> + <el-select :remote-method="getRemoteData" v-model="queryParams.tjCompName" value-key="drugManufacturerId" + style="width: 180px" remote filterable placeholder="璇烽�夋嫨鍗曚綅鍚嶇О" clearable @change="searchSelect"> + <el-option v-for="dict in CompanyList" :key="dict.drugManufacturerId" :label="dict.cnName" :value="dict" /> </el-select> </el-form-item> - <el-form-item> - <el-button - type="primary" - icon="el-icon-search" - size="mini" - @click="handleQuery" - style="margin-right: 15px" - >鎼滅储</el-button - > - <el-button icon="el-icon-refresh" size="mini" @click="resetQuery" - >閲嶇疆</el-button - > - <el-button - type="primary" - size="mini" - @click="toggleCollapse" - style="margin-right: 15px" - v-show="isCollapsed == 0" - >楂樼骇鎼滅储 - </el-button> - <!-- 灞曞紑鏇村绛涢�夐」 --> - <el-button - type="primary" - size="mini" - @click="toggleCollapse3" - style="margin-right: 15px" - v-show="isCollapsed == 1" - >楂樼骇鎼滅储 - </el-button> - <!-- 鏀惰捣鏇村绛涢�夐」 --> + <el-form-item label="椤圭洰" prop="tcm"> + <el-input v-model="queryParams.tcm" placeholder="璇疯緭鍏ラ」鐩�" clearable @keyup.enter.native="handleQuery" + style="width: 170px" /> </el-form-item> - - <el-row v-show="isCollapsed == 1" :gutter="20"> - <el-col :span="8"> - <el-form-item style="margin-left: 22px;" - label="鐧昏鏃堕棿" - prop="createTimeList" - v-show="isCollapsed == 1" - > - <el-date-picker - v-model="createTimeList" - type="datetimerange" - align="right" - :picker-options="pickerOptions" - style="width: 310px" - start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" - :default-time="['00:00:00', '23:00:00']" - format="yyyy-MM-dd HH:mm" - value-format="yyyy-MM-dd HH:mm" - @change="dateChangebirthday1" - > - </el-date-picker> - </el-form-item> - </el-col> - </el-row> + <el-form-item label="鐧昏鏃堕棿" prop="createTimeList" v-show="isCollapsed == 1"> + <el-date-picker v-model="createTimeList" type="datetimerange" align="right" :picker-options="pickerOptions" + style="width: 310px" start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" :default-time="['00:00:00', '23:59:59']" + format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm" @change="dateChangebirthday1"> + </el-date-picker> + </el-form-item> + <el-form-item> + <el-button type="primary" size="mini" @click="toggleCollapse" style="margin-right: 15px" + v-show="isCollapsed == 0">灞曞紑鏇村</el-button> + <el-button type="primary" size="mini" @click="toggleCollapse3" style="margin-right: 15px" + v-show="isCollapsed == 1">鏀惰捣鏇村</el-button> + <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery" + style="margin-right: 15px">鎼滅储</el-button> + <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">閲嶇疆</el-button> + </el-form-item> </el-form> - <el-radio-group - v-model="checkStatus" - @input="radioChange" - style="margin: 10px 15px" - > + <el-radio-group v-model="checkStatus" @input="radioChange" style="margin: 10px 15px"> <el-radio-button label="0">鏈</el-radio-button> <el-radio-button label="1">宸叉</el-radio-button> </el-radio-group> <el-row :gutter="20"> <el-col :span="11"> - <el-table - v-loading="loading" - ref="tb" - :data="pictureList" - highlight-current-row - :row-class-name="tableRowClassName" - @current-change="handleCurrentChange" - border - height="520px" - > - <!-- <el-table-column type="selection" width="55" /> --> - <!-- @selection-change="handleSelectionChange" --> - <el-table-column - label="浣撴鍙�" - align="center" - prop="tjNumber" - min-width="160" - /> - <el-table-column - label="濮撳悕" - align="center" - prop="cusName" - min-width="80" - /> - <el-table-column - label="鎬у埆" - align="center" - prop="cusSex" - min-width="50" - > + <el-table v-loading="loading" ref="tb" :data="pictureList" highlight-current-row + :row-class-name="tableRowClassName" @current-change="handleCurrentChange" border height="520px"> + <el-table-column label="浣撴鍙�" align="center" prop="tjNumber" min-width="130" /> + <el-table-column label="濮撳悕" align="center" prop="cusName" min-width="80" /> + <el-table-column label="鎬у埆" align="center" prop="cusSex" min-width="50"> <template slot-scope="scope"> <span v-if="scope.row.cusSex == '0'">鐢�</span> <span v-if="scope.row.cusSex == '1'">濂�</span> <span v-if="scope.row.cusSex == '2'">鏈煡</span> <span v-if="scope.row.cusSex == '9'">鏈鏄庢�у埆</span> </template> - <!-- <template slot-scope="scope"> --> - <!-- {{scope.row.customer.cusSex}} --> - <!-- {{ scope.row.cusSex === 0 ? "鐢�" : "濂�" }} --> - <!-- <dict-tag :options="dict.type.sys_user_sex" :value="scope.row.cusSex " /> --> - <!-- </template> --> </el-table-column> - <el-table-column - label="鎵嬫満鍙�" - align="center" - prop="cusPhone" - min-width="100" - /> - <el-table-column - label="濂楅鍚�" - align="center" - prop="tcm" - min-width="100" - /> - <el-table-column - label="鐧昏鏃堕棿" - align="center" - prop="tjTime" - min-width="120" - /> - <el-table-column - label="瀹℃牳鐘舵��" - align="center" - prop="confirmStatus" - min-width="80" - > + <el-table-column label="韬唤璇佸彿" align="center" prop="cusIdcard" min-width="190" /> + <el-table-column label="濂楅鍚�" align="center" prop="tcm" min-width="100" /> + <el-table-column label="鐧昏鏃堕棿" align="center" prop="tjTime" min-width="120" /> + <el-table-column label="瀹℃牳鐘舵��" align="center" prop="confirmStatus" min-width="80"> <template slot-scope="scope"> - <span - :style="{ - color: - scope.row.confirmStatus == '301' ? '#0CB618' : '#EA1B29', - }" - v-if="scope.row.confirmStatus == '301'" - >宸查�氳繃</span - > - <span - :style="{ - color: - scope.row.confirmStatus == '301' ? '#0CB618' : '#EA1B29', - }" - v-if="scope.row.confirmStatus == '299'" - >宸查┏鍥�</span - > + <span :style="{ color: scope.row.confirmStatus == '301' ? '#0CB618' : '#EA1B29' }" + v-if="scope.row.confirmStatus == '301'">宸查�氳繃</span> + <span :style="{ color: scope.row.confirmStatus == '301' ? '#0CB618' : '#EA1B29' }" + v-if="scope.row.confirmStatus == '299'">宸查┏鍥�</span> </template> </el-table-column> </el-table> <div class="pag"> <div class="pag1"> - <pagination - v-show="total > 0" - :total="total" - :page.sync="queryParams.page" - :limit.sync="queryParams.pageSize" - @pagination="submitForm" - /> + <pagination v-show="total > 0" :total="total" :page.sync="queryParams.page" + :limit.sync="queryParams.pageSize" @pagination="submitForm" /> </div> </div> </el-col> <el-col :span="11"> - <el-table - v-loading="loading" - ref="mu" - :data="tableList" - :row-class-name="tableRowClassName" - @header-click="handleHeaderClick" - highlight-current-row - @selection-change="handleChange" - border - style="height: 400px" - > - <el-table-column type="selection" width="50" align="center"> - </el-table-column> - <el-table-column - label="绉戝" - align="center" - prop="deptName" - min-width="100" - :show-overflow-tooltip="true" - /> - <el-table-column - label="椤圭洰" - align="center" - prop="proName" - min-width="150" - :show-overflow-tooltip="true" - /> - <el-table-column - label="鐘舵��" - align="center" - prop="type" - :show-overflow-tooltip="true" - min-width="100" - > + <el-table v-loading="loading" ref="mu" :data="tableList" :row-class-name="tableRowClassName" + @header-click="handleHeaderClick" highlight-current-row @selection-change="handleChange" border + style="height: 400px"> + <el-table-column type="selection" width="50" align="center" /> + <el-table-column label="绉戝" align="center" prop="deptName" min-width="100" :show-overflow-tooltip="true" /> + <el-table-column label="椤圭洰" align="center" prop="proName" min-width="150" :show-overflow-tooltip="true" /> + <el-table-column label="鐘舵��" align="center" prop="type" :show-overflow-tooltip="true" min-width="100"> <template slot-scope="scope"> - <span - v-if="scope.row.type == '0'" - :style="type == 0 ? { color: 'red' } : { color: '#409EFF' }" - > + <span v-if="scope.row.type == '0'" :style="type == 0 ? { color: 'red' } : { color: '#409EFF' }"> {{ type == 0 ? "鏈� 妫�" : "鍦� 妫�" }} </span> <span v-if="scope.row.type == '1'">宸插畬鎴�</span> @@ -275,102 +93,54 @@ <span v-if="scope.row.type == '3'">寤舵湡</span> </template> </el-table-column> - <el-table-column - label="妫�鏌ユ椂闂�" - align="center" - prop="bcupdateTime" - min-width="160" - /> - <!-- <el-table-column label="鎿嶄綔" align="center" min-width="120px"> + <el-table-column label="鍥剧墖" align="center" min-width="100"> <template slot-scope="scope"> - <el-button - size="mini" - type="text" - :disabled="scope.row.type === 1" - :loading="scope.row.isLoading" - @click="qijian(scope.row)" - >{{ scope.row.type === 0 ? "寮冩" : "鎭㈠" }}</el-button - > - <el-button size="mini" type="text" @click="yijian(scope.row)" - >宸叉</el-button - > - <el-button - size="mini" - type="text" - :disabled="scope.row.type === 0 || scope.row.type === 2" - @click="queryResultone(scope.row)" - >缁撴灉</el-button - > + <img v-if="scope.row.imageUrl" :src="scope.row.imageUrl" alt="鍥剧墖" + style="width: 50px; height: 50px; object-fit: cover;" /> + <span v-else>鏃犲浘鐗�</span> </template> - </el-table-column> --> - - <!-- <el-table-column type="selection" width="40" align="center" /> - <el-table-column label="鏀惰垂椤圭洰" align="center" prop="proName" /> - <el-table-column label="椤圭洰鍚嶇О" align="center" prop="proName" /> - <el-table-column label="椤圭洰缁撴灉" align="center" prop="proResult" /> --> + </el-table-column> + <el-table-column label="妫�鏌ユ椂闂�" align="center" prop="bcupdateTime" min-width="160" /> + <el-table-column label="鎿嶄綔" align="center" width="100"> + <template slot-scope="scope"> + <el-button type="text" size="small" @click="showImagePreview(scope.row.imageUrl)" + :disabled="!scope.row.imageUrl">鏌ョ湅鍥剧墖</el-button> + </template> + </el-table-column> </el-table> <div style="margin-top: 10px"> - <el-form - :model="form" - ref="queryForm" - size="small" - :inline="false" - label-width="68px" - > + <el-form :model="form" ref="queryForm" size="small" :inline="false" label-width="68px"> <el-form-item label="妫�鏌ユ墍瑙�" prop="proResult"> - <el-input - v-model="form.proResult" - clearable - type="textarea" - @focus="submiepilog" - /> + <el-input v-model="form.proResult" clearable type="textarea" @focus="submiepilog" /> </el-form-item> <el-form-item label="妫�鏌ョ粨璁�" prop="conclusion"> - <el-input - v-model="form.conclusion" - clearable - type="textarea" - @focus="submiepilog" - /> + <el-input v-model="form.conclusion" clearable type="textarea" @focus="submiepilog" /> </el-form-item> <el-form-item> - <el-button - type="primary" - icon="el-icon-picture" - size="mini" - @click="tupian" - >鍥剧墖</el-button - > - <el-button - type="primary" - icon="el-icon-search" - size="mini" - @click="submito" - >鎻愪氦</el-button - > + <el-upload action="" :http-request="uploadFile" :show-file-list="false" accept="image/*" + :before-upload="beforeUpload" style="display: inline-block; margin-right: 10px;"> + <el-button type="primary" icon="el-icon-picture" size="mini" + :disabled="!isUploadEnabled">涓婁紶鍥剧墖</el-button> + </el-upload> + <el-button type="primary" icon="el-icon-search" size="mini" @click="submito">鎻愪氦</el-button> </el-form-item> </el-form> </div> </el-col> </el-row> - <el-dialog title="鎻愮ず" :visible.sync="dialogVisible" width="60%"> - <!-- :before-close="handleClose" --> - <img src="../../../assets/logo/logo.png" alt="" /> + <el-dialog title="鍥剧墖棰勮" :visible.sync="imagePreviewVisible" width="60%" class="image-preview-dialog"> + <div class="image-container"> + <img :src="currentImageUrl" alt="鍥剧墖" class="preview-image" /> + </div> + <span slot="footer" class="dialog-footer"> + <el-button type="primary" @click="imagePreviewVisible = false">纭畾</el-button> + </span> </el-dialog> - - <Public - ref="aaa" - :check-status="checkStatus" - :pro-result="form.proResult" - :conclusion="form.conclusion" - @add="handleChanges" - :project-list="projectList" - /> - <!-- :last-desc="form.conclusion" --> + <Public ref="aaa" :check-status="checkStatus" :pro-result="form.proResult" :conclusion="form.conclusion" + @add="handleChanges" :project-list="projectList" /> </div> </template> - <script> import { getListPicture, @@ -379,6 +149,7 @@ getYxJcXx, addYxJcXx, getYxJcXxJg, + tupian, } from "@/api/picture/picture"; import { getCompany, queryCompany } from "@/api/team/tuanti"; import { @@ -392,8 +163,8 @@ typeOne, huifu, } from "@/api/doctor/examination"; - import Public from "@/components/public"; + export default { dicts: [ "sys_user_sex", @@ -412,42 +183,34 @@ rShow: false, type: null, checkStatus: "0", - // 閬僵灞� loading: true, result: true, epilog: false, selectedRow: null, - // 閫変腑鏁扮粍 ids: [], CheckBox: {}, - isCollapsed: 0, // 榛樿涓烘姌鍙犵姸鎬� - // 闈炲崟涓鐢� + isCollapsed: 0, single: true, - // 闈炲涓鐢� multiple: true, - // 鏄剧ず鎼滅储鏉′欢 showSearch: true, selectedTjNumber: "", createTimeList: "", - // 鎬绘潯鏁� total: 0, activeName: "first", proResult: "", conclusion: "", imgsrc: "", tjNumber: "", - // 浣撴蹇冪數鍥剧鐞嗚〃鏍兼暟鎹� pictureList: [], tableList: [], CompanyList: [], projectList: [], - // 寮瑰嚭灞傛爣棰� title: "", - // 鏄惁鏄剧ず寮瑰嚭灞� open: false, - dialogVisible: false, + imagePreviewVisible: false, + currentImageUrl: "", selectList: [], - // 鏌ヨ鍙傛暟 + isUploadEnabled: false, queryParams: { page: 1, pageSize: 10, @@ -459,22 +222,12 @@ tcm: "", tjCompName: "", checkStatus: null, - // tjNum: null, - // cusId: null, - // name: null, - // xdt: null, - // proId: null, - // proName: null, - // proResult: null, - // conclusion: null, }, dataobj: {}, - // 琛ㄥ崟鍙傛暟 form: { proResult: "", conclusion: "", }, - // 琛ㄥ崟鏍¢獙 rules: {}, pickerOptions: { shortcuts: [ @@ -519,39 +272,86 @@ this.radioChange(this.checkStatus); }, methods: { - // 榧犳爣杩涘叆鍘熷浘绌洪棿鍑芥暟 + showImagePreview(url) { + if (url) { + this.currentImageUrl = url; + this.imagePreviewVisible = true; + } + }, + beforeUpload(file) { + const isImage = file.type.startsWith('image/'); + if (!isImage) { + this.$message.error('鍙兘涓婁紶鍥剧墖鏂囦欢锛�'); + return false; + } + const isLt5M = file.size / 1024 / 1024 < 5; + if (!isLt5M) { + this.$message.error('鍥剧墖澶у皬涓嶈兘瓒呰繃 5MB锛�'); + return false; + } + if (!this.selectedRow || !this.selectedRow.proId || !this.selectedTjNumber) { + this.$message.error('璇峰厛閫夋嫨涓�涓」鐩紒'); + return false; + } + return true; + }, + uploadFile(item) { + const file = item.file; + const tjNumber = this.selectedTjNumber; + const proId = this.selectedRow.proId; + + const fileExtension = file.name.split('.').pop(); + const newFileName = `${tjNumber}_${proId}.${fileExtension}`; + + const formData = new FormData(); + formData.append('file', file, newFileName); + formData.append('tjh', tjNumber); + formData.append('proId', proId); + + tupian(formData) + .then(response => { + console.log('鎴愬姛浜�', response); + if (response.code === 200) { + this.$message.success('鍥剧墖涓婁紶鎴愬姛锛�'); + const index = this.tableList.findIndex(item => item.proId === proId); + if (index !== -1) { + // 淇濆瓨 base64 鍥惧儚鐢ㄤ簬鏄剧ず + if (response.base64) { + const base64Image = `data:image/${fileExtension};base64,${response.base64}`; + this.$set(this.tableList[index], 'imageUrl', base64Image); + } + // 淇濆瓨杩斿洖鐨� url + if (response.url) { + this.$set(this.tableList[index], 'url', response.url); + } + } + } else { + this.$message.error('鍥剧墖涓婁紶澶辫触锛�'); + } + }) + .catch(error => { + console.log('涓婁紶澶辫触', error); + this.$message.error('鍥剧墖涓婁紶澶辫触锛�'); + }); + }, enterHandler() { - // 灞傜僵鍙婃斁澶х┖闂寸殑鏄剧ず this.topShow = true; this.rShow = true; }, - // 榧犳爣绉诲姩鍑芥暟 moveHandler(event) { - // 榧犳爣鐨勫潗鏍囦綅缃� let x = event.offsetX; let y = event.offsetY; - // 灞傜僵鐨勫乏涓婅鍧愭爣浣嶇疆锛屽苟瀵瑰叾杩涜闄愬埗锛氭棤娉曡秴鍑哄師鍥惧尯鍩熷乏涓婅 let topX = x - 100 < 0 ? 0 : x - 100; let topY = y - 100 < 0 ? 0 : y - 100; - // 瀵瑰眰缃╀綅缃啀涓�娆¢檺鍒讹紝淇濊瘉灞傜僵鍙兘鍦ㄥ師鍥惧尯鍩熺┖闂村唴 - if (topX > 200) { - topX = 200; - } - if (topY > 200) { - topY = 200; - } - // 閫氳繃 transform 杩涜绉诲姩鎺у埗 + if (topX > 200) topX = 200; + if (topY > 200) topY = 200; this.topStyle.transform = `translate(${topX}px,${topY}px)`; this.r_img.transform = `translate(-${2 * topX}px,-${2 * topY}px)`; }, - // 榧犳爣绉诲嚭鍑芥暟 outHandler() { - // 鎺у埗灞傜僵涓庢斁澶х┖闂寸殑闅愯棌 this.topShow = false; this.rShow = false; }, - - /** 鏌ヨ浣撴蹇冪數鍥剧鐞嗗垪琛� */ getList() { this.loading = true; this.queryParams.checkStatus = this.checkStatus; @@ -563,33 +363,11 @@ this.queryParams.beginTime = null; this.queryParams.endTime = null; } - /* getYxJcList(this.queryParams).then((response) => { - - if (response.data) { - this.pictureList = response.data.customers; - } else { - this.$message.warning("鏌ユ棤姝や汉"); - } - - if (this.pictureList.length != 0) { - this.$nextTick(() => { - this.$refs.tb.toggleRowSelection(this.pictureList[0], true); - }); - } else { - this.$refs.tb.clearSelection(); - } - this.total = response.data.total; - - this.loading = false; - }); */ - getCompany(this.queryParams).then((response) => { this.CompanyList = response.data; this.loading = false; }); }, - - // / 澶勭悊榛樿閫変腑褰撳墠鏃ユ湡 getNowTime() { var curDate = new Date().getTime(); var dayNum = 7 * 24 * 3600 * 1000; @@ -620,15 +398,12 @@ this.add0(mm) ); }, - dateChangebirthday1(val) { this.startTime = val; }, - handleRowClick(row, column, event) { this.name = row.proName; }, - // 浣撴鍏徃鎷奸煶鎼滅储 getRemoteData(query) { if (query) { let compName = query; @@ -661,21 +436,11 @@ } } }); - /* const tjNumber = this.pictureList.tjNumber; - - - getYxJcXx(tjNumber).then((res) => { - this.tableList = res.data; - this.loading = false; - }); */ }, - - // 鍙栨秷鎸夐挳 cancel() { this.open = false; this.reset(); }, - // 琛ㄥ崟閲嶇疆 reset() { this.form = { proResult: null, @@ -685,7 +450,6 @@ }, hb() { if (this.queryParams.tjNumber != null) { - // this.handleQuery(); this.submitForm(); } }, @@ -700,8 +464,6 @@ this.queryParams.beginTime = null; this.queryParams.endTime = null; } - - // 椤甸潰鏁版嵁 getYxJcList(this.queryParams).then((res) => { if (res.code == 200) { this.loading = false; @@ -722,28 +484,22 @@ } }); }, - - // 閫夋鏁版嵁 searchSelect(val) { this.CheckBox = val; }, - handleHeaderClick(column, event) { if (column.type === "selection") { - // 鏌ユ壘鍏ㄩ�夋骞堕殣钘� const checkbox = event.target.closest(".el-checkbox"); if (checkbox) checkbox.style.display = "none"; } }, - /** 鎼滅储鎸夐挳鎿嶄綔 */ handleQuery() { this.queryParams.page = 1; this.submitForm(); }, - /** 閲嶇疆鎸夐挳鎿嶄綔 */ resetQuery() { this.createTimeList = []; - (this.queryParams = { + this.queryParams = { page: 1, pageSize: 10, tjNumber: null, @@ -754,28 +510,18 @@ endTime: null, tjCompName: "", tcm: "", - }), - (this.CheckBox.drugManufacturerId = ""); + }; + this.CheckBox.drugManufacturerId = ""; this.tableList = []; - // this.resetForm("queryForm"); this.handleQuery(); this.loading = true; }, - toggleCollapse3() { - // this.isCollapsed = !this.isCollapsed; // 鐐瑰嚮鎸夐挳鏃跺垏鎹sCollapsed鐨勫�� this.isCollapsed = 0; - this.$nextTick(() => { - this.$refs.inputName.focus(); - }); }, toggleCollapse() { - this.isCollapsed = 1; // 鐐瑰嚮鎸夐挳鏃跺垏鎹sCollapsed鐨勫�� - this.$nextTick(() => { - this.$refs.inputName.focus(); - }); + this.isCollapsed = 1; }, - tableRowClassName({ row, rowIndex }) { for (let i = 0; i < this.selectList.length; i++) { if (row === this.selectList[i]) { @@ -783,24 +529,30 @@ } } }, - handleCurrentChange(val) { this.selectedRow = val; if (!val || !val.tjNumber) { console.warn("tjNumber 涓虹┖锛屼笉璋冪敤鎺ュ彛"); this.tableList = []; + this.isUploadEnabled = false; return; } this.selectedTjNumber = val.tjNumber; this.changtjNumber(val.tjNumber); }, - changtjNumber(val) { console.log(8989); let tjNumber = val; this.loading = true; getYxJcXx(tjNumber).then((res) => { - this.tableList = res.data; + this.tableList = res.data.map(item => { + // 濡傛灉 imageUrl 瀛樺湪涓旀槸绾� Base64 瀛楃涓诧紝娣诲姞 data:image 鍓嶇紑 + if (item.imageUrl && !item.imageUrl.startsWith('data:image')) { + // 鍋囪鍥剧墖绫诲瀷涓� png锛屽鏋滄帴鍙f彁渚涚被鍨嬶紝鍙互鏇挎崲涓哄姩鎬佸�� + item.imageUrl = `data:image/png;base64,${item.imageUrl}`; + } + return item; + }); this.loading = false; this.$nextTick(() => { const headerCheckbox = this.$refs.mu.$el.querySelector( @@ -825,8 +577,6 @@ }); }); }, - - // 寮冩鎸夐挳 qijian(row) { const tjNUm = this.selectedTjNumber; const proId = row.proId; @@ -836,7 +586,6 @@ if (res.code == 200) { cSWebGetPro(tjNUm).then((res) => { if (res.code === 200) { - // 鏇存柊鍙宠竟琛ㄦ牸鐨勬暟鎹� this.xiangmuList = res.data; row.isLoading = false; } @@ -848,7 +597,6 @@ if (res.code == 200) { cSWebGetPro(tjNUm).then((res) => { if (res.code === 200) { - // 鏇存柊鍙宠竟琛ㄦ牸鐨勬暟鎹� this.xiangmuList = res.data; this.isLoading = false; } @@ -857,7 +605,6 @@ }); } }, - yijian(row) { const tjNUm = this.selectedTjNumber; const proId = row.proId; @@ -878,36 +625,6 @@ row.isLoading = false; }); }, - - // 澶氶�夋閫変腑鏁版嵁 - /* handleSelectionChange(selection) { - this.imgsrc = selection[0].picturePath; - this.tjNumber = selection[0].customer.tjNumber; - this.ids = selection.map((item) => item.id); - selection.forEach((element) => { - this.tableList = element.list; - if (this.tableList.length != 0) { - this.tableList.forEach((item) => { - this.form.proResult = item.proResult; - this.form.conclusion = item.conclusion; - }); - this.$nextTick(() => { - this.$refs.mu.toggleRowSelection(this.tableList[0], true); - }); - } else { - this.$refs.mu.clearSelection(); - } - }); - // this.tableList.forEach(item => { - // this.imgsrc = item.xdt - // }) - if (selection.length > 1) { - let del_row = selection.shift(); - this.$refs.tb.toggleRowSelection(del_row, false); //璁剧疆杩欎竴琛屽彇娑堥�変腑 - } - this.single = selection.length !== 1; - this.multiple = !selection.length; - }, */ handleSelectionChange(selection) { this.imgsrc = selection[0].picturePath; this.tjNumber = selection[0].customer.tjNumber; @@ -925,7 +642,6 @@ this.tableList = element.list; if (this.tableList.length !== 0) { - // 鉁� 鎻愬墠璧嬪�� selectedRow锛岄伩鍏� handleChange 鏃舵湭璧嬪�� this.selectedRow = this.tableList[0]; this.form.proResult = this.tableList[0].proResult; this.form.conclusion = this.tableList[0].conclusion; @@ -942,92 +658,49 @@ handleChange(selection) { if (selection.length > 1) { let del_row = selection.shift(); - this.$refs.mu.toggleRowSelection(del_row, false); //璁剧疆杩欎竴琛屽彇娑堥�変腑 + this.$refs.mu.toggleRowSelection(del_row, false); } this.projectList = selection.map((item) => ({ proId: item.proId, proName: item.proName, })); + this.isUploadEnabled = selection.length > 0; if (selection && selection.length > 0) { const proId = selection[0].proId; - - // 鉁� 纭繚 selectedRow 瀛樺湪涓旀湁 tjNumber const tjNumber = this.selectedTjNumber; getYxJcXxJg(tjNumber, proId).then((res) => { this.form.proResult = res.data.jcsj; this.form.conclusion = res.data.jcjl; this.$refs.aaa.updateData(res.data.jcsj, res.data.jcjl); }); - - // 鉁� 鍚屾椂鏇存柊 selectedRow this.selectedRow = selection[0]; } }, - - /* handleChange(selection) { - if (selection && selection.length > 0) { - const proId = selection[0].proId; - const tjNumber = this.selectedRow.tjNumber; - this.selectedRow = selection[0]; - getYxJcXxJg(tjNumber, proId).then((res) => { - this.form.proResult = res.data.jcsj; - this.form.conclusion = res.data.jcjl; - }); - } - }, */ - handleChanges(value, yxbx) { this.form.conclusion = value; this.form.proResult = yxbx; }, - submiepilog() { this.$refs.aaa.open = true; let proId = "1633660948860522585"; - // let proId = null this.$refs.aaa.getList(proId); }, - tupian() { - this.dialogVisible = true; - }, - - // 纭畾鎸夐挳 submito() { - /* if (this.dataobj) { - if (this.form.proResult) { - this.dataobj.proResult = this.form.proResult; - } - if (this.form.conclusion) { - this.dataobj.conclusion = this.form.conclusion; - } - updatePicture(this.dataobj).then((res) => { - this.$modal.msgSuccess("鎻愪氦鎴愬姛"); - this.getList(); - this.form.proResult = ""; - this.form.conclusion = ""; - }); - } else { - this.$modal.msgSuccess("閫夋嫨淇敼椤圭洰"); - } */ if (!this.selectedRow || !this.selectedRow.proId) { console.error("鏈�変腑琛屾垨缂哄皯 proId"); return; } const proId = this.selectedRow.proId; - const jcsj = this.form.proResult || " "; // 鑾峰彇妫�鏌ユ墍瑙� - const jcjl = this.form.conclusion || " "; // 鑾峰彇妫�鏌ョ粨璁� - - // 纭繚 jcsj 鍜� jcjl 瀛樺湪 - // if (!jcsj || !jcjl) { - // console.error("妫�鏌ユ墍瑙佹垨妫�鏌ョ粨璁轰笉鑳戒负绌�"); - // return; - // } + const jcsj = this.form.proResult || " "; + const jcjl = this.form.conclusion || " "; + const url = this.selectedRow.url || ""; // 鑾峰彇 url锛屽鏋滀笉瀛樺湪鍒欎负绌哄瓧绗︿覆 addYxJcXx({ proId: proId, tjNumber: this.selectedTjNumber, - jcsj: jcsj, // 浼犻�掓鏌ユ墍瑙� - jcjl: jcjl, // 浼犻�掓鏌ョ粨璁� + jcsj: jcsj, + jcjl: jcjl, + url: url // 娣诲姞 url 鍙傛暟 }) .then((response) => { this.form.proResult = ""; @@ -1048,16 +721,11 @@ console.error("鎻愪氦澶辫触", error); }); }, - - //鍒犻櫎鎸夐挳 - handleDelete() {}, - - // 瀵煎嚭 - handleExport() {}, + handleDelete() { }, + handleExport() { }, }, }; </script> - <style> .default-button-style :hover { @@ -1072,10 +740,8 @@ position: absolute; top: 0; left: 0; - /* border: 1px solid red; */ } -/* 鍙宠竟鐨勫尯鍩熷浘鐗囨斁澶х┖闂� */ .right { margin-left: 412px; width: 340px; @@ -1085,7 +751,6 @@ overflow: hidden; } -/* 涓�涓渶楂樺眰灞傜僵 */ .maskTop { width: 400px; height: 400px; @@ -1095,7 +760,6 @@ left: 0; } -/* 灞傜僵锛岄�氳繃瀹氫綅灏嗗乏涓婅瀹氫綅鍒�(0,0) */ .top { width: 200px; height: 200px; @@ -1106,22 +770,44 @@ left: 0; } -/* 鍘熷浘鐨勬樉绀� */ .leftImg { width: 400px; height: 400px; display: inline-block; } -/* 鍘熷浘鐨勫鍣� */ .left { width: 400px; height: 400px; - /* border: 1px solid teal; */ float: left; position: relative; } -.el-input--small { - font-size: 13px; + +.el-upload { + display: inline-block; } -</style> + +.el-table .cell img { + border-radius: 4px; +} + +.image-preview-dialog .el-dialog__body { + padding: 10px; + max-height: 60vh; + overflow-y: auto; +} + +.image-container { + text-align: center; +} + +.preview-image { + max-width: 100%; + max-height: 50vh; + object-fit: contain; +} + +.dialog-footer { + text-align: center; +} +</style> \ No newline at end of file -- Gitblit v1.8.0