| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795 |
- <template>
- <div style="width: 98% !important">
- <Navbar title="设备打印" :is-go-back="false" />
- <div class="all">
- <div class="globalMain">
- <ul class="siteList">
- <li class="last">
- <div class="site">
- <label class="labelStyle">所属部门</label>
- <div class="form-inline-div">
- <SearchWidget style="width: 200px" :info-window-no="organizationWindowNo" :field="organizationField"
- :field-value="organizationFieldValue" :display-name="organizationField.listDisplayFieldName"
- :where-clause-source="organizationWCS" @value-changed="organizationValueChanged" />
- </div>
- </div>
- </li>
- <li class="site">
- <label class="labelStyle">名称</label>
- <div class="form-inline-div">
- <a-input v-model:value="searchParams.name" class="form-input" @keyup.enter="reQuery" />
- </div>
- </li>
- <li class="site">
- <label class="labelStyle">编号</label>
- <div class="form-inline-div">
- <a-input v-model:value="searchParams.no" class="form-input" @keyup.enter="reQuery" />
- </div>
- </li>
- <li class="site">
- <label class="labelStyle">规格型号</label>
- <div class="form-inline-div">
- <a-input v-model:value="searchParams.type" class="form-input" @keyup.enter="reQuery" />
- </div>
- </li>
- <li class="site">
- <label class="labelStyle">{{ $t("lang.AssetLabelPrint.printStatus") }}</label>
- <div class="form-inline-div">
- <a-select v-model:value="searchParams.printStatus" class="form-input" @change="reQuery">
- <a-select-option :value="null">{{ $t("lang.AssetLabelPrint.all") }}</a-select-option>
- <a-select-option :value="false">
- {{ $t("lang.AssetLabelPrint.notPrint") }}
- </a-select-option>
- <a-select-option :value="true">
- {{ $t("lang.AssetLabelPrint.havePrint") }}
- </a-select-option>
- </a-select>
- </div>
- </li>
- </ul>
- </div>
- <ul class="siteList">
- <li class="site">
- <label class="labelStyle">{{ $t("lang.AssetLabelPrint.selectPrintTemplate") }}</label>
- <div class="form-inline-div">
- <a-select v-model:value="templateId" class="form-input">
- <a-select-option value="" />
- <a-select-option v-for="item in templates" :key="'templates' + item.name" :value="item.id">
- {{ item.name }}
- </a-select-option>
- </a-select>
- </div>
- </li>
- <li class="site">
- <label for="selectPrinter" class="labelStyle">{{ $t("lang.AssetLabelPrint.selectPrinter") }}</label>
- <div class="form-inline-div">
- <a-select v-model:value="selectedPrinter" class="form-input">
- <a-select-option value="" />
- <a-select-option v-for="printer in printers" :key="printer" :value="printer">
- {{ printer }}
- </a-select-option>
- </a-select>
- </div>
- </li>
- <li style=" margin-left: 36px; display: flex; justify-content: space-between; ">
- <a-button type="primary" style="width: 80px" @click="print()">
- {{ $t("lang.AssetLabelPrint.print") }}
- </a-button>
- <PrintEpc ref="printEpc" v-model:visible="printEpcVisible" :printer-name="selectedPrinterCard"
- @ok="closePrintEpc" />
- <a-button type="primary" style="width: 80px;margin-left: 12px" @click="reQuery()">
- {{ $t("lang.AssetLabelPrint.query") }}
- </a-button>
- <a-button style="width: 80px; margin-left: 12px" type="dashed" @click="clearFilter()">
- {{ $t("lang.AssetLabelPrint.clear") }}
- </a-button>
- </li>
- </ul>
- </div>
- <CommonTable ref="commonTableRef" :extra-height="70" :columns="labelPrintColumns"
- :data-source="assetInstanceDtoList" :total="pagination.total" :is-select="true" @get-pager="getPageParams"
- @get-selected="getSelectParams">
- <template #bodyCell="{ column, record }">
- <div v-if="column.dataIndex === 'printStatus'">
- {{ record.printStatus ? '已打印' : '未打印' }}
- </div>
- <div v-if="column.dataIndex === 'operate'">
- <a-button style="width: 80px; margin-left: 12px" type="dashed" @click="cardEpc(record.epc)">
- 发卡
- </a-button>
- </div>
- </template>
- </CommonTable>
- <WriteEpc ref="writeEpc" v-model:visible="writeEpcVisible" @ok="closePrintEpc" />
- <Loading v-if="loading" />
- </div>
- </template>
- <script>
- import Printer from './printer.js';
- import { message } from 'ant-design-vue';
- import CommonTable from '../common/CommonTable.vue';
- import { assetLabelPrintColumns } from './columns.js';
- import { Common, Notify, PrintEpc,WriteEpc } from 'pc-component-v3';
- export default {
- components: { PrintEpc, CommonTable,WriteEpc },
- data: function () {
- return {
- assetInstanceDtoList: [],
- checked: false, //全选,
- labelPrintColumns: assetLabelPrintColumns,
- pagination: {
- total: 0, //总页数
- per_page: 20, // 每页大小
- current_page: 1, // 当前页数
- last_page: 0, // 最后一页编号
- },
- rangeDate: [],
- // 请求查询参数
- searchParams: {
- no: null, // 资产编号
- name: null, // 资产名称
- type: null,
- printStatus: null, // 打印状态
- organizationId: null, // 部门id
- },
- userWindowNo: '050408',
- organizationWindowNo: '20220420_233656',
- organizationField: {
- name: '',
- listDisplayFieldName: 'name',
- },
- organizationFieldValue: {
- id: null,
- displayValue: [''],
- fieldType: 'Key',
- },
- custodianNameField: {
- name: '',
- listDisplayFieldName: 'name',
- },
- custodianNameFieldValue: {
- id: null,
- displayValue: [''],
- fieldType: 'Key',
- },
- userField: {
- name: '',
- listDisplayFieldName: 'name',
- },
- userFieldValue: {
- id: null,
- displayValue: [''],
- fieldType: 'Key',
- },
- applyPurchaseUserField: {
- name: '',
- listDisplayFieldName: 'name',
- },
- applyPurchaseUserFieldValue: {
- id: null,
- displayValue: [''],
- fieldType: 'Key',
- },
- organizationWCS: {
- customerDataDimensions: [
- {
- fieldName: 'client.id',
- dataDimensionTypeNo: '202201191757',
- defaultDataDimensionTypeValueNo: '4',
- },
- ],
- },
- custodianIdWhereClauseSource: {
- customerDataDimensions: [
- {
- fieldName: 'client.id',
- dataDimensionTypeNo: '202201191757',
- defaultDataDimensionTypeValueNo: '4',
- },
- ],
- },
- templates: [], //打印模板
- printers: [], //打印机
- selectedPrinter: '', // 选择的打印机
- templateId: '',
- printPages: [],
- printPreviews: [],
- loading: false,
- modal: false,
- selectedPrinterCard: '发卡机',
- printEpcVisible: false,
- isCardEpc: false,
- selectedIds: [],
- writeEpcVisible: false,
- };
- },
- computed: {},
- watch: {},
- mounted: function () {
- const _self = this;
- _self.pagination.current_page = 1;
- _self.getAssetInstancePrint();
- _self.loadTemplateData();
- Printer.getPrinters().then(
- success => {
- if (success.errorCode === 0) {
- if (success.data && success.data.length > 0) {
- success.data.forEach(item => {
- _self.printers.push(item);
- });
- }
- } else {
- message.warning(success.errorMessage);
- }
- },
- error => {
- console.log(error);
- },
- );
- },
- beforeUnmount: function () { },
- methods: {
- // 所属部门搜索框条件改变
- organizationValueChanged: function (newFieldValue) {
- this.organizationFieldValue = newFieldValue;
- this.searchParams.organizationId = newFieldValue.id;
- },
- // 责任人
- custodianNameValueChanged: function (newFieldValue) {
- this.custodianNameFieldValue = newFieldValue;
- this.searchParams.custodianId = newFieldValue.id;
- },
- // 保管人
- userValueChanged: function (newFieldValue) {
- this.userFieldValue = newFieldValue;
- this.searchParams.depositoryUserId = newFieldValue.id;
- },
- // 申购人
- applyPurchaseUserValueChanged: function (newFieldValue) {
- this.applyPurchaseUserFieldValue = newFieldValue;
- this.searchParams.applyPurchaseUserId = newFieldValue.id;
- },
- /**
- * 获取选择数据的id集合
- */
- getSelectedRecordIds: function () {
- const _self = this;
- // let recordIds = [];
- // for (let i = 0; i < _self.assetInstanceDtoList.length; i++) {
- // if (_self.assetInstanceDtoList[i].checked == true) {
- // recordIds.push(_self.assetInstanceDtoList[i].assetInstanceId);
- // }
- // }
- return _self.selectedIds;
- },
- onRangeChange(_, str) {
- this.searchParams.startDate = str[0] === '' ? null : str[0];
- this.searchParams.endDate = str[1] === '' ? null : str[1];
- },
- getPageParams(page, pageSize) {
- this.pagination.current_page = page;
- this.pagination.per_page = pageSize;
- this.getAssetInstancePrint();
- },
- getSelectParams(selected) {
- const _self = this;
- if (_self.isCardEpc) {
- return;
- }
- let templateId = _self.templateId;
- if (templateId == '' || templateId == null) {
- _self.templateId = '';
- _self.$refs.commonTableRef.clear(false);
- Notify.error('错误', '请先选择打印模板', false);
- return;
- }
- _self.selectedIds = selected.selectedRowKeys;
- },
- getPrintData: function (recordIds) {
- const _self = this;
- let contents = [];
- $.ajax({
- url: Common.getApiURL(
- 'AssetInstanceResource/print?printPreview=' +
- false +
- '&templateId=' +
- _self.templateId,
- ),
- dataType: 'json',
- type: 'post',
- contentType: 'application/json',
- data: JSON.stringify(recordIds),
- beforeSend: function (request) {
- Common.addTokenToRequest(request);
- _self.loading = true;
- },
- success: function (datas) {
- datas.forEach(function (item) {
- var printItem = {
- id: null,
- name: null,
- content: item,
- };
- if (
- printItem.content == null ||
- printItem.content.printItems == null ||
- printItem.content.printItems.length == 0
- ) {
- Notify.error('错误', '打印模板无数据,不能打印。');
- return;
- }
- var content = JSON.stringify(printItem.content);
- if (content == null || content == '' || content == '{}') {
- Notify.error('错误', '请先选择模板,再点击下载。');
- return;
- }
- contents.push(printItem.content);
- });
- _self.loading = false;
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- _self.loading = false;
- Common.processException(XMLHttpRequest, textStatus, errorThrown);
- },
- });
- },
- /**
- * 打印文件
- */
- print: function () {
- const _self = this;
- let templateId = _self.templateId;
- if (templateId == null || templateId.length == 0) {
- Notify.error('提示', '请先选择打印模板。', false);
- return;
- }
- let selectedPrinter = _self.selectedPrinter;
- if (selectedPrinter == null || selectedPrinter.length == 0) {
- Notify.error('提示', '请先选择打印机。', false);
- return;
- }
- let recordIds = _self.getSelectedRecordIds();
- if (recordIds == null || recordIds.length == 0) {
- Notify.error('提示', '请先选择打印数据。', false);
- return;
- }
- console.log(templateId, recordIds, selectedPrinter, '打印数据');
- const cardIds = recordIds.join();
- const url = `/barcode.html#/chartPrint?templateId=${templateId}&printName=${selectedPrinter}&cardIds=${cardIds}&type=Inventory`;
- window.open(url);
- },
- cardEpc: function (epc) {
- const _self = this;
- _self.writeEpcVisible = true;
- _self.$refs.writeEpc.writeSingleEpc(epc);
- },
- writeSelectEpc: function () {
- const datas = [];
- const tableDatas = JSON.parse(
- JSON.stringify(this.assetInstanceDtoList),
- );
- if (tableDatas && tableDatas.length > 0) {
- const isSelect = tableDatas.some(item => {
- return item.checked == true;
- });
- console.log(isSelect);
- if (!isSelect) {
- Notify.error('提示', '请选择一条发卡数据。', false);
- return;
- }
- tableDatas.forEach(item => {
- if (item.checked) {
- datas.push(item.epc);
- }
- });
- if (datas.length > 1) {
- Notify.error('提示', '请至多选择一条发卡数据。', false);
- return;
- }
- this.writeEpcVisible = true;
- this.$refs.writeEpc.writeSingleEpc(datas[0]);
- }
- },
- closePrintEpc: function () {
- const _self = this;
- _self.writeEpcVisible = false;
- },
- /**
- * 打印模板change
- */
- templateChange: function (assetInstance) {
- const _self = this;
- if (_self.isCardEpc) {
- return;
- }
- let templateId = _self.templateId;
- if (templateId == '' || templateId == null) {
- _self.templateId = '';
- assetInstance.checked = false;
- Notify.error('错误', '未请先选择打印模板', false);
- return;
- }
- },
- /**
- * 设置模板
- */
- setTemplate: function (assetInstanceId, templateId) {
- var _self = this;
- _self.loading = true;
- $.ajax({
- url: Common.getApiURL('AssetInstanceResource/setPrintTemplate'),
- type: 'get',
- beforeSend: function (request) {
- Common.addTokenToRequest(request);
- },
- data: {
- assetInstanceId: assetInstanceId,
- templateId: templateId,
- },
- success: function (data) {
- _self.loading = false;
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- _self.loading = false;
- Common.processException(XMLHttpRequest, textStatus, errorThrown);
- },
- });
- },
- /**
- * 加载打印模板数据
- */
- loadTemplateData: function () {
- var _self = this;
- Printer.queryTemplates().then(
- success => {
- if (success.errorCode === 0) {
- if (success.datas && success.datas.length > 0) {
- _self.templates = success.datas;
- }
- } else {
- message.warning(success.errorMessage);
- }
- },
- error => {
- Common.processException(error);
- },
- );
- },
- /**
- * 20200615
- * 点击全选
- */
- selectAll: function () {
- var _self = this;
- for (var i = 0; i < _self.assetInstanceDtoList.length; i++) {
- _self.assetInstanceDtoList[i].checked = _self.checked;
- }
- },
- /**
- * 重新查询
- */
- reQuery: function () {
- let _self = this;
- _self.$refs.commonTableRef.backFirstPage();
- },
- /**
- * 查询资产卡片打印的数据
- */
- getAssetInstancePrint: function () {
- var _self = this;
- _self.loading = true;
- _self.checked = false;
- const range = {
- start: (_self.pagination.current_page - 1) * _self.pagination.per_page,
- length: _self.pagination.per_page,
- };
- const searchParams = _self.searchParams;
- const params = { ...searchParams, ...{ range }, inventoryType: 'Instrument' };
- $.ajax({
- url: Common.getApiURL('InventoryResource/queryInventoryPrint'),
- type: 'post',
- contentType: 'application/json',
- dataType: 'json',
- data: JSON.stringify(params),
- beforeSend: function (request) {
- Common.addTokenToRequest(request);
- },
- success: function (successData) {
- if (successData.errorCode == 0) {
- if (successData.datas && successData.datas.length > 0) {
- _self.assetInstanceDtoList = successData.datas;
- _self.assetInstanceDtoList.forEach(function (item) {
- item.id = item.inventoryId;
- item.checked = false;
- });
- } else {
- _self.assetInstanceDtoList = [];
- }
- _self.pagination.total = successData.total;
- }
- _self.loading = false;
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- Common.processException(XMLHttpRequest, textStatus, errorThrown);
- _self.loading = false;
- },
- });
- },
- /**
- * 清空条件
- */
- clearFilter: function () {
- const _self = this;
- (_self.searchParams = {
- epc: null,
- assetNo: null,
- assetInstanceName: null,
- printStatus: null,
- type: null,
- organizationId: null,
- custodianId: null,
- depositoryUserId: null,
- applyPurchaseUserId: null,
- locationName: null,
- startDate: null,
- endDate: null,
- }),
- _self.rangeDate = [];
- (_self.organizationFieldValue = {});
- _self.custodianNameFieldValue = {};
- _self.userFieldValue = {};
- _self.applyPurchaseUserFieldValue = {};
- _self.reQuery();
- },
- /**
- * 修改页Size
- */
- gridSizeSelect: function (newPageSize) {
- this.pagination.per_page = newPageSize;
- this.pagination.current_page = 1;
- this.getAssetInstancePrint();
- },
- },
- };
- </script>
- <style scoped>
- .grid-container {
- display: grid;
- grid-template-columns: 100%;
- /*将视图分为四个模块,每个模块的高度*/
- grid-template-rows: 53px min-content auto 40px;
- /*视口被均分为 100 单位的 vh 占据整个窗口,扣掉顶部 topNav 的距离后,计算得到 responseOrgnizationSelect 的高度*/
- height: calc(100vh - 90px);
- width: 100%;
- overflow: hidden;
- }
- .grid-item-1 {
- grid-column: 1 / 2;
- grid-row: 1 / 2;
- }
- .grid-item-2 {
- grid-column: 1 / 2;
- grid-row: 2 / 3;
- }
- .grid-item-3 {
- padding-top: 0px;
- padding-right: 10px;
- overflow: hidden;
- grid-column: 1 / 2;
- grid-row: 3/4;
- height: 100%;
- }
- .grid-item-4 {
- padding-top: 10px;
- grid-column: 1 / 2;
- grid-row: 4/5;
- }
- </style>
- <style scoped>
- .m-form-group {
- margin-left: 5px !important;
- margin-right: 5px !important;
- margin-bottom: 5px !important;
- }
- @media (max-width: 768px) {
- .m-form-group-label {
- text-align: left;
- padding-right: 10px;
- }
- }
- @media (min-width: 768px) {
- .m-form-group-label {
- width: 100px;
- text-align: center;
- padding-right: 10px;
- }
- .input-switches {
- width: 100%;
- }
- }
- .form-control-complex {
- width: 200px !important;
- }
- .form-input {
- border-radius: 4px !important;
- }
- .m-form-input {
- border-radius: 4px !important;
- width: 200px !important;
- }
- .form-inline-div {
- display: inline-block;
- height: 34px;
- }
- .m-btn {
- margin-left: 5px !important;
- margin-right: 5px !important;
- margin-bottom: 5px !important;
- }
- .table-header-left {
- float: left;
- /* margin: 20px 0; */
- }
- .table-header-right {
- margin-top: -2px;
- float: right;
- }
- </style>
- <style scoped>
- .room_img {
- width: 150px;
- height: 100px;
- float: left;
- margin-right: 10px;
- }
- .room_img img {
- width: 100%;
- height: 100%;
- }
- .room_img span {
- position: relative;
- right: -130px;
- top: -100px;
- font-size: 20px;
- color: red;
- }
- .modal-img-box {
- width: 100%;
- height: 400px;
- text-align: center;
- overflow: auto;
- }
- .m-small-img {
- cursor: pointer;
- }
- .m-img {
- width: 100%;
- }
- .labelStyle {
- width: 120px;
- text-align: right;
- padding: 8px;
- }
- .grid-item-row2-column2 {
- grid-row-start: 2;
- grid-row-end: 3;
- grid-column-start: 2;
- grid-column-end: 3;
- overflow: auto;
- margin-top: 0px;
- }
- .globalMain {
- max-width: 100%;
- margin-left: auto;
- margin-right: auto;
- }
- .siteList {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
- }
- @media (min-width: 500px) {
- .siteList {
- margin-left: 0;
- margin-right: -25px;
- justify-content: flex-start;
- }
- }
- .siteList>li {
- margin-bottom: 10px;
- }
- @media (min-width: 500px) {
- .siteList>li {
- margin-right: 8px;
- }
- }
- .siteList .site {
- width: 300px;
- display: flex;
- justify-content: center;
- align-items: center;
- /* flex-direction: column; */
- position: relative;
- }
- * {
- margin: 0;
- padding: 0;
- list-style: none;
- box-sizing: border-box;
- }
- .form-input {
- width: 200px !important;
- height: 30px !important;
- padding-left: 6px !important;
- }
- </style>
|