123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680 |
- <template>
- <div :style="{ backgroundColor: bgColor }">
- <q-dialog
- v-model="storage_dialog"
- transition-show="jump-down"
- transition-hide="jump-up"
- @show="prepareDialog()"
- >
- <q-card style="min-width: 600px">
- <q-bar
- class="bg-light-blue-10 text-white rounded-borders"
- style="height: 50px"
- >
- <div>
- {{ $t("stock.shelf.shelf_details") }} {{ rowIndex }}-{{
- colIndex
- }}-{{ layerIndex }}
- </div>
- <q-space></q-space>
- <q-btn dense flat icon="close" v-close-popup>
- <q-tooltip
- content-class="bg-amber text-black shadow-4"
- :offset="[20, 20]"
- content-style="font-size: 12px"
- >
- {{ $t("index.close") }}</q-tooltip
- >
- </q-btn>
- </q-bar>
- <q-card-section class="q-pt-md">
- <q-tabs v-model="activeTab">
- <q-tab name="tab1" label="货架属性" />
- <q-tab name="tab2" label="批次信息" />
- <q-tab name="tab3" label="库存明细" />
- </q-tabs>
- </q-card-section>
- <!-- 选项卡内容 -->
- <q-tab-panels v-model="activeTab" animated>
- <q-tab-panel name="tab1" style="height: 300px">
- <div class="row q-gutter-x-md">
- <div class="col column q-gutter-y-md">
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_code"
- :label="$t('stock.shelf.goods_code')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- </div>
- <div class="col column q-gutter-y-md">
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_name"
- :label="$t('stock.shelf.goods_name')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- </div>
- </div>
- </q-tab-panel>
- <q-tab-panel name="tab2" style="height: 300px">
- <div class="row q-gutter-x-md">
- <div class="col column q-gutter-y-md">
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_code"
- :label="$t('stock.shelf.goods_code')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_batch"
- :label="$t('stock.shelf.goods_batch')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_qty"
- :label="'批次总数'"
- :readonly="onlyread"
- :rules="[(val) => val >= 0 || error1]"
- class="col"
- />
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_desc"
- :label="$t('stock.shelf.goods_desc')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- </div>
- <div class="col column q-gutter-y-md">
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_name"
- :label="$t('stock.shelf.goods_name')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_std"
- :label="$t('stock.shelf.goods_std')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_notes"
- :label="'库位容纳'"
- :readonly="onlyread"
- :rules="[(val) => val >= 0 || error1]"
- class="col"
- />
- <q-input
- dense
- outlined
- square
- v-model="storage_form.goods_unit"
- :label="$t('stock.shelf.goods_unit')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- </div>
- </div>
- </q-tab-panel>
- <q-tab-panel name="tab3" style="height: 300px">
- <div class="row q-gutter-x-md">
- <div class="col column q-gutter-y-md"></div>
- <div class="col column q-gutter-y-md"></div>
- </div>
- </q-tab-panel>
- </q-tab-panels>
- <div
- style="position: absolute; right: 20px; bottom: 12px; z-index: 100"
- >
- <q-btn-group push>
- <q-btn
- color="white"
- text-color="black"
- @click="
- shelfLocal = 'undefined';
- handleclick();
- "
- >
- {{ $t("stock.return") }}
- </q-btn>
- <q-btn
- color="white"
- text-color="black"
- @click="showInventoryDetails = !showInventoryDetails"
- >
- {{ $t("stock.details") }}
- </q-btn>
- <q-btn color="primary" text-color="white" @click="handleEdit()">
- {{
- onlyread
- ? $t("stock.shelf.shelf_edit")
- : $t("stock.shelf.shelf_confirm")
- }}
- </q-btn>
- </q-btn-group>
- </div>
- <div
- style="float: right; padding: 15px 15px 50px 15px; min-width: 100%"
- flow="row wrap"
- >
- <q-card class="q-mb-md" bordered v-if="showInventoryDetails">
- <q-card-actions
- class="q-px-none"
- style="position: absolute; right: 20px; top: 10px; z-index: 100"
- >
- <q-btn
- v-if="!onlyread"
- @click="addInventoryDetail()"
- icon="add"
- flat
- dense
- color="primary"
- :label="$t('stock.add')"
- />
- <q-btn
- v-if="!onlyread"
- @click="deleteInventoryDetail()"
- icon="delete"
- flat
- dense
- color="primary"
- :label="$t('stock.delete')"
- />
- </q-card-actions>
- <q-card-section>
- <div class="text-h6 q-mb-md">
- {{ $t("stock.inventory_details") }}
- </div>
- <!-- 动态生成的输入行 -->
- <div
- v-for="(detail, index) in inventoryDetails"
- :key="index"
- class="row q-col-gutter-md q-mb-sm"
- >
- <div class="col">
- <q-input
- v-model="detail.id"
- :label="$t('stock.batch')"
- :readonly="onlyread"
- dense
- outlined
- />
- </div>
- <div class="col">
- <q-input
- v-model="detail.quantity"
- :label="$t('stock.quantity')"
- :readonly="onlyread"
- type="number"
- dense
- outlined
- />
- </div>
- <div class="col">
- <q-input
- v-model="detail.location"
- :label="$t('stock.location')"
- :readonly="onlyread"
- dense
- standout
- outlined
- />
- </div>
- </div>
- </q-card-section>
- </q-card>
- </div>
- </q-card>
- </q-dialog>
- <q-dialog
- v-model="elevator_dialog"
- transition-show="jump-down"
- transition-hide="jump-up"
- @show="prepareDialog()"
- >
- <q-card style="min-width: 350px">
- <q-bar
- class="bg-light-blue-10 text-white rounded-borders"
- style="height: 50px"
- >
- <div>
- {{ $t("stock.elevator.elevator") }}
- </div>
- <q-space></q-space>
- <q-btn dense flat icon="close" v-close-popup>
- <q-tooltip
- content-class="bg-amber text-black shadow-4"
- :offset="[20, 20]"
- content-style="font-size: 12px"
- >
- {{ $t("index.close") }}</q-tooltip
- >
- </q-btn>
- </q-bar>
- <q-card-section class="q-pt-md">
- <q-input
- dense
- outlined
- square
- v-model="elevator_form.ip"
- :label="$t('stock.elevator.ip')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <q-input
- dense
- outlined
- square
- v-model="elevator_form.port"
- :label="$t('stock.elevator.port')"
- type="number"
- :readonly="onlyread"
- :rules="[
- (val) => val !== null || error1,
- (val) => val >= 0 || error1,
- ]"
- />
- <q-input
- dense
- outlined
- square
- v-model="elevator_form.status"
- :label="$t('stock.conveyor.status')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <!-- <q-input dense outlined square v-model="elevator_form.password"
- :label="$t('stock.elevator.password')" :readonly="onlyread"
- :rules="[val => val?.length > 0 || error1]" /> -->
- <!-- <q-input dense outlined square v-model="elevator_form.username"
- :label="$t('stock.elevator.username')" :readonly="onlyread"
- :rules="[val => val?.length > 0 || error1]" /> -->
- </q-card-section>
- <div style="float: right; padding: 15px 15px 15px 0">
- <q-btn
- color="white"
- text-color="black"
- style="margin-right: 25px"
- @click="
- shelfLocal = 'undefined';
- handleclick();
- "
- >
- {{ $t("stock.return") }}</q-btn
- >
- <q-btn
- color="primary"
- text-color="white"
- style="margin-right: 25px"
- @click="handleEdit()"
- >
- {{
- onlyread
- ? $t("stock.shelf.shelf_edit")
- : $t("stock.shelf.shelf_confirm")
- }}</q-btn
- >
- </div>
- </q-card>
- </q-dialog>
- <q-dialog
- v-model="conveyor_dialog"
- transition-show="jump-down"
- transition-hide="jump-up"
- @show="prepareDialog()"
- >
- <q-card style="min-width: 350px">
- <q-bar
- class="bg-light-blue-10 text-white rounded-borders"
- style="height: 50px"
- >
- <div>
- {{ $t("stock.conveyor.conveyor") }}
- </div>
- <q-space></q-space>
- <q-btn dense flat icon="close" v-close-popup>
- <q-tooltip
- content-class="bg-amber text-black shadow-4"
- :offset="[20, 20]"
- content-style="font-size: 12px"
- >
- {{ $t("index.close") }}</q-tooltip
- >
- </q-btn>
- </q-bar>
- <q-card-section class="q-pt-md">
- <q-input
- dense
- outlined
- square
- v-model="conveyor_form.ip"
- :label="$t('stock.conveyor.ip')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- <!-- <q-input dense outlined square v-model="conveyor_form.destination"
- :label="$t('stock.conveyor.destination')" :readonly="onlyread"
- :rules="[val => val?.length > 0 || error1]" /> -->
- <q-input
- dense
- outlined
- square
- v-model="conveyor_form.port"
- :label="$t('stock.elevator.port')"
- type="number"
- :readonly="onlyread"
- :rules="[
- (val) => val !== null || error1,
- (val) => val >= 0 || error1,
- ]"
- />
- <q-input
- dense
- outlined
- square
- v-model="conveyor_form.status"
- :label="$t('stock.conveyor.status')"
- :readonly="onlyread"
- :rules="[(val) => val?.length > 0 || error1]"
- />
- </q-card-section>
- <div style="float: right; padding: 15px 15px 15px 0">
- <q-btn
- color="white"
- text-color="black"
- style="margin-right: 25px"
- @click="
- shelfLocal = 'undefined';
- handleclick();
- "
- >
- {{ $t("stock.return") }}</q-btn
- >
- <q-btn
- color="primary"
- text-color="white"
- style="margin-right: 25px"
- @click="handleEdit()"
- >
- {{
- onlyread
- ? $t("stock.shelf.shelf_edit")
- : $t("stock.shelf.shelf_confirm")
- }}</q-btn
- >
- </div>
- </q-card>
- </q-dialog>
- </div>
- </template>
- <script>
- import { getauth } from 'boot/axios_request'
- export default {
- props: {
- rowIndex: Number,
- colIndex: Number,
- layerIndex: Number,
- selectedShelfType: String,
- goodsData: Object
- },
- data () {
- return {
- pathname: 'bin/',
- pathnamecontainer: 'container/detail/',
- container_id: 123456,
- results: [],
- storage_form: {
- shelf_name: '',
- shelf_department: '',
- shelf_warehouse: '',
- shelf_status: '',
- goods_code: '',
- goods_name: '',
- goods_std: '',
- goods_desc: '',
- goods_qty: '',
- goods_unit: '',
- goods_price: '',
- goods_batch: '',
- goods_notes: '',
- goods_in: '',
- goods_out: ''
- },
- elevator_form: {
- ip: '',
- port: 8080,
- // username: 'admin',
- // password: '123456',
- status: '未连接'
- },
- conveyor_form: {
- ip: '',
- port: 8080,
- // destination: 'A010203',
- status: '未连接'
- },
- showInventoryDetails: false,
- inventoryDetails: [
- {
- id: 1,
- batch: '',
- quantity: 0,
- location: ''
- },
- {
- id: 2,
- batch: '',
- quantity: 0,
- location: ''
- }
- ],
- inventoryColumns: [
- { name: 'batch', label: '批次', field: 'batch', align: 'left' },
- { name: 'quantity', label: '数量', field: 'quantity', align: 'right' },
- { name: 'location', label: '位置', field: 'location', align: 'left' }
- ],
- user_id: '',
- auth_id: '',
- onlyread: true,
- clickedinput: false,
- storage_dialog: false,
- elevator_dialog: false,
- conveyor_dialog: false,
- bgColor: 'transparent',
- shelf_type: { shelf_type: 'undefined' },
- ip_change: { ip_address: '192.168.1.100', port: 8080, status: 'offline' },
- goods_change: {
- shelf_status: '未满',
- goods_batch: '20230701-001',
- goods_code: 'A010203',
- goods_name: '存货货物',
- goods_std: '规格型号',
- goods_desc: '存货描述',
- goods_qty: 123456,
- goods_unit: 'kg',
- goods_price: 123456,
- goods_notes: '备注',
- goods_in: 123456,
- goods_out: 123456
- },
- error1: this.$t('stock.shelf.error1'),
- shelfLocal: '',
- activeTab: 'tab2'
- }
- },
- created () {
- this.shelfLocal = this.selectedShelfType
- this.handleclick()
- },
- methods: {
- prepareDialog () {
- this.onlyread = true
- },
- handleclick () {
- this.shelfLocal = this.selectedShelfType
- if (this.shelfLocal === 'undefined') {
- (this.clickedinput = true),
- (this.storage_dialog = false),
- (this.elevator_dialog = false),
- (this.conveyor_dialog = false)
- }
- if (this.shelfLocal === 'storage') {
- this.getList(),
- (this.clickedinput = false),
- (this.storage_dialog = true),
- (this.elevator_dialog = false),
- (this.conveyor_dialog = false)
- }
- if (this.shelfLocal === 'elevator') {
- this.getList(),
- (this.clickedinput = false),
- (this.storage_dialog = false),
- (this.elevator_dialog = true),
- (this.conveyor_dialog = false)
- }
- if (this.shelfLocal === 'conveyor') {
- this.getList(),
- (this.clickedinput = false),
- (this.storage_dialog = false),
- (this.elevator_dialog = false),
- (this.conveyor_dialog = true)
- }
- },
- getList () {
- var _this = this
- _this.storage_form = {
- shelf_name: '',
- shelf_department: '',
- shelf_warehouse: '',
- shelf_status: '',
- goods_code: '',
- goods_name: '',
- goods_std: '',
- goods_desc: '',
- goods_qty: 0,
- goods_unit: '',
- goods_price: 0,
- goods_batch: '',
- goods_notes: 0,
- goods_in: 0,
- goods_out: 0
- }
- _this.inventoryDetails = [
- {
- id: 1,
- batch: '',
- quantity: 0,
- location: ''
- },
- {
- id: 2,
- batch: '',
- quantity: 0,
- location: ''
- }
- ]
- getauth(_this.pathname + _this.goodsData.id + '/')
- .then((res1) => {
- console.log(res1)
- console.log(res1.current_containers)
- if (res1.current_containers.length === 0) {
- console.log('当前托盘ID为空')
- _this.$q.notify({
- message: '当前库位为空',
- icon: 'info',
- color: 'info'
- })
- return
- }
- _this.container_id = res1.current_containers[0].id
- console.log('当前托盘ID', _this.container_id)
- console.log('当前托盘ID长度', res1.current_containers.length)
- getauth(
- _this.pathnamecontainer + '?container=' + _this.container_id
- ).then((res) => {
- var results = res.results[0]
- this.storage_form.goods_batch = results.batch.bound_number
- this.storage_form.goods_code = results.batch.goods_code
- this.storage_form.goods_name = results.batch.goods_desc
- this.storage_form.goods_std = results.batch.goods_std
- this.storage_form.goods_desc = results.batch.goods_desc
- this.storage_form.goods_qty = results.batch.goods_qty
- this.storage_form.goods_unit = results.batch.goods_unit
- this.storage_form.goods_price = results.batch.goods_price
- this.storage_form.goods_notes = results.goods_qty
- this.storage_form.goods_in = results.batch.goods_in
- this.storage_form.goods_out = results.batch.goods_out
- this.storage_form.shelf_name = results.shelf_name
- this.storage_form.shelf_department = results.shelf_department
- this.storage_form.shelf_warehouse = results.warehouse_name
- this.storage_form.shelf_status = results.status
- })
- })
- .catch((err) => {
- _this.$q.notify({
- message: err.detail,
- icon: 'close',
- color: 'negative'
- })
- })
- }
- }
- }
- </script>
- <style scoped>
- :deep(.q-field__label) {
- margin-top: 8px;
- align-self: center;
- }
- :deep(.q-field__control-container) {
- padding-left: 50px;
- margin-top: -5px;
- }
- </style>
|