From 66ff30cd4deee3dbfce6751e31392c072bf15dfc Mon Sep 17 00:00:00 2001 From: zhangherong <571457620@qq.com> Date: 星期二, 18 三月 2025 18:04:41 +0800 Subject: [PATCH] art:设备管理-基础数据-附件管理,工艺参数,精度参数 新增 --- src/views/eam/base/EamPrecisionParametersList.vue | 170 ++++++ src/views/eam/base/modules/EamSysFilesModal.vue | 129 ++++ src/components/jeecg/index.js | 4 src/views/eam/base/EamSysFilesList.vue | 204 +++++++ src/components/jeecg/LxUpload.vue | 452 +++++++++++++++++ src/views/eam/base/EamProcessParametersList.vue | 190 +++++++ src/views/eam/base/modules/EamProcessParametersModal.vue | 123 ++++ src/views/eam/base/modules/EamPrecisionParametersModal.vue | 117 ++++ src/components/jeecg/LxFilePreview.vue | 119 ++++ 9 files changed, 1,508 insertions(+), 0 deletions(-) diff --git a/src/components/jeecg/LxFilePreview.vue b/src/components/jeecg/LxFilePreview.vue new file mode 100644 index 0000000..6017a26 --- /dev/null +++ b/src/components/jeecg/LxFilePreview.vue @@ -0,0 +1,119 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + :footer="null" + cancelText="鍏抽棴"> + <a-spin :spinning="confirmLoading"> + <img v-if="isImage" :src="fileUrl" width="100%" height="100%" alt="鍥剧墖棰勮" /> + <iframe v-else-if="isPdf" :src="fileUrl" width="100%" height="600px"></iframe> + <video v-else-if="isVideo" controls> + <source :src="fileUrl" type="video/mp4"> + 鎮ㄧ殑娴忚鍣ㄤ笉鏀寔 video 鏍囩銆� + </video> + <pre v-else-if="isText">{{ textContent }}</pre> + <h1 v-else>涓嶆敮鎸侀瑙堬紝璇蜂笅杞藉悗鏌ョ湅</h1> + </a-spin> + </j-modal> +</template> + +<script> +import { getFileAccessHttpUrl } from '@/api/manage' + +export default { + props: { + fileUrl: String + }, + data() { + return { + title: '棰勮', + textContent: '', + confirmLoading: false, + visible: false + } + }, + computed: { + isImage() { + return /\.(jpeg|jpg|png|gif|bmp|webp)$/i.test(this.fileUrl) + }, + isPdf() { + return /\.pdf$/i.test(this.fileUrl) + }, + isVideo() { + return /\.(mp4|webm|ogg)$/i.test(this.fileUrl) + }, + isText() { + return /\.(txt|md|json|xml|yaml|yml)$/i.test(this.fileUrl) + } + }, + watch: { + fileUrl: 'fetchTextContent' + }, + mounted() { + if (this.isText) { + this.fetchTextContent() + } + }, + methods: { + async fetchTextContent() { + try { + const response = await fetch(this.fileUrl) + if (!response.ok) throw new Error('缃戠粶鍝嶅簲涓嶆槸OK') + const text = await response.text() + this.textContent = text + } catch (error) { + console.error('鑾峰彇鏂囨湰鍐呭澶辫触:', error) + this.textContent = '鏃犳硶鍔犺浇鏂囨湰鍐呭' + } + }, + close() { + this.$emit('close') + this.visible = false + }, + preview(fileUrl) { + let url = getFileAccessHttpUrl(fileUrl) + this.visible = true + this.fileUrl = url + }, + handleOk() { + this.close() + }, + handleCancel() { + this.close() + } + } +} +</script> + +<style lang="less" scoped> + +/deep/ .ant-modal { + height: 80%; + /* 婊氬姩鏉′紭鍖� start */ + ::-webkit-scrollbar{ + width:8px; + height:8px; + } + + .ant-modal-content { + height: 100%; + display: flex; + flex-direction: column; + + .ant-modal-body { + flex: 1; + overflow: auto; + } + } +} + +pre { + overflow: visible; +} + + +</style> \ No newline at end of file diff --git a/src/components/jeecg/LxUpload.vue b/src/components/jeecg/LxUpload.vue new file mode 100644 index 0000000..6f47e6f --- /dev/null +++ b/src/components/jeecg/LxUpload.vue @@ -0,0 +1,452 @@ +<template> + <div :id="containerId" style="position: relative"> + + <!-- ---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- --> + <div class="movety-container" :style="{top:top+'px',left:left+'px',display:moveDisplay}" + style="padding:0 8px;position: absolute;z-index: 91;height: 32px;width: 104px;text-align: center;"> + <div :id="containerId+'-mover'" :class="showMoverTask?'uploadty-mover-mask':'movety-opt'" + style="margin-top: 12px"> + <a @click="moveLast" style="margin: 0 5px;"> + <a-icon type="arrow-left" style="color: #fff;font-size: 16px" /> + </a> + <a @click="moveNext" style="margin: 0 5px;"> + <a-icon type="arrow-right" style="color: #fff;font-size: 16px" /> + </a> + </div> + </div> + <!-- ---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- --> + + <a-upload + name="file" + :multiple="multiple" + :action="uploadAction" + :headers="headers" + :data="{'biz':bizPath}" + :fileList="fileList" + :beforeUpload="doBeforeUpload" + @change="handleChange" + :disabled="disabled" + :listType="complistType" + @preview="handlePreview" + :class="{'uploadty-disabled':disabled}"> + <template> + <div v-if="isImageComp"> + <a-icon type="plus" /> + <div class="ant-upload-text">{{ text }}</div> + </div> + <a-button v-else-if="buttonVisible"> + <a-icon type="upload" /> + {{ text }} + </a-button> + </template> + </a-upload> + <a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel"> + <img alt="example" style="width: 100%" :src="previewImage" /> + </a-modal> + </div> +</template> + +<script> + +import Vue from 'vue' +import { ACCESS_TOKEN } from '@/store/mutation-types' +import { getFileAccessHttpUrl } from '@/api/manage' + +const FILE_TYPE_ALL = 'all' +const FILE_TYPE_IMG = 'image' +const FILE_TYPE_TXT = 'file' +const uidGenerator = () => { + return '-' + parseInt(Math.random() * 10000 + 1, 10) +} +const getFileName = (path) => { + if (path.lastIndexOf('\\') >= 0) { + let reg = new RegExp('\\\\', 'g') + path = path.replace(reg, '/') + } + return path.substring(path.lastIndexOf('/') + 1) +} +export default { + name: 'LXUpload', + data() { + return { + uploadAction: window._CONFIG['domianURL'] + '/eam/sysFiles/upload', + headers: {}, + fileList: [], + newFileList: [], + uploadGoOn: true, + previewVisible: false, + //---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- + previewImage: '', + containerId: '', + top: '', + left: '', + moveDisplay: 'none', + showMoverTask: false, + moverHold: false, + currentImg: '' + //---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- + } + }, + props: { + text: { + type: String, + required: false, + default: '鐐瑰嚮涓婁紶' + }, + fileType: { + type: String, + required: false, + default: FILE_TYPE_ALL + }, + /*杩欎釜灞炴�х敤浜庢帶鍒舵枃浠朵笂浼犵殑涓氬姟璺緞*/ + bizPath: { + type: String, + required: false, + default: 'temp' + }, + value: { + type: [String, Array], + required: false + }, + // update-begin- --- author:wangshuai ------ date:20190929 ---- for:Jupload缁勪欢澧炲姞鏄惁鑳藉鐐瑰嚮 + disabled: { + type: Boolean, + required: false, + default: false + }, + // update-end- --- author:wangshuai ------ date:20190929 ---- for:Jupload缁勪欢澧炲姞鏄惁鑳藉鐐瑰嚮 + //姝ゅ睘鎬ц搴熷純浜� + triggerChange: { + type: Boolean, + required: false, + default: false + }, + /** + * update -- author:lvdandan -- date:20190219 -- for:Jupload缁勪欢澧炲姞鏄惁杩斿洖url锛� + * true锛氫粎杩斿洖url + * false锛氳繑鍥瀎ileName filePath fileSize + */ + // returnUrl: { + // type: Boolean, + // required: false, + // default: true + // }, + number: { + type: Number, + required: false, + default: 0 + }, + buttonVisible: { + type: Boolean, + required: false, + default: true + }, + multiple: { + type: Boolean, + default: true + }, + beforeUpload: { + type: Function + } + }, + watch: { + value: { + immediate: true, + handler() { + let val = this.value + if (val instanceof Array) { + this.initFileListArr(val) + } else { + this.initFileList(val) + } + } + } + }, + computed: { + isImageComp() { + return this.fileType === FILE_TYPE_IMG + }, + complistType() { + return this.fileType === FILE_TYPE_IMG ? 'picture-card' : 'text' + } + }, + created() { + const token = Vue.ls.get(ACCESS_TOKEN) + //---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- + this.headers = { 'X-Access-Token': token } + this.containerId = 'container-ty-' + new Date().getTime() + //---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- + }, + + methods: { + initFileListArr(val) { + if (!val || val.length == 0) { + this.fileList = [] + return + } + let fileList = [] + for (var a = 0; a < val.length; a++) { + let url = getFileAccessHttpUrl(val[a].filePath) + fileList.push({ + uid: uidGenerator(), + name: val[a].fileName, + status: 'done', + url: url, + response: { + status: 'history', + message: val[a].filePath + } + }) + } + this.fileList = fileList + }, + initFileList(paths) { + if (!paths || paths.length == 0) { + //return []; + // update-begin- --- author:os_chengtgen ------ date:20190729 ---- for:issues:326,Jupload缁勪欢鍒濆鍖朾ug + this.fileList = [] + return + // update-end- --- author:os_chengtgen ------ date:20190729 ---- for:issues:326,Jupload缁勪欢鍒濆鍖朾ug + } + let fileList = [] + let arr = paths.split(',') + for (var a = 0; a < arr.length; a++) { + let url = getFileAccessHttpUrl(arr[a]) + fileList.push({ + uid: uidGenerator(), + name: getFileName(arr[a]), + status: 'done', + url: url, + response: { + status: 'history', + message: arr[a] + } + }) + } + this.fileList = fileList + }, + doBeforeUpload(file) { + this.uploadGoOn = true + var fileType = file.type + if (this.fileType === FILE_TYPE_IMG) { + if (fileType.indexOf('image') < 0) { + this.$message.warning('璇蜂笂浼犲浘鐗�') + this.uploadGoOn = false + return false + } + } + // 鎵╁睍 beforeUpload 楠岃瘉 + if (typeof this.beforeUpload === 'function') { + return this.beforeUpload(file) + } + return true + }, + handleChange(info) { + console.log('--鏂囦欢鍒楄〃鏀瑰彉--') + if (!info.file.status && this.uploadGoOn === false) { + info.fileList.pop() + } + let fileList = info.fileList + if (info.file.status === 'done') { + if (this.number > 0) { + fileList = fileList.slice(-this.number) + } + if (info.file.response.success) { + fileList = fileList.map((file) => { + if (file.response) { + let reUrl = file.response.result.filePath; + file.url = getFileAccessHttpUrl(reUrl) + } + return file + }) + } + //this.$message.success(`${info.file.name} 涓婁紶鎴愬姛!`); + } else if (info.file.status === 'error') { + this.$message.error(`${info.file.name} 涓婁紶澶辫触.`) + } else if (info.file.status === 'removed') { + this.handleDelete(info.file) + } + this.fileList = fileList + if (info.file.status === 'done' || info.file.status === 'removed') { + //returnUrl涓篺alse鏃惰繑鍥炴枃浠跺悕绉般�佹枃浠惰矾寰勫強鏂囦欢澶у皬 + this.newFileList = [] + for (var a = 0; a < fileList.length; a++) { + // update-begin-author:lvdandan date:20200603 for:銆怲ESTA-514銆戙�愬紑婧恑ssue銆戝涓枃浠跺悓鏃朵笂浼犳椂锛屾帶鍒跺彴鎶ラ敊 + if (fileList[a].status === 'done') { + let fileJson = { + fileName: fileList[a].name, + filePath: fileList[a].response.result.filePath, + fileSize: fileList[a].size, + fileEncodeName: fileList[a].response.result.fileEncodeName, + fileSuffix: fileList[a].response.result.fileSuffix, + } + this.newFileList.push(fileJson) + } else { + return + } + // update-end-author:lvdandan date:20200603 for:銆怲ESTA-514銆戙�愬紑婧恑ssue銆戝涓枃浠跺悓鏃朵笂浼犳椂锛屾帶鍒跺彴鎶ラ敊 + } + this.$emit('change', this.newFileList) + } + }, + handleDelete(file) { + //濡傛湁闇�瑕佹柊澧� 鍒犻櫎閫昏緫 + console.log(file) + }, + handlePreview(file) { + if (this.fileType === FILE_TYPE_IMG) { + this.previewImage = file.url || file.thumbUrl + this.previewVisible = true + } else { + location.href = file.url + } + }, + handleCancel() { + this.previewVisible = false + }, + //---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- + moveLast() { + //console.log(ev) + //console.log(this.fileList) + //console.log(this.currentImg) + let index = this.getIndexByUrl() + if (index == 0) { + this.$message.warn('鏈煡鐨勬搷浣�') + } else { + let curr = this.fileList[index].url + let last = this.fileList[index - 1].url + let arr = [] + for (let i = 0; i < this.fileList.length; i++) { + if (i == index - 1) { + arr.push(curr) + } else if (i == index) { + arr.push(last) + } else { + arr.push(this.fileList[i].url) + } + } + this.currentImg = last + this.$emit('change', arr.join(',')) + } + }, + moveNext() { + let index = this.getIndexByUrl() + if (index == this.fileList.length - 1) { + this.$message.warn('宸插埌鏈�鍚巭') + } else { + let curr = this.fileList[index].url + let next = this.fileList[index + 1].url + let arr = [] + for (let i = 0; i < this.fileList.length; i++) { + if (i == index + 1) { + arr.push(curr) + } else if (i == index) { + arr.push(next) + } else { + arr.push(this.fileList[i].url) + } + } + this.currentImg = next + this.$emit('change', arr.join(',')) + } + }, + getIndexByUrl() { + for (let i = 0; i < this.fileList.length; i++) { + if (this.fileList[i].url === this.currentImg || encodeURI(this.fileList[i].url) === this.currentImg) { + return i + } + } + return -1 + } + }, + mounted() { + const moverObj = document.getElementById(this.containerId + '-mover') + if (moverObj) { + moverObj.addEventListener('mouseover', () => { + this.moverHold = true + this.moveDisplay = 'block' + }) + moverObj.addEventListener('mouseout', () => { + this.moverHold = false + this.moveDisplay = 'none' + }) + } + + let picList = document.getElementById(this.containerId) ? document.getElementById(this.containerId).getElementsByClassName('ant-upload-list-picture-card') : [] + if (picList && picList.length > 0) { + picList[0].addEventListener('mouseover', (ev) => { + ev = ev || window.event + let target = ev.target || ev.srcElement + if ('ant-upload-list-item-info' == target.className) { + this.showMoverTask = false + let item = target.parentElement + this.left = item.offsetLeft + this.top = item.offsetTop + item.offsetHeight - 50 + this.moveDisplay = 'block' + this.currentImg = target.getElementsByTagName('img')[0].src + } + + }) + + picList[0].addEventListener('mouseout', (ev) => { + ev = ev || window.event + let target = ev.target || ev.srcElement + //console.log('绉婚櫎',target) + if ('ant-upload-list-item-info' == target.className) { + this.showMoverTask = true + setTimeout(() => { + if (this.moverHold === false) { + this.moveDisplay = 'none' + } + }, 100) + } + if ('ant-upload-list-item ant-upload-list-item-done' == target.className || 'ant-upload-list ant-upload-list-picture-card' == target.className) { + this.moveDisplay = 'none' + } + }) + //---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- + } + }, + model: { + prop: 'value', + event: 'change' + } +} +</script> + +<style lang="less"> +.uploadty-disabled { + .ant-upload-list-item { + .anticon-close { + display: none; + } + + .anticon-delete { + display: none; + } + } + + /*update-begin-author:taoyan date:2022-12-5 for: issues/4250 寤鸿JUpload缁勪欢锛宒isabled涓簍rue鐨勬椂鍊欎笂浼燽utton鑳藉鍙樼伆鎴栬�呭叾浠栨牱寮忓浘妗堬紝渚夸簬鐭ユ檽鏃犳硶鍐嶇偣鍑讳笂浼�*/ + + .ant-btn, .ant-upload-disabled { + cursor: not-allowed; + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + } + + /*update-end-author:taoyan date:2022-12-5 for: issues/4250 寤鸿JUpload缁勪欢锛宒isabled涓簍rue鐨勬椂鍊欎笂浼燽utton鑳藉鍙樼伆鎴栬�呭叾浠栨牱寮忓浘妗堬紝渚夸簬鐭ユ檽鏃犳硶鍐嶇偣鍑讳笂浼�*/ + +} + +//---------------------------- begin 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- +.uploadty-mover-mask { + background-color: rgba(0, 0, 0, 0.5); + opacity: .8; + color: #fff; + height: 28px; + line-height: 28px; +} + +//---------------------------- end 鍥剧墖宸﹀彸鎹綅缃� ------------------------------------- +</style> \ No newline at end of file diff --git a/src/components/jeecg/index.js b/src/components/jeecg/index.js index 166f423..c7974d5 100644 --- a/src/components/jeecg/index.js +++ b/src/components/jeecg/index.js @@ -27,6 +27,8 @@ import JTime from './JTime.vue' import JTreeTable from './JTreeTable.vue' import JEasyCron from '@/components/jeecg/JEasyCron' +import LxUpload from './LxUpload.vue' +import LxFilePreview from './LxFilePreview.vue' //jeecgbiz import JSelectDepart from '../jeecgbiz/JSelectDepart.vue' import JSelectMultiUser from '../jeecgbiz/JSelectMultiUser.vue' @@ -71,6 +73,8 @@ Vue.component('JTreeSelect', JTreeSelect) Vue.component('JTreeTable', JTreeTable) Vue.component('JUpload', JUpload) + Vue.component('LxUpload', LxUpload) + Vue.component('LxFilePreview', LxFilePreview) //jeecgbiz Vue.component('JSelectDepart', JSelectDepart) diff --git a/src/views/eam/base/EamPrecisionParametersList.vue b/src/views/eam/base/EamPrecisionParametersList.vue new file mode 100644 index 0000000..b5df8ab --- /dev/null +++ b/src/views/eam/base/EamPrecisionParametersList.vue @@ -0,0 +1,170 @@ +<template> + <a-card :bordered="false"> + + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒犻櫎鏍囪"> + <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍙傛暟缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="queryParam.parameterCode"></a-input> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="妫�娴嬮」鐩�"> + <a-input placeholder="璇疯緭鍏ユ娴嬮」鐩�" v-model="queryParam.parameterName"></a-input> + </a-form-item> + </a-col> + </template> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> + + </a-row> + </a-form> + </div> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-button type="primary" icon="download" @click="handleExportXls('绮惧害鍙傛暟缁存姢')">瀵煎嚭</a-button> + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button type="primary" icon="import">瀵煎叆</a-button> + </a-upload> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + <!-- table鍖哄煙-end --> + + <!-- 琛ㄥ崟鍖哄煙 --> + <eamPrecisionParameters-modal ref="modalForm" @ok="modalFormOk"></eamPrecisionParameters-modal> + </a-card> +</template> + +<script> + import '@/assets/less/TableExpand.less' + import EamPrecisionParametersModal from './modules/EamPrecisionParametersModal' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + + export default { + name: "EamPrecisionParametersList", + mixins:[JeecgListMixin], + components: { + EamPrecisionParametersModal + }, + data () { + return { + description: '绮惧害鍙傛暟缁存姢绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title: '鍒犻櫎鏍囪', + align:"center", + dataIndex: 'delFlag' + }, + { + title: '鍙傛暟缂栫爜', + align:"center", + dataIndex: 'parameterCode' + }, + { + title: '妫�娴嬮」鐩�', + align:"center", + dataIndex: 'parameterName' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + scopedSlots: { customRender: 'action' }, + } + ], + url: { + list: "/eam/eamPrecisionParameters/list", + delete: "/eam/eamPrecisionParameters/delete", + deleteBatch: "/eam/eamPrecisionParameters/deleteBatch", + exportXlsUrl: "eam/eamPrecisionParameters/exportXls", + importExcelUrl: "eam/eamPrecisionParameters/importExcel", + }, + } + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/base/EamProcessParametersList.vue b/src/views/eam/base/EamProcessParametersList.vue new file mode 100644 index 0000000..7edfde9 --- /dev/null +++ b/src/views/eam/base/EamProcessParametersList.vue @@ -0,0 +1,190 @@ +<template> + <a-card :bordered="false"> + + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍒犻櫎鏍囪"> + <a-input placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�" v-model="queryParam.delFlag"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍙傛暟缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="queryParam.parameterCode"></a-input> + </a-form-item> + </a-col> + <template v-if="toggleSearchStatus"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍙傛暟鍚嶇О"> + <a-input placeholder="璇疯緭鍏ュ弬鏁板悕绉�" v-model="queryParam.parameterName"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鍙傛暟鍒嗙被"> + <a-input placeholder="璇疯緭鍏ュ弬鏁板垎绫�" v-model="queryParam.parameterCategory"></a-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="璁¢噺鍗曚綅"> + <a-input placeholder="璇疯緭鍏ヨ閲忓崟浣�" v-model="queryParam.parameterUnit"></a-input> + </a-form-item> + </a-col> + </template> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + <a @click="handleToggleSearch" style="margin-left: 8px"> + {{ toggleSearchStatus ? '鏀惰捣' : '灞曞紑' }} + <a-icon :type="toggleSearchStatus ? 'up' : 'down'"/> + </a> + </span> + </a-col> + + </a-row> + </a-form> + </div> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-button type="primary" icon="download" @click="handleExportXls('宸ュ簭鍙傛暟缁存姢')">瀵煎嚭</a-button> + <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> + <a-button type="primary" icon="import">瀵煎叆</a-button> + </a-upload> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + <!-- table鍖哄煙-end --> + + <!-- 琛ㄥ崟鍖哄煙 --> + <eamProcessParameters-modal ref="modalForm" @ok="modalFormOk"></eamProcessParameters-modal> + </a-card> +</template> + +<script> + import '@/assets/less/TableExpand.less' + import EamProcessParametersModal from './modules/EamProcessParametersModal' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + + export default { + name: "EamProcessParametersList", + mixins:[JeecgListMixin], + components: { + EamProcessParametersModal + }, + data () { + return { + description: '宸ュ簭鍙傛暟缁存姢绠$悊椤甸潰', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title: '鍒犻櫎鏍囪', + align:"center", + dataIndex: 'delFlag' + }, + { + title: '鍙傛暟缂栫爜', + align:"center", + dataIndex: 'parameterCode' + }, + { + title: '鍙傛暟鍚嶇О', + align:"center", + dataIndex: 'parameterName' + }, + { + title: '鍙傛暟鍒嗙被', + align:"center", + dataIndex: 'parameterCategory' + }, + { + title: '璁¢噺鍗曚綅', + align:"center", + dataIndex: 'parameterUnit' + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align:"center", + scopedSlots: { customRender: 'action' }, + } + ], + url: { + list: "/eam/eamProcessParameters/list", + delete: "/eam/eamProcessParameters/delete", + deleteBatch: "/eam/eamProcessParameters/deleteBatch", + exportXlsUrl: "eam/eamProcessParameters/exportXls", + importExcelUrl: "eam/eamProcessParameters/importExcel", + }, + } + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + } + }, + methods: { + + } + } +</script> +<style scoped> + @import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/base/EamSysFilesList.vue b/src/views/eam/base/EamSysFilesList.vue new file mode 100644 index 0000000..f1c6ae6 --- /dev/null +++ b/src/views/eam/base/EamSysFilesList.vue @@ -0,0 +1,204 @@ +<template> + <a-card :bordered="false"> + <!-- 鏌ヨ鍖哄煙 --> + <div class="table-page-search-wrapper"> + <a-form layout="inline" @keyup.enter.native="searchQuery"> + <a-row :gutter="24"> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <a-form-item label="鏂囦欢鍚嶇О"> + <j-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="queryParam.fileName"></j-input> + </a-form-item> + </a-col> + <a-col :xl="6" :lg="7" :md="8" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="info" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + + </a-row> + </a-form> + </div> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + <div class="table-operator"> + <a-button @click="handleAdd" type="primary" icon="plus">鏂板</a-button> + <a-dropdown v-if="selectedRowKeys.length > 0"> + <a-menu slot="overlay"> + <a-menu-item key="1" @click="batchDel"> + <a-icon type="delete" /> + 鍒犻櫎 + </a-menu-item> + </a-menu> + <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 + <a-icon type="down" /> + </a-button> + </a-dropdown> + </div> + + <!-- table鍖哄煙-begin --> + <div> + <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;"> + <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a + style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤� + <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a> + </div> + + <a-table + ref="table" + size="middle" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + class="j-table-force-nowrap" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}" + @change="handleTableChange"> + + <span slot="action" slot-scope="text, record"> + <a @click="handleEdit(record)">缂栬緫</a> + + <a-divider type="vertical" /> + <a-dropdown> + <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a> + <a-menu slot="overlay"> + <a-menu-item> + <a @click="handlePreview(record)">棰勮</a> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾涓嬭浇鏂囦欢鍚�?" @confirm="() => handleDownload(record)"> + <a>涓嬭浇</a> + </a-popconfirm> + </a-menu-item> + <a-menu-item> + <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)"> + <a>鍒犻櫎</a> + </a-popconfirm> + </a-menu-item> + </a-menu> + </a-dropdown> + </span> + + </a-table> + </div> + <!-- table鍖哄煙-end --> + + <!-- 琛ㄥ崟鍖哄煙 --> + <eamSysFiles-modal ref="modalForm" @ok="modalFormOk"></eamSysFiles-modal> + <lx-file-preview ref="lxFilePreview" :fileUrl="fileUrl"></lx-file-preview> + </a-card> +</template> + +<script> +import '@/assets/less/TableExpand.less' +import EamSysFilesModal from './modules/EamSysFilesModal' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' +import { downFile } from '@/api/manage'; + +export default { + name: 'EamSysFilesList', + mixins: [JeecgListMixin], + components: { + EamSysFilesModal + }, + data() { + return { + description: '璁惧闄勪欢绠$悊绠$悊椤甸潰', + fileUrl: '', + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key: 'rowIndex', + width: 60, + align: 'center', + customRender: function(t, r, index) { + return parseInt(index) + 1 + } + }, + { + title: '鏂囦欢鍔犲瘑鍚�', + align: 'center', + dataIndex: 'fileEncodeName', + ellipsis: true, + }, + { + title: '鏂囦欢鍚嶇О', + align: 'center', + dataIndex: 'fileName', + ellipsis: true, + }, + { + title: '鏂囦欢璺緞', + align: 'center', + dataIndex: 'filePath', + ellipsis: true, + }, + { + title: '鏂囦欢鍚庣紑鍚�', + align: 'center', + dataIndex: 'fileSuffix' + }, + { + title: '鏂囦欢澶у皬', + align: 'center', + dataIndex: 'fileSize' + }, + { + title: '鎻忚堪', + align: 'center', + dataIndex: 'description', + ellipsis: true, + }, + { + title: '鎿嶄綔', + dataIndex: 'action', + align: 'center', + scopedSlots: { customRender: 'action' } + } + ], + url: { + list: '/eam/sysFiles/list', + delete: '/eam/sysFiles/delete', + deleteBatch: '/eam/sysFiles/deleteBatch', + download: '/eam/sysFiles/downloadFile', + } + } + }, + computed: {}, + methods: { + handleDownload(record) { + downFile(this.url.download, { id: record.id }).then((res) => { + if (!res) { + this.$message.warning('鏂囦欢涓嬭浇澶辫触') + return + } else { + let fileName = record.fileName; + if (typeof window.navigator.msSaveBlob !== 'undefined') { + window.navigator.msSaveBlob(new Blob([res]), fileName); + } else { + let url = window.URL.createObjectURL(new Blob([res])); + let link = document.createElement('a'); + link.style.display = 'none'; + link.href = url; + link.setAttribute('download', fileName); + document.body.appendChild(link); + link.click() + document.body.removeChild(link) //涓嬭浇瀹屾垚绉婚櫎鍏冪礌 + window.URL.revokeObjectURL(url) //閲婃斁鎺塨lob瀵硅薄 + } + } + }) + }, + handlePreview: function (record) { + this.$refs.lxFilePreview.preview(record.filePath); + }, + } +} +</script> +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/eam/base/modules/EamPrecisionParametersModal.vue b/src/views/eam/base/modules/EamPrecisionParametersModal.vue new file mode 100644 index 0000000..4ce96f6 --- /dev/null +++ b/src/views/eam/base/modules/EamPrecisionParametersModal.vue @@ -0,0 +1,117 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪"> + <a-input-number v-model="model.delFlag"/> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterCode" label="鍙傛暟缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="model.parameterCode" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterName" label="妫�娴嬮」鐩�"> + <a-input placeholder="璇疯緭鍏ユ娴嬮」鐩�" v-model="model.parameterName" /> + </a-form-model-item> + + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> + import { httpAction } from '@/api/manage' + import moment from "moment" + + export default { + name: "EamPrecisionParametersModal", + data () { + return { + title:"鎿嶄綔", + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + + confirmLoading: false, + validatorRules:{ + }, + url: { + add: "/eam/eamPrecisionParameters/add", + edit: "/eam/eamPrecisionParameters/edit", + }, + } + }, + created () { + }, + methods: { + add () { + //鍒濆鍖栭粯璁ゅ�� + this.edit({}); + }, + edit (record) { + this.model = Object.assign({}, record); + this.visible = true; + }, + close () { + this.$emit('close'); + this.visible = false; + this.$refs.form.clearValidate(); + }, + handleOk () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + let httpurl = ''; + let method = ''; + if(!this.model.id){ + httpurl+=this.url.add; + method = 'post'; + }else{ + httpurl+=this.url.edit; + method = 'put'; + } + httpAction(httpurl,this.model,method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + that.close(); + }) + }else{ + return false; + } + }) + }, + handleCancel () { + this.close() + }, + + + } + } +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file diff --git a/src/views/eam/base/modules/EamProcessParametersModal.vue b/src/views/eam/base/modules/EamProcessParametersModal.vue new file mode 100644 index 0000000..de2031a --- /dev/null +++ b/src/views/eam/base/modules/EamProcessParametersModal.vue @@ -0,0 +1,123 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪"> + <a-input-number v-model="model.delFlag"/> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterCode" label="鍙傛暟缂栫爜"> + <a-input placeholder="璇疯緭鍏ュ弬鏁扮紪鐮�" v-model="model.parameterCode" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterName" label="鍙傛暟鍚嶇О"> + <a-input placeholder="璇疯緭鍏ュ弬鏁板悕绉�" v-model="model.parameterName" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterCategory" label="鍙傛暟鍒嗙被"> + <a-input placeholder="璇疯緭鍏ュ弬鏁板垎绫�" v-model="model.parameterCategory" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="parameterUnit" label="璁¢噺鍗曚綅"> + <a-input placeholder="璇疯緭鍏ヨ閲忓崟浣�" v-model="model.parameterUnit" /> + </a-form-model-item> + + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> + import { httpAction } from '@/api/manage' + import moment from "moment" + + export default { + name: "EamProcessParametersModal", + data () { + return { + title:"鎿嶄綔", + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 }, + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 }, + }, + + confirmLoading: false, + validatorRules:{ + }, + url: { + add: "/eam/eamProcessParameters/add", + edit: "/eam/eamProcessParameters/edit", + }, + } + }, + created () { + }, + methods: { + add () { + //鍒濆鍖栭粯璁ゅ�� + this.edit({}); + }, + edit (record) { + this.model = Object.assign({}, record); + this.visible = true; + }, + close () { + this.$emit('close'); + this.visible = false; + this.$refs.form.clearValidate(); + }, + handleOk () { + const that = this; + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true; + let httpurl = ''; + let method = ''; + if(!this.model.id){ + httpurl+=this.url.add; + method = 'post'; + }else{ + httpurl+=this.url.edit; + method = 'put'; + } + httpAction(httpurl,this.model,method).then((res)=>{ + if(res.success){ + that.$message.success(res.message); + that.$emit('ok'); + }else{ + that.$message.warning(res.message); + } + }).finally(() => { + that.confirmLoading = false; + that.close(); + }) + }else{ + return false; + } + }) + }, + handleCancel () { + this.close() + }, + + + } + } +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file diff --git a/src/views/eam/base/modules/EamSysFilesModal.vue b/src/views/eam/base/modules/EamSysFilesModal.vue new file mode 100644 index 0000000..55c321f --- /dev/null +++ b/src/views/eam/base/modules/EamSysFilesModal.vue @@ -0,0 +1,129 @@ +<template> + <j-modal + :title="title" + :width="800" + :visible="visible" + :confirmLoading="confirmLoading" + switchFullscreen + @ok="handleOk" + @cancel="handleCancel" + cancelText="鍏抽棴"> + + <a-spin :spinning="confirmLoading"> + <a-form-model ref="form" :model="model" :rules="validatorRules"> + <a-form-model-item + label="涓婁紶" + :labelCol="labelCol" + :wrapperCol="wrapperCol" + v-if="!editable" + prop="fileList"> + <lx-upload :returnUrl="false" + :isMultiple="false" + v-model="model.fileList" + biz="test"> + </lx-upload> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="fileName" label="鏂囦欢鍚嶇О" v-if="editable"> + <a-input placeholder="璇疯緭鍏ユ枃浠跺悕绉�" v-model="model.fileName" /> + </a-form-model-item> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="description" label="鎻忚堪"> + <a-textarea placeholder="璇疯緭鍏ユ弿杩�" v-model="model.description" /> + </a-form-model-item> + </a-form-model> + </a-spin> + </j-modal> +</template> + +<script> +import { httpAction } from '@/api/manage' + +export default { + name: 'EamSysFilesModal', + data() { + return { + title: '鎿嶄綔', + visible: false, + model: {}, + labelCol: { + xs: { span: 24 }, + sm: { span: 5 } + }, + wrapperCol: { + xs: { span: 24 }, + sm: { span: 16 } + }, + + confirmLoading: false, + validatorRules: { + fileName: [ + { required: true, message: '璇疯緭鍏ユ枃浠跺悕绉�!' } + ] + }, + url: { + add: '/eam/sysFiles/add', + edit: '/eam/sysFiles/edit', + }, + editable: false, + } + }, + created() { + }, + methods: { + add() { + this.editable = false; + //鍒濆鍖栭粯璁ゅ�� + this.model = {}; + this.visible = true + }, + edit(record) { + this.editable = true; + this.model = Object.assign({}, record) + this.visible = true + }, + close() { + this.$emit('close') + this.visible = false + this.$refs.form.clearValidate() + }, + handleOk() { + const that = this + // 瑙﹀彂琛ㄥ崟楠岃瘉 + this.$refs.form.validate(valid => { + if (valid) { + that.confirmLoading = true + let httpurl = '' + let method = '' + if (!this.model.id) { + httpurl += this.url.add + method = 'post' + } else { + httpurl += this.url.edit + method = 'put' + } + httpAction(httpurl, this.model, method).then((res) => { + if (res.success) { + that.$message.success(res.message) + that.$emit('ok') + that.close() + } else { + that.$message.warning(res.message) + } + }).finally(() => { + that.confirmLoading = false + }) + } else { + return false + } + }) + }, + handleCancel() { + this.close() + }, + + } +} +</script> + +<style lang="less" scoped> + +</style> \ No newline at end of file -- Gitblit v1.9.3