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.

378 lines
13 KiB
Vue

5 months ago
<template>
<div class="app-container">
<div class="app-container-search main-bgcolor main-radius">
<h1 class="">生成记录</h1>
<br />
<!-- 搜索工作栏 -->
<Bound
ref="searchForm"
:searchFormParam="{ queryParams, dataSource }"
:showSearch.sync="showSearch"
@handleQuery="handleQuery"
@resetQuery="resetQuery"
></Bound>
</div>
<!-- 操作工具栏 -->
<!-- 列表 -->
<div class="app-container-list main-bgcolor main-radius shopping">
<div class="shopping-top">
<div class="shopping-title">生成记录列表</div>
<el-button class="shopping-add-btn" type="primary" plain @click="handleOpenAddBatch"
v-hasPermi="['identity:scan-record:createBatch']">批量新增扫码记录</el-button>
</div>
<el-table v-loading="loading" :data="list">
<el-table-column label="序号" align="center" type="index" width="80" >
5 months ago
<template v-slot="{ $index }">
<span>{{($index+1)+ (queryParams.pageNo-1)*queryParams.pageSize }}</span>
</template>
</el-table-column>
<el-table-column label="记录编号" align="center" prop="generateRecordId" width="280" >
<template slot-scope="{ row }">
<el-tooltip class="item" effect="dark" :content="row.generateRecordId" placement="top">
<div class="flex-acenter">
<span class="more-width-20">{{ row.generateRecordId }}</span>
<el-button type="text" icon="el-icon-copy-document" @click.stop="copyContent(row.generateRecordId)"></el-button>
</div>
</el-tooltip>
</template>
</el-table-column>
<el-table-column label="商户名称" align="center" prop="belongBusinessName" width="150" >
<template slot-scope="{ row }">
<div class="table-column">
<span class="more-width-20">{{ row.belongBusinessName }}</span>
<el-button type="text" icon="el-icon-copy-document" @click.stop="copyContent(row.belongBusinessName)"></el-button>
</div>
</template>
</el-table-column>
<el-table-column label="商品名称" align="center" prop="goodsName" min-width="160" />
<el-table-column label="采收批次" align="center" prop="batchId" min-width="250" />
<!-- 生成时间就是创建时间 对应数据库字段名-->
<el-table-column label="生成时间" align="center" prop="createTime" width="180">
<template slot-scope="{row}">
<span>{{parseTime(row.createTime)}}</span>
</template>
</el-table-column>
<el-table-column label="码类型" align="center" prop="codeType" width="100">
<template slot-scope="scope">
<span>{{codeText(scope.row.codeType)}}</span>
</template>
</el-table-column>
<el-table-column label="字符长度" align="center" prop="charLength" width="100"/>
<el-table-column label="字符类型" align="center" prop="charType" width="100">
<template slot-scope="scope">
<span>{{charText(scope.row.charType)}}</span>
</template>
</el-table-column>
<el-table-column label="数量" align="center" prop="codeNum" width="100"/>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="150">
<template v-slot="scope">
<el-button size="mini" type="text"
v-hasPermi="['identity:code:export']" @click="downloadText(scope.row)">下载文字码包</el-button>
<el-button size="mini" type="text"
v-hasPermi="['identity:code:export']" @click="downloadThirdText(scope.row)">下载第三方标签文字码包</el-button>
<el-button size="mini" type="text"
v-hasPermi="['basic:goods-info:update']" @click="downloadImage(scope.row)">下载图片文字码包</el-button>
<el-button size="mini" type="text"
v-hasPermi="['basic:goods-info:update']" @click="downloadNoTextImage(scope.row)">下载纯图片码包</el-button>
<el-button size="mini" type="text" @click="handleDelete(scope.row)"
v-hasPermi="['identity:generate-record:delete']">删除码包</el-button>
</template>
</el-table-column>
<div slot="empty">
<EmptyBound />
</div>
</el-table>
<!-- 分页组件 -->
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNo" :limit.sync="queryParams.pageSize"
@pagination="getList"/>
</div>
<!-- 对话框(添加 / 修改) -->
<el-dialog title="批量新增扫码记录" :visible.sync="open" width="500px" v-dialogDrag append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="采收批次" prop="batchIdList">
<el-select v-model="form.batchIdList" placeholder="请选择批次" multiple filterable style="width: 100%;">
<el-option v-for="item in batchList" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="扫码时间" prop="scanTime">
<el-date-picker type="datetime" placeholder="请选择扫码时间" v-model="form.scanTime" style="width: 100%;"></el-date-picker>
</el-form-item>
<el-form-item label="手机信息" prop="mobileSystemInfo">
<el-input v-model="form.mobileSystemInfo" type="textarea" rows="5" placeholder="请输入手机信息" />
</el-form-item>
<el-form-item label="扫码IP" prop="scanIp">
<el-input v-model="form.scanIp" placeholder="请输入扫码IP" />
</el-form-item>
<el-form-item label="扫码区域" prop="scanArea">
<el-input v-model="form.scanArea" placeholder="请输入扫码区域" />
</el-form-item>
<el-form-item label="扫码地址" prop="scanLocation">
<el-input v-model="form.scanLocation" placeholder="请输入扫码地址" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm" :loading="submitLoading"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import Bound from '@/components/Customer/SearchForm'
import EmptyBound from '@/components/EmptyTable'
import { deleteGenerateRecord, getGenerateRecordPage } from "@/api/identity/generateRecord";
import {
getAllBatchCode,
} from "@/api/production/harvestBatch";
import { createCode , exportExcel, exportThirdExcel } from '@/api/identity/code';
import { createScanRecordBatch } from "@/api/identity/scanRecord";
export default {
name: "GenerateRecord",
components: {
EmptyBound,
Bound,
},
data() {
return {
// 遮罩层
loading: true,
// 导出遮罩层
exportLoading: false,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 标识码生成记录列表
list: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
batchList: [],
// 查询参数
queryParams: {
pageNo: 1,
pageSize: 10,
belongBusinessName: null,
batchId: null,
},
dataSource: [
{
key: 'belongBusinessName', //所属商户
itemType: 'input',
label: '商户名称',
placeholder: '请输入',
onEnterKeyUp: this.handleQuery,
},
{
key: 'batchId', //采收批次
itemType: 'input',
label: '采收批次',
placeholder: '请输入采收批次',
onEnterKeyUp: this.handleQuery,
}
],
submitLoading: false,
// 表单参数
form: {
mobileSystemInfo: `{"type":"h5","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Mobile/15E148 Safari/604.1","model":"iPhone","brand":"iPhone","platform":"iOS","system":"iOS 18.1"}`,
},
// 表单校验
rules: {
batchIdList: [
{ required: true, message: "请选择采收批次", trigger: "blur" },
],
scanTime: [
{ required: true, message: "请选择扫码时间", trigger: "blur" },
],
mobileSystemInfo: [
{ required: true, message: "请输入手机信息", trigger: "blur" },
],
scanIp: [
{ required: true, message: "请输入扫码IP", trigger: "blur" },
],
scanArea: [
{ required: true, message: "请输入扫码区域", trigger: "blur" },
],
scanLocation: [
{ required: true, message: "请输入扫码地址", trigger: "blur" },
],
}
};
},
mounted() {
5 months ago
this.getList();
},
methods: {
stateText(state){
switch(state){
case 0:
return '生成中'
case 1:
return '已生成文字码,未生成图片码'
case 2:
return '文字及图片码均生成'
}
},
codeText(codeType){
switch(codeType){
case 0:
return '普通码'
case 1:
return '明暗码'
}
},
charText(charType){
switch(charType){
case 0:
return '纯数字'
case 1:
return '纯字母'
case 2:
return '混合类型'
}
},
// 下载文字码包
downloadText(row){
exportExcel({
generateRecordId: row.generateRecordId,
}).then((res)=>{
this.$download.excel(res, '文字码包.xls');
});
},
downloadThirdText(row) {
exportThirdExcel({
generateRecordId: row.generateRecordId,
}).then((res)=>{
this.$download.excel(res, '第三方标签文字码包.xls');
});
},
// 下载图片码包
async downloadImage(row) {
5 months ago
let url = row.fileUrl;
window.open(url,'_self');
},
async downloadNoTextImage(row) {
if (row.imageFileUrl) {
window.open(row.imageFileUrl, '_self');
} else {
this.$modal.msgError("未生成纯图片码包, 请重新生成");
}
},
/** 查询列表 */
getList() {
const { query: { businessName } } = this.$route;
if (businessName) {
this.queryParams.belongBusinessName = businessName;
}
5 months ago
this.loading = true;
// 执行查询
getGenerateRecordPage(this.queryParams).then(response => {
this.list = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNo = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm", "searchForm");
this.handleQuery();
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal.confirm('是否确认删除标识码生成记录编号为"' + row.generateRecordId + '"的数据项?').then(function() {
5 months ago
return deleteGenerateRecord(id);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
// 存入码仓
async saveCodeWarehouse(row){
let form = {
...row,
status: row.state,
}
let res = await createCode(form);
console.log('存入结果',res);
},
handleOpenAddBatch() {
this.open = true;
getAllBatchCode().then(({ data }) => {
this.batchList = data;
});
},
/** 取消按钮 */
cancel() {
this.open = false;
this.reset();
},
/** 表单重置 */
reset() {
this.form = {
batchIdList: undefined,
scanTime: undefined,
mobileSystemInfo: `{"type":"h5","userAgent":"Mozilla/5.0 (iPhone; CPU iPhone OS 18_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.1 Mobile/15E148 Safari/604.1","model":"iPhone","brand":"iPhone","platform":"iOS","system":"iOS 18.1"}`,
scanIp: undefined,
scanArea: undefined,
scanLocation: undefined,
};
this.resetForm("form");
},
submitForm() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.submitLoading = true;
// this.form.batchIdList = this.form.batchIdList.join(',');
// this.form.createTime = this.form.scanTime;
createScanRecordBatch(this.form).then(() => {
this.cancel();
this.getList();
this.$message.success("新增成功");
}).finally(() => {
this.submitLoading = false;
});
} else {
return false;
}
});
}
}
};
</script>
<style lang="scss">
.table-column{
display: flex;
align-items: center;
justify-content: center;
.dian{
width: 5px;
height: 5px;
border-radius: 100%;
background-color: rgb(217, 217, 217);
display: inline-block;
}
.dian-active{
background-color: rgb(82, 196, 26);
}
.column-content{
display: inline-block;
padding-left: 6px;
}
}
</style>