You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
udi-spms-vue/src/views/collect/relCode/relCode.vue

531 lines
19 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div>
<el-card class="el-card">
<el-form :model="filterQuery" class="query-form" label-width="100px" >
<el-row>
<el-col :span="12">
<el-form-item prop="code" label="扫码录入:">
<el-input
id="inputer"
@focus="getInputFocus($event)"
@keypress.enter.native="enterKey($event)"
ref="inputRef"
style="ime-mode: disabled"
type="tel"
placeholder="请点击输入框进行扫码设置或者扫码录入"
v-model="filterQuery.keyWords"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row style=" display:flex; flex-wrap: wrap; ">
<template v-for="(item, index) in queryList">
<div v-if="showSearch || item.isImport">
<el-form-item
v-if="item.columnType == 'input' && item.columnName !='queryName' && executeEval(row,item.expression,true)"
:label="item.columnDesc+`:`" :key="item.id">
<el-input
v-model="filterQuery[item.columnName]"
:placeholder="item.columnDesc"
:disabled="executeEval(null,item.disabledFuc,false)"
@keyup.enter.native="executeFuc($event,'5',item.clickFuc)"
clearable
></el-input>
</el-form-item>
<el-form-item
v-if="item.columnType == 'input' && item.columnName =='queryName' && executeEval(row,item.expression,true)"
:label="item.columnDesc+`:`" :key="item.id">
<el-autocomplete
class="inline-input"
style="width: 90%"
v-model="queryName"
:fetch-suggestions="queryProductName"
placeholder="请输入内容"
clearable
@select="handleSelect"
@clear="clearQueryProduct"
></el-autocomplete>
</el-form-item>
<el-form-item v-if="item.columnType == 'select' && executeEval(row,item.expression,true)"
:label="item.columnDesc+`:`">
<el-select v-model="filterQuery[item.columnName]"
:placeholder="item.columnDesc"
@change="executeFuc($event,'5',item.checkRules)"
:disabled="executeEval(null,item.disabledFuc,false)"
clearable>
<el-option
v-for="dict in item.lableRuleObj"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
<span style="float: left">{{ item.name }}</span>
<span v-if="item.isShowXx == '1'" style="float: right; color: #8492a6; font-size: 13px">{{
item.code
}}</span>
</el-select>
</el-form-item>
<el-form-item v-if="item.columnType == 'selectServer' && executeEval(row,item.expression,true)"
:label="item.columnDesc+`:`">
<el-select
v-model="filterQuery[item.columnName]"
:placeholder="item.columnDesc"
:disabled="executeEval(null,item.disabledFuc,false)"
filterable
remote
@change="executeFuc($event,'5',item.checkRules)"
:remote-method="(query) => executeFuc(query,'5',item.clickFuc)"
clearable>
<el-option
v-for="item in options[item.clickFuc]"
:key="item.code"
:label="item.label"
:value="item.code"
/>
<span style="float: left">{{ item.name }}</span>
<span v-if="item.isShowXx == '1'" style="float: right; color: #8492a6; font-size: 13px">{{
item.code
}}</span>
</el-select>
</el-form-item>
<el-form-item v-if="item.columnType == 'datePicker' && executeEval(row,item.expression,true)"
:label="item.columnDesc+`:`">
<el-date-picker
:picker-options="pickerOptions"
v-model="actDateRange"
type="daterange"
format="yyyy 年 MM 月 dd 日"
value-format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item v-if="item.columnType == 'date' && executeEval(row,item.expression,true)"
:label="item.columnDesc+`:`">
<el-date-picker
v-model="filterQuery[item.columnName]"
:style="`width:${item.width+'px'}`"
value-format="yyyy-MM-dd"
:disabled="executeEval(null,item.disabledFuc,false)"
type="date"
:placeholder="item.columnDesc"
></el-date-picker>
</el-form-item>
</div>
</template>
</el-row>
<!-- <el-row>-->
<!-- <el-col :span="4">-->
<!-- <el-form-item label="产品通用名:">-->
<!-- <el-input v-model="filterQuery.cpmctymc" placeholder="请输入产品编码" clearable></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="4">-->
<!-- <el-form-item label="批次号:">-->
<!-- <el-input v-model="filterQuery.batchNo" placeholder="请输入批次号" clearable></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!--&lt;!&ndash; <el-col :span="4">&ndash;&gt;-->
<!--&lt;!&ndash; <el-form-item label="失效日期:">&ndash;&gt;-->
<!--&lt;!&ndash; <el-date-picker&ndash;&gt;-->
<!--&lt;!&ndash; style="width: 100%"&ndash;&gt;-->
<!--&lt;!&ndash; :picker-options="pickerOptions"&ndash;&gt;-->
<!--&lt;!&ndash; v-model="actDateRange"&ndash;&gt;-->
<!--&lt;!&ndash; type="daterange"&ndash;&gt;-->
<!--&lt;!&ndash; format="yyyy 年 MM 月 dd 日"&ndash;&gt;-->
<!--&lt;!&ndash; value-format="yyyy-MM-dd"&ndash;&gt;-->
<!--&lt;!&ndash; range-separator="至"&ndash;&gt;-->
<!--&lt;!&ndash; start-placeholder="开始日期"&ndash;&gt;-->
<!--&lt;!&ndash; end-placeholder="结束日期"&ndash;&gt;-->
<!--&lt;!&ndash; >&ndash;&gt;-->
<!--&lt;!&ndash; </el-date-picker>&ndash;&gt;-->
<!--&lt;!&ndash; </el-form-item>&ndash;&gt;-->
<!--&lt;!&ndash; </el-col>&ndash;&gt;-->
<!-- </el-row>-->
</el-form>
<div class="top-right-btn">
<el-button-group style="display:flex;">
<el-button icon="el-icon-view" type="primary" @click="hideSearch">高级查询</el-button>
<el-button type="primary" icon="el-icon-refresh" @click="onReset">重置</el-button>
<el-button type="primary" icon="el-icon-search" @click="onSubmitFind">查询</el-button>
<!-- <el-button type="primary" icon="el-icon-plus" @click="newDistributionForm()" :loading="loading">手动新增</el-button> -->
<el-upload
:action="action"
:headers ="headers"
accept=".xml"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-remove="beforeRemove"
:on-success="handleSuccess"
:on-progress="handleProgress"
:on-error="handleError"
:before-upload="beforeUpload"
:limit="5"
:on-exceed="handleExceed"
:file-list="fileList"
:show-file-list="false"
:data="extraData">
<el-button size="small" icon="el-icon-upload" type="primary">文件上传</el-button>
<!-- <div slot="tip" class="el-upload__tip">只能上传xml文件且不超过5M</div> -->
</el-upload>
</el-button-group>
</div>
<el-divider style="margin: 15px"></el-divider>
<el-table v-loading="loading" :data="list" border highlight-current-row
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
style="width: 100%" row-key="id" >
<el-table-column label="序号" type="index" width="60"></el-table-column>
<el-table-column label="产品通用名" prop="cpmctymc" width="100"></el-table-column>
<el-table-column label="规格" prop="packageSpec"></el-table-column>
<el-table-column label="批次号" prop="batchNo"></el-table-column>
<el-table-column label="生产日期" prop="madeDate"></el-table-column>
<el-table-column label="失效日期" prop="validateDate"></el-table-column>
<el-table-column label="追溯码" prop="curCode" width="200"></el-table-column>
<el-table-column label="父级码" prop="parentCode" width="200"></el-table-column>
<el-table-column label="二层级数量" prop="twoLevelCount" width="120"></el-table-column>
<el-table-column label="一层级数量" prop="oneLevelCount" width="120"></el-table-column>
<!-- <el-table-column label="供应商Id" prop="erpId"></el-table-column>-->
<el-table-column label="备注" prop="comment"></el-table-column>
<el-table-column label="操作" width="120px">
<template slot-scope="scope">
<el-button type="text" size="small" @click.native="newDistributionForm(scope.$index, scope.row)">详情</el-button>
<el-button type="text" size="small" @click.native.stop="deleteDialog(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="filterQuery.page"
:limit.sync="filterQuery.limit"
@pagination="handleCurrentChange"
></pagination>
<el-dialog
:title="formName"
:visible.sync="newSpDistributionVisible"
width="45%"
append-to-body
:close-on-click-modal="false"
:close-on-press-escape="false"
v-if="newSpDistributionVisible"
@close='closeDialog'
>
<el-table v-loading="loading" :data="codeArray" style="width: 100%;" max-height="800" height="500"
border
ref="multipleTable">
<el-table-column label="序号" type="index" width="55"></el-table-column>
<el-table-column
label="追溯码"
prop="curCode"
width="280"
show-overflow-tooltip
></el-table-column>
</el-table>
</el-dialog>
</el-card>
</div>
</template>
<script>
import {getList,delRelCode,getDetailList} from "@/api/collect/relCode";
import {getAdminId, getToken} from '@/utils/auth';
import operateRelCode from "@/views/collect/relCode/operateRelCode"
import Treeselect from "@riophae/vue-treeselect";
import A from "@/plugins/KeyScaner";
import { executeFuc, getHead } from '@/utils/customConfig'
export default {
name: "relCode",
data() {
return {
//界面配置
tableHeader: [],
queryList: [],
fromList: [],
showSearch: false,
newSpDistributionVisible: false,
filterQuery: {
billAction: null,
billNo: "",
page: 1,
limit: 10,
corpName: null,
keyWord:"",
},
isExpandAll: true,
idQuery: null,
formName: null,
loading: false,
list: [],
formData: null,
total: 0,
actDateRange:[],
codeArray:[],
scanCode:null,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
headers:{
ADMINID: getAdminId(),
ADMINTOKEN: getToken()
},
extraData:{"uuid": "upload-xml"},
uploadLoading: false,
action: process.env.VUE_APP_BASE_API + "/udiwms/relCode/batch/xmlUpload",
fileList: []
};
},
methods: {
executeFuc(row, type, clickFuc, value) {
return executeFuc(this, row, type, clickFuc, value);
},
executeEval(row, expression, defaultRet) {
if (expression) {
return eval(expression);
}
return defaultRet;
},
onReset() {
this.$router.push({
path: "",
});
this.filterQuery = {
billNo: "",
thirdSysFk: "",
billFlag: null,
billAction: null,
startDate: null,
endDate: null,
code:null,
page: 1,
limit: 10,
corpName: null,
type: 1,
editStatus: 1,
keyWord:""
};
this.actDateRange = [];
this.getList();
},
onSubmitFind() {
this.filterQuery.page = 1;
this.getList();
},
hideSearch() {
this.showSearch = !this.showSearch;
},
newDistributionForm(index, row) {
this.formName = "码明细";
//获取码明细
let post = {
batchIdFk: row.id,
page: 1,
limit: 500
}
getDetailList(post).then((response) => {
if (response.code == 20000) {
this.codeArray = response.data.list
this.newSpDistributionVisible = true;
} else {
this.$message.error(response.message);
}
}).catch(() => {
});
},
closeDialog() {
this.newSpDistributionVisible = false;
this.getList();
this.detailList = [];
},
getInputFocus(event) {
event.currentTarget.select();
},
enterKey(event){
this.onSubmitFind();
},
deleteDialog(row) {
this.$confirm("此操作将永久删除关联记录, 是否继续?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
delRelCode({id:row.id})
.then((response) => {
if (response.code == 20000) {
this.getList();
} else {
this.$message.error(response.message);
}
})
.catch(() => {
});
})
.catch(() => {
});
},
getList() {
this.loading = true;
if (this.actDateRange !== null) {
this.filterQuery.startDate = this.actDateRange[0];
this.filterQuery.endDate = this.actDateRange[1];
} else {
this.filterQuery.startDate = null;
this.filterQuery.endDate = null;
}
getList(this.filterQuery)
.then((response) => {
if (response.code == 20000) {
this.list = response.data.list || [];
this.total = response.data.total || 0;
} else {
this.$message.error(response.message);
}
this.loading = false;
})
.catch(() => {
this.loading = false;
this.list = [];
this.total = 0;
});
},
handleCurrentChange(val) {
this.filterQuery.page = val.page;
this.getList();
},
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePreview(file) {
console.log(file);
},
handleExceed(files, fileList) {
this.$message.warning(`当前限制选择 5 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`);
},
beforeRemove(file, fileList) {
return this.$confirm(`确定移除 ${ file.name }`);
},
handleSuccess(res, file, fileList) {
fileList = fileList.filter(item => item.response.code === 20000);
this.fileList = fileList;
if (res.code === 20000) {
this.$message.success(res.message);
this.fileList = []
} else {
this.$message.error(res.message);
}
this.uploadLoading.close();
},
beforeUpload(file) {
const isXML = file.type === 'text/xml';
const isLt5M = file.size / 1024 / 1024 < 5;
if (!isXML) {
this.$message.error('上传文件只能是 XML 格式!');
}
if (!isLt5M) {
this.$message.error('上传文件大小不能超过 5MB!');
}
return isXML && isLt5M;
},
handleProgress() {
this.uploadLoading = this.$loading({
lock: true,
text: '文件上传中…',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.5)'
});
},
handleError() {
this.uploadLoading.close();
this.$message.error('文件上传失败,请检查文件大小或文件格式');
}
},
components: {
operateRelCode,
Treeselect,
},
filters: {},
mounted() {
document.body.ondrop = function (event) {
event.preventDefault();
event.stopPropagation();
};
var that = this;
var inputer = document.getElementById("inputer");
window.sc = new A.KeyScaner(inputer); //传入要监听的DOM节点
sc.onInput = function (text) {
if (text.includes("delete")) {
that.codeFormData.code = "";
that.sictomText = "";
that.originCode = "";
return;
}
if (that.sitcomScan) {
let tempTxt = text;
let str = tempTxt.replace(/[\r]/g, "");
that.sictomText = that.sictomText + str;
that.codeFormData.code = that.sictomText;
} else {
that.codeFormData.code = text;
}
};
inputer.focus();
this.$refs.inputRef.focus();
},
created() {
getHead("relCode-glgx", "1").then((re) => {
// 处理返回的数据
this.tableObj = re.data;
this.tableHeader = re.data.tableList;
this.queryList = re.data.queryList;
this.fromList = re.data.fromList;
});
this.getList();
},
}
;
</script>
<style scoped>
</style>