Browse Source

2024.9.3 一、加工中心上传SOP(第一版)

二、生产订单-生产通知单(第一版)
master
yuejiayang 1 year ago
parent
commit
c0dd7eacfb
  1. 5
      src/api/shopOrder/shopOrder.js
  2. 3
      src/views/modules/base/workCenter.vue
  3. 494
      src/views/modules/shopOrder/shopOrder/shopNotice.vue

5
src/api/shopOrder/shopOrder.js

@ -95,6 +95,9 @@ export const deleteShopOrderToolData = data => createAPI('/shopOrder/deleteShopO
// 更改生产工单工艺路线 // 更改生产工单工艺路线
export const shopOrderUpdateRoutingViaRev = data => createAPI('/shopOrder/shopOrderUpdateRoutingViaRev', 'post', data) export const shopOrderUpdateRoutingViaRev = data => createAPI('/shopOrder/shopOrderUpdateRoutingViaRev', 'post', data)
// 查询工单的工具信息
// 查询生产通知单信息
export const shopNoticeSearch = data => createAPI('/shopOrder/shopNoticeSearch', 'post', data) export const shopNoticeSearch = data => createAPI('/shopOrder/shopNoticeSearch', 'post', data)
// 获取文件
export const downLoadObjectFile = data => createAPI(`/shopOrder/downLoadObjectFile?id=`+data.id,'post',777)

3
src/views/modules/base/workCenter.vue

@ -365,11 +365,12 @@
<el-form-item label=""> <el-form-item label="">
<a href="javascript:void(0);" @click="triggerUpload">SOP文件(点击上传)</a> <a href="javascript:void(0);" @click="triggerUpload">SOP文件(点击上传)</a>
<tr></tr> <tr></tr>
<el-input v-model="this.fileName" readonly placeholder="文件名称" style="width: 391px"></el-input>
<el-input v-model="this.fileName" readonly placeholder="文件名称(仅支持PDF以及图片文件!)" style="width: 391px"></el-input>
<el-button type="primary" @click="uploadSOPSave">保存</el-button> <el-button type="primary" @click="uploadSOPSave">保存</el-button>
<el-upload class="custom-upload" :file-list="fileList" <el-upload class="custom-upload" :file-list="fileList"
action="javascript:void(0);" ref="uploadFile" action="javascript:void(0);" ref="uploadFile"
:on-change="onChange" :on-close="closeFileUpdate" :on-change="onChange" :on-close="closeFileUpdate"
accept=".pdf,image/*"
multiple :auto-upload="false" multiple :auto-upload="false"
style="text-align: left;margin-top: 0px;margin-left: 6px;display: none;"> style="text-align: left;margin-top: 0px;margin-left: 6px;display: none;">
</el-upload> </el-upload>

494
src/views/modules/shopOrder/shopOrder/shopNotice.vue

@ -25,80 +25,81 @@
<legend>产品SOP信息</legend> <legend>产品SOP信息</legend>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="客户" prop="uCustomer"> <el-form-item label="客户" prop="uCustomer">
<el-input v-model="modelData.uCustomer" style="width: 310px"></el-input>
<el-input v-model="modelData.uCustomer" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="机种" prop="uModel" style="margin-left: 15px"> <el-form-item label="机种" prop="uModel" style="margin-left: 15px">
<el-input v-model="modelData.uModel" style="width: 141px"></el-input>
<el-input v-model="modelData.uModel" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="颜色标识" prop="uColorID" style="margin-left: 15px"> <el-form-item label="颜色标识" prop="uColorID" style="margin-left: 15px">
<el-input v-model="modelData.uColorID" style="width: 141px"></el-input>
<el-input v-model="modelData.uColorID" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="生产通知单" prop="docEntry" style="margin-left: 15px"> <el-form-item label="生产通知单" prop="docEntry" style="margin-left: 15px">
<el-input v-model="modelData.docEntry" style="width: 141px"></el-input>
<el-input v-model="modelData.docEntry" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="日期" prop="postDate" style="margin-left: 15px"> <el-form-item label="日期" prop="postDate" style="margin-left: 15px">
<el-input v-model="modelData.postDate" style="width: 141px"></el-input>
<el-input v-model="modelData.postDate" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="客户料号" prop="uPn"> <el-form-item label="客户料号" prop="uPn">
<el-input v-model="modelData.uPn" style="width: 310px"></el-input>
<el-input v-model="modelData.uPn" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="二阶料号" prop="uPn2" style="margin-left: 15px"> <el-form-item label="二阶料号" prop="uPn2" style="margin-left: 15px">
<el-input v-model="modelData.uPn2" style="width: 141px"></el-input>
<el-input v-model="modelData.uPn2" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="样品卡号" prop="uSmplCard" style="margin-left: 15px"> <el-form-item label="样品卡号" prop="uSmplCard" style="margin-left: 15px">
<el-input v-model="modelData.uSmplCard" style="width: 141px"></el-input>
<el-input v-model="modelData.uSmplCard" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="交期" prop="dueDate" style="margin-left: 15px"> <el-form-item label="交期" prop="dueDate" style="margin-left: 15px">
<el-input v-model="modelData.dueDate" style="width: 141px"></el-input>
<el-input v-model="modelData.dueDate" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="库存数量" prop="onHand" style="margin-left: 15px"> <el-form-item label="库存数量" prop="onHand" style="margin-left: 15px">
<el-input v-model="modelData.onHand" style="width: 141px"></el-input>
<el-input v-model="modelData.onHand" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="料号" prop="itemCode"> <el-form-item label="料号" prop="itemCode">
<el-input v-model="modelData.itemCode" style="width: 310px"></el-input>
<el-input v-model="modelData.itemCode" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="计划数量" prop="plannedQty" style="margin-left: 15px"> <el-form-item label="计划数量" prop="plannedQty" style="margin-left: 15px">
<el-input v-model="modelData.plannedQty + modelData.comments + modelData.uPackunit" style="width: 310px"></el-input>
<el-input v-model="modelData.plannedQty + modelData.comments + modelData.uPackunit" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="制程" prop="uProcess" style="margin-left: 15px"> <el-form-item label="制程" prop="uProcess" style="margin-left: 15px">
<el-input v-model="modelData.uProcess" style="width: 310px"></el-input>
<el-input v-model="modelData.uProcess" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="打样原因" prop="uStatus"> <el-form-item label="打样原因" prop="uStatus">
<el-input v-model="modelData.uStatus" style="width: 310px"></el-input>
<el-input v-model="modelData.uStatus" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="送样数量" prop="uBhbum" style="margin-left: 15px"> <el-form-item label="送样数量" prop="uBhbum" style="margin-left: 15px">
<el-input v-model="modelData.uBhbum" style="width: 141px"></el-input>
<el-input v-model="modelData.uBhbum" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="尺寸" prop="uDimen" style="margin-left: 15px"> <el-form-item label="尺寸" prop="uDimen" style="margin-left: 15px">
<el-input v-model="modelData.uDimen" style="width: 141px"></el-input>
<el-input v-model="modelData.uDimen" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="跳距" prop="docEntry" style="margin-left: 15px"> <el-form-item label="跳距" prop="docEntry" style="margin-left: 15px">
<el-input v-model="modelData.docEntry" style="width: 141px"></el-input>
<el-input v-model="modelData.docEntry" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="包装方式" prop="uPackage" style="margin-left: 15px"> <el-form-item label="包装方式" prop="uPackage" style="margin-left: 15px">
<el-input v-model="modelData.uPackage" style="width: 141px"></el-input>
<el-input v-model="modelData.uPackage" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="物料描述" prop="itemName"> <el-form-item label="物料描述" prop="itemName">
<el-input v-model="modelData.itemName" style="width: 480px"></el-input>
<el-input v-model="modelData.itemName" readonly style="width: 480px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="R角" prop="uRangle" style="margin-left: 15px"> <el-form-item label="R角" prop="uRangle" style="margin-left: 15px">
<el-input v-model="modelData.uRangle" style="width: 141px"></el-input>
<el-input v-model="modelData.uRangle" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="C角" prop="uCangle" style="margin-left: 15px"> <el-form-item label="C角" prop="uCangle" style="margin-left: 15px">
<el-input v-model="modelData.uCangle" style="width: 141px"></el-input>
<el-input v-model="modelData.uCangle" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="注意事项" prop="uAttn"> <el-form-item label="注意事项" prop="uAttn">
<el-input <el-input
readonly
type="textarea" type="textarea"
v-model="modelData.uAttn" v-model="modelData.uAttn"
style="width: 480px" style="width: 480px"
@ -106,13 +107,14 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="上下间距" prop="uUddist" style="margin-left: 15px"> <el-form-item label="上下间距" prop="uUddist" style="margin-left: 15px">
<el-input v-model="modelData.uUddist" style="width: 141px"></el-input>
<el-input v-model="modelData.uUddist" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="左右间距" prop="uLrdist" style="margin-left: 15px"> <el-form-item label="左右间距" prop="uLrdist" style="margin-left: 15px">
<el-input v-model="modelData.uLrdist" style="width: 141px"></el-input>
<el-input v-model="modelData.uLrdist" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="其他保证标识要求" prop="uPackDesp" style="margin-left: 15px"> <el-form-item label="其他保证标识要求" prop="uPackDesp" style="margin-left: 15px">
<el-input <el-input
readonly
type="textarea" type="textarea"
v-model="modelData.uPackDesp" v-model="modelData.uPackDesp"
style="width: 140px" style="width: 140px"
@ -122,59 +124,59 @@
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;margin-left: 509px"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;margin-left: 509px">
<el-form-item label="边距" prop="uEdge"> <el-form-item label="边距" prop="uEdge">
<el-input v-model="modelData.uEdge" style="width: 141px;"></el-input>
<el-input v-model="modelData.uEdge" readonly style="width: 141px;"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="虚线" prop="uDotline" style="margin-left: 15px"> <el-form-item label="虚线" prop="uDotline" style="margin-left: 15px">
<el-input v-model="modelData.uDotline" style="width: 141px"></el-input>
<el-input v-model="modelData.uDotline" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="SIP" prop="uSip"> <el-form-item label="SIP" prop="uSip">
<el-input v-model="modelData.uSip" style="width: 310px"></el-input>
<el-input v-model="modelData.uSip" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="样品卡" prop="uYangpinno" style="margin-left: 186px"> <el-form-item label="样品卡" prop="uYangpinno" style="margin-left: 186px">
<el-input v-model="modelData.uYangpinno" style="width: 310px"></el-input>
<el-input v-model="modelData.uYangpinno" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="检查记录表" prop="uChSheet"> <el-form-item label="检查记录表" prop="uChSheet">
<el-input v-model="modelData.uChSheet" style="width: 310px"></el-input>
<el-input v-model="modelData.uChSheet" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="刀模编号" prop="uMold"> <el-form-item label="刀模编号" prop="uMold">
<el-input v-model="modelData.uMold" style="width: 310px"></el-input>
<el-input v-model="modelData.uMold" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="刀模仓位" prop="uMoldNo" style="margin-left: 15px"> <el-form-item label="刀模仓位" prop="uMoldNo" style="margin-left: 15px">
<el-input v-model="modelData.uMoldNo" style="width: 141px"></el-input>
<el-input v-model="modelData.uMoldNo" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="刀模编号2" prop="uMold2" style="margin-left: 15px"> <el-form-item label="刀模编号2" prop="uMold2" style="margin-left: 15px">
<el-input v-model="modelData.uMold2" style="width: 310px"></el-input>
<el-input v-model="modelData.uMold2" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="刀模2仓位" prop="uMoldNo2" style="margin-left: 15px"> <el-form-item label="刀模2仓位" prop="uMoldNo2" style="margin-left: 15px">
<el-input v-model="modelData.uMoldNo2" style="width: 141px"></el-input>
<el-input v-model="modelData.uMoldNo2" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="菲林编号" prop="uFilm"> <el-form-item label="菲林编号" prop="uFilm">
<el-input v-model="modelData.uFilm" style="width: 310px"></el-input>
<el-input v-model="modelData.uFilm" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="网版编号" prop="uPlatenum" style="margin-left: 15px"> <el-form-item label="网版编号" prop="uPlatenum" style="margin-left: 15px">
<el-input v-model="modelData.uPlatenum" style="width: 141px"></el-input>
<el-input v-model="modelData.uPlatenum" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="网版目数" prop="uPlate" style="margin-left: 15px"> <el-form-item label="网版目数" prop="uPlate" style="margin-left: 15px">
<el-input v-model="modelData.uPlate" style="width: 141px"></el-input>
<el-input v-model="modelData.uPlate" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="模数" prop="uMoldQty" style="margin-left: 184px"> <el-form-item label="模数" prop="uMoldQty" style="margin-left: 184px">
<el-input v-model="modelData.uMoldQty" style="width: 141px"></el-input>
<el-input v-model="modelData.uMoldQty" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;">
<el-form-item label="油墨型号" prop="uColor"> <el-form-item label="油墨型号" prop="uColor">
<el-input v-model="modelData.uColor" style="width: 310px"></el-input>
<el-input v-model="modelData.uColor" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="UL型号" prop="uUl" style="margin-left: 15px"> <el-form-item label="UL型号" prop="uUl" style="margin-left: 15px">
<el-input v-model="modelData.uUl" style="width: 310px"></el-input>
<el-input v-model="modelData.uUl" readonly style="width: 310px"></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</fieldset> </fieldset>
@ -193,6 +195,7 @@
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;width: 100%;min-width: 1020px"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 0px;width: 100%;min-width: 1020px">
<el-form-item label="ECN#" prop="uEcn"> <el-form-item label="ECN#" prop="uEcn">
<el-input <el-input
readonly
type="textarea" type="textarea"
v-model="modelData.uEcn" v-model="modelData.uEcn"
style="width: 310px" style="width: 310px"
@ -201,6 +204,7 @@
</el-form-item> </el-form-item>
<el-form-item label="客诉履历" prop="uAttn2"> <el-form-item label="客诉履历" prop="uAttn2">
<el-input <el-input
readonly
type="textarea" type="textarea"
v-model="modelData.uAttn2" v-model="modelData.uAttn2"
style="width: 310px" style="width: 310px"
@ -208,24 +212,27 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="检查难度" prop="uCheck"> <el-form-item label="检查难度" prop="uCheck">
<el-input v-model="modelData.uCheck" style="width: 141px"></el-input>
<el-input v-model="modelData.uCheck" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="检查时间" prop="uCheckt"> <el-form-item label="检查时间" prop="uCheckt">
<el-input v-model="modelData.uCheckt" style="width: 141px"></el-input>
<el-input v-model="modelData.uCheckt" readonly style="width: 141px"></el-input>
</el-form-item> </el-form-item>
<el-checkbox <el-checkbox
disabled
v-model="modelData.uAttach1" v-model="modelData.uAttach1"
style="margin-left: 10px;margin-top: 5px" style="margin-left: 10px;margin-top: 5px"
>附件</el-checkbox> >附件</el-checkbox>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: -7px;margin-left: 955px"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: -7px;margin-left: 955px">
<el-checkbox <el-checkbox
disabled
v-model="modelData.uAttach2" v-model="modelData.uAttach2"
style="margin-left: 10px" style="margin-left: 10px"
>图纸</el-checkbox> >图纸</el-checkbox>
</el-form> </el-form>
<el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 10px;margin-left: 955px"> <el-form :inline="true" :model="modelData" label-position="top" label-width="100px" style="margin-top: 10px;margin-left: 955px">
<el-checkbox <el-checkbox
disabled
v-model="modelData.uAttach3" v-model="modelData.uAttach3"
style="margin-left: 10px" style="margin-left: 10px"
>刀线</el-checkbox> >刀线</el-checkbox>
@ -253,20 +260,305 @@
style="width: 100px; height: 80px"/></span> style="width: 100px; height: 80px"/></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column
label="操作"
align="center"
width="100">
<template slot-scope="scope">
<!-- <a type="primary" @click="openDialog(scope.row)">查看</a>-->
<a
type="text" size="small"
@click="viewSopFile(scope.row)"
>查看附件</a>
<a type="text" size="small" @click="downloadFile(scope.row)">下载</a>
</template>
</el-table-column>
</el-table> </el-table>
<!-- 弹窗 -->
<el-dialog title="附件内容"
:modal="false"
v-dialogDrag
:close-on-click-modal="false"
:visible.sync="dialogVisible" width="427px"
style="margin-top: -91px;">
<!-- 弹窗内容可以根据需求放置附件内容 -->
<div>
<!-- 示例显示 PDF 文件 -->
<!-- <embed :src="this.pdfUrl" type="application/pdf" width="100%" height="490px">-->
<iframe :src="this.pdfUrl" frameborder="0" width="100%" :height="height"></iframe>
</div>
<!-- 弹窗的底部操作 -->
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import {shopNoticeSearch} from "../../../../api/shopOrder/shopOrder";
import {downLoadObjectFile, shopNoticeSearch} from "../../../../api/shopOrder/shopOrder";
import Vue from 'vue'
Vue.directive('dialogDrag', {
bind(el, binding, vnode, oldVnode) {
//
let minWidth = 400;
let minHeight = 300;
//
let isFullScreen = false;
//
let nowWidth = 0;
let nowHight = 0;
//
let nowMarginTop = 0;
//
const dialogHeaderEl = el.querySelector('.el-dialog__header');
//
const dragDom = el.querySelector('.el-dialog');
//overflow autodialog
dragDom.style.overflow = "auto";
//
dialogHeaderEl.onselectstart = new Function("return false");
//cursor
dialogHeaderEl.style.cursor = 'move';
// ie dom.currentStyle window.getComputedStyle(dom, null);
const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null);
let moveDown = (e) => {
//
const disX = e.clientX - dialogHeaderEl.offsetLeft;
const disY = e.clientY - dialogHeaderEl.offsetTop;
// px
let styL, styT;
// ie 50% px
if (sty.left.includes('%')) {
styL = +document.body.clientWidth * (+sty.left.replace(/%/g, '') / 100);
styT = +document.body.clientHeight * (+sty.top.replace(/%/g, '') / 100);
} else {
styL = +sty.left.replace(/px/g, '');
styT = +sty.top.replace(/px/g, '');
};
document.onmousemove = function (e) {
//
const l = e.clientX - disX;
const t = e.clientY - disY;
//
dragDom.style.left = `${l + styL}px`;
dragDom.style.top = `${t + styT}px`;
//
//binding.value({x:e.pageX,y:e.pageY})
};
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
dialogHeaderEl.onmousedown = moveDown;
//()
dialogHeaderEl.ondblclick = (e) => {
if (isFullScreen === false) {
nowHight = dragDom.clientHeight;
nowWidth = dragDom.clientWidth;
nowMarginTop = dragDom.style.marginTop;
dragDom.style.left = 0;
dragDom.style.top = 0;
dragDom.style.height = "82VH";
dragDom.style.width = "100VW";
dragDom.style.marginTop = 33;
isFullScreen = true;
dialogHeaderEl.style.cursor = 'initial';
dialogHeaderEl.onmousedown = null;
} else {
dragDom.style.height = "auto";
dragDom.style.width = nowWidth + 'px';
dragDom.style.marginTop = nowMarginTop;
isFullScreen = false;
dialogHeaderEl.style.cursor = 'move';
dialogHeaderEl.onmousedown = moveDown;
}
}
//()
let resizeEl = document.createElement("div");
dragDom.appendChild(resizeEl);
//10-10px
resizeEl.style.cursor = 'se-resize';
resizeEl.style.position = 'absolute';
resizeEl.style.height = '10px';
resizeEl.style.width = '10px';
resizeEl.style.right = '0px';
resizeEl.style.bottom = '0px';
resizeEl.style.zIndex = '99';
//
resizeEl.onmousedown = (e) => {
// x
let clientX = e.clientX;
//
let disX = e.clientX - resizeEl.offsetLeft;
let disY = e.clientY - resizeEl.offsetTop;
document.onmousemove = function (e) {
e.preventDefault(); //
//
let x = e.clientX - disX + (e.clientX - clientX);// elementUIdialog
let y = e.clientY - disY;
//
dragDom.style.width = x > minWidth ? `${x}px` : minWidth + 'px';
dragDom.style.height = y > minHeight ? `${y}px` : minHeight + 'px';
};
//
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
//()
let resizeElR = document.createElement("div");
dragDom.appendChild(resizeElR);
//10-10px
resizeElR.style.cursor = 'w-resize';
resizeElR.style.position = 'absolute';
resizeElR.style.height = '100%';
resizeElR.style.width = '10px';
resizeElR.style.right = '0px';
resizeElR.style.top = '0px';
//
resizeElR.onmousedown = (e) => {
let elW = dragDom.clientWidth;
let EloffsetLeft = dragDom.offsetLeft;
// x
let clientX = e.clientX;
document.onmousemove = function (e) {
e.preventDefault(); //
//
if (clientX > EloffsetLeft + elW - 10 && clientX < EloffsetLeft + elW) {
//
if (clientX > e.clientX) {
if (dragDom.clientWidth < minWidth) {
} else {
dragDom.style.width = elW - (clientX - e.clientX) * 2 + 'px';
}
}
//
if (clientX < e.clientX) {
dragDom.style.width = elW + (e.clientX - clientX) * 2 + 'px';
}
}
};
//
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
//()
let resizeElL = document.createElement("div");
dragDom.appendChild(resizeElL);
//10-10px
resizeElL.style.cursor = 'w-resize';
resizeElL.style.position = 'absolute';
resizeElL.style.height = '100%';
resizeElL.style.width = '10px';
resizeElL.style.left = '0px';
resizeElL.style.top = '0px';
//
resizeElL.onmousedown = (e) => {
let elW = dragDom.clientWidth;
let EloffsetLeft = dragDom.offsetLeft;
// x
let clientX = e.clientX;
document.onmousemove = function (e) {
e.preventDefault(); //
//
if (clientX > EloffsetLeft && clientX < EloffsetLeft + 10) {
//
if (clientX > e.clientX) {
dragDom.style.width = elW + (clientX - e.clientX) * 2 + 'px';
}
//
if (clientX < e.clientX) {
if (dragDom.clientWidth < minWidth) {
} else {
dragDom.style.width = elW - (e.clientX - clientX) * 2 + 'px';
}
}
}
};
//
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
// ()
let resizeElB = document.createElement("div");
dragDom.appendChild(resizeElB);
//10-10px
resizeElB.style.cursor = 'n-resize';
resizeElB.style.position = 'absolute';
resizeElB.style.height = '10px';
resizeElB.style.width = '100%';
resizeElB.style.left = '0px';
resizeElB.style.bottom = '0px';
//
resizeElB.onmousedown = (e) => {
let EloffsetTop = dragDom.offsetTop;
let ELscrollTop = el.scrollTop;
let clientY = e.clientY;
let elH = dragDom.clientHeight;
document.onmousemove = function (e) {
e.preventDefault(); //
//
if (ELscrollTop + clientY > EloffsetTop + elH - 20 && ELscrollTop + clientY < EloffsetTop + elH) {
//
if (clientY > e.clientY) {
if (dragDom.clientHeight < minHeight) {
} else {
dragDom.style.height = elH - (clientY - e.clientY) * 2 + 'px';
}
}
//
if (clientY < e.clientY) {
dragDom.style.height = elH + (e.clientY - clientY) * 2 + 'px';
}
}
};
//
document.onmouseup = function (e) {
document.onmousemove = null;
document.onmouseup = null;
};
}
}
})
export default { export default {
data() { data() {
return { return {
height: 200, height: 200,
fileURL: '',
pdfUrl: '',
dataList: [], dataList: [],
sopFileList: [], sopFileList: [],
dialogVisible: false, //
searchData: { searchData: {
site: this.$store.state.user.site, site: this.$store.state.user.site,
userName: this.$store.state.user.name, userName: this.$store.state.user.name,
@ -543,7 +835,121 @@ export default {
}) })
} }
}) })
}
},
openDialog(row) {
let image = ['jpg', 'jpeg', 'png', 'gif', 'bmp']
let pdf = ['pdf']
let type = ''
row.fileType = row.fileSuffix
if (image.includes(row.fileType.toLowerCase())) {
this.pdfUrl = '/file/' + row.newFileName
}
else if (pdf.includes(row.fileType.toLowerCase())) {
this.pdfUrl = '/file/' + row.newFileName
}
else {
this.$message({
message: '不支持的文件类型',
type: 'warning'
})
return
}
this.dialogVisible = true; //
},
//
viewSopFile(row) {
//
let image = ['jpg', 'jpeg', 'png', 'gif', 'bmp']
let video = ['mp4', 'avi', 'mov', 'wmv', 'flv']
let office = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx']
let txt = ['txt']
let type = ''
let pdf = ['pdf']
row.fileType = row.fileType
if (image.includes(row.fileType.toLowerCase())) {
type = 'image/' + row.fileType
downLoadObjectFile(row).then(({data}) => {
const blob = new Blob([data], { type: type });
// URL
const fileURL = URL.createObjectURL(blob);
//
const newTab = window.open(fileURL, '_blank')
})
}
else if (video.includes(row.fileType.toLowerCase())) {
type = 'video/' + row.fileType
downLoadObjectFile(row).then(({data}) => {
const blob = new Blob([data], { type: type });
// URL
const fileURL = URL.createObjectURL(blob);
//
const newTab = window.open(fileURL, '_blank')
})
}
else if (txt.includes(row.fileType.toLowerCase())) {
type = 'text/plain'
downLoadObjectFile(row).then(({data}) => {
const blob = new Blob([data], { type: type });
// URL
const fileURL = URL.createObjectURL(blob);
//
const newTab = window.open(fileURL, '_blank')
})
}
else if (office.includes(row.fileType.toLowerCase())) {
if (row.fileType.toLowerCase() === 'doc' || row.fileType.toLowerCase() === 'docx') {
type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
} else if (row.fileType.toLowerCase() === 'ppt' || row.fileType.toLowerCase() === 'pptx') {
type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
} else {
type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}
downLoadObjectFile(row).then(({data}) => {
const blob = new Blob([data], { type: type });
// URL
const fileURL = URL.createObjectURL(blob);
//
const newTab = window.open(fileURL, '_blank')
})
}
else if (pdf.includes(row.fileType.toLowerCase())) {
type = 'application/pdf'
downLoadObjectFile(row).then(({data}) => {
const blob = new Blob([data], { type: type });
// URL
const fileURL = URL.createObjectURL(blob);
//
const newTab = window.open(fileURL, '_blank')
})
}
else {
this.$message({
message: '不支持的文件类型',
type: 'warning'
})
}
},
//
downloadFile (row) {
downLoadObjectFile(row)
.then(({data}) => {
//
const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
//
const fileName = row.fileName
// a
const linkNode = document.createElement('a')
linkNode.download = fileName // adownload
linkNode.style.display = 'none'
linkNode.href = URL.createObjectURL(blob) // Blob URL
document.body.appendChild(linkNode)
linkNode.click() //
URL.revokeObjectURL(linkNode.href) // URL
document.body.removeChild(linkNode)
})
},
} }
} }
@ -554,4 +960,8 @@ export default {
text-align: right; text-align: right;
} }
/* 自定义 Dialog 样式使其可拖动 */
.el-dialog__header {
cursor: move;
}
</style> </style>
Loading…
Cancel
Save