From 78d03fa48defaf77c2b533dc4616a210088ab49c Mon Sep 17 00:00:00 2001 From: MrShi <1878285526@qq.com> Date: 星期五, 17 一月 2025 11:02:51 +0800 Subject: [PATCH] Merge branch '2.0.1' of http://139.186.142.91:10010/r/productDev/funingyunwei into 2.0.1 --- admin/src/api/index.js | 1 admin/src/views/stock/components/InDetail.vue | 58 ++-- admin/src/views/stock/in.vue | 104 ++++-- admin/src/views/stock/components/config.js | 18 + admin/src/views/stock/components/OutEdit.vue | 112 +++++-- admin/src/views/stock/components/AssetSel.vue | 50 ++- admin/src/views/stock/components/InEdit.vue | 113 +++++-- admin/src/views/stock/out.vue | 106 ++++-- admin/src/views/stock/record.vue | 124 +++++-- admin/src/views/stock/query.vue | 27 + admin/src/api/store/index.js | 44 +++ admin/src/views/stock/components/OutDetail.vue | 52 +- 12 files changed, 541 insertions(+), 268 deletions(-) diff --git a/admin/src/api/index.js b/admin/src/api/index.js index dc952c6..05f4504 100644 --- a/admin/src/api/index.js +++ b/admin/src/api/index.js @@ -3,3 +3,4 @@ export * from './business/index' export * from './other/other' export * from './workbench/index' +export * from './store/index' diff --git a/admin/src/api/store/index.js b/admin/src/api/store/index.js new file mode 100644 index 0000000..bcd9b21 --- /dev/null +++ b/admin/src/api/store/index.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +export function ywOutinboundPage (data) { + return request.post('/visitsAdmin/cloudService/business/ywOutinbound/page', data, { + trim: true + }) +} +export function ywOutinboundEx (data) { + return request.post('/visitsAdmin/cloudService/business/ywOutinbound/exportExcel', data, { + trim: true + }) +} +export function ywOutinboundDetail (id) { + return request.get('/visitsAdmin/cloudService/business/ywOutinbound/' + id) +} + +export function ywOutinboundCreate (data) { + return request.post('/visitsAdmin/cloudService/business/ywOutinbound/create', data, { + trim: true + }) +} + +// 搴撳瓨鏌ヨ +export function ywStockPage (data) { + return request.post('/visitsAdmin/cloudService/business/ywStock/page', data, { + trim: true + }) +} +export function ywStockPageEx (data) { + return request.post('/visitsAdmin/cloudService/business/ywStock/exportExcel', data, { + trim: true + }) +} + +export function ywOutinboundRecord (data) { + return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/page', data, { + trim: true + }) +} +export function ywOutinboundRecordEx (data) { + return request.post('/visitsAdmin/cloudService/business/ywOutinboundRecord/exportExcel', data, { + trim: true + }) +} \ No newline at end of file diff --git a/admin/src/views/stock/components/AssetSel.vue b/admin/src/views/stock/components/AssetSel.vue index afbbb23..a315d02 100644 --- a/admin/src/views/stock/components/AssetSel.vue +++ b/admin/src/views/stock/components/AssetSel.vue @@ -2,8 +2,8 @@ <GlobalWindow title="閫夋嫨鐗╂枡" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close" @confirm="confirm"> <el-form ref="searchForm" :model="searchForm" label-width="100px" inline> - <el-form-item prop="areaType" label="鐗╂枡淇℃伅"> - <el-input v-model="searchForm.aaa" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�/鍚嶇О" @keypress.enter.native="search"></el-input> + <el-form-item prop="code" label="鐗╂枡淇℃伅"> + <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�/鍚嶇О" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item prop="areaIds" label="鐗╂枡鍒嗙被"> <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="璇烽�夋嫨鐗╂枡鍒嗙被" clearable @@ -14,22 +14,22 @@ }"></el-cascader> </el-form-item> <span> - <el-button type="primary" @click="getList">鎼滅储</el-button> + <el-button type="primary" @click="getList(1)">鎼滅储</el-button> <el-button @click="reset">閲嶇疆</el-button> </span> </el-form> <!-- --> <el-table @selection-change="handleSelectionChange" :data="list" stripe> <el-table-column type="selection" width="55" /> - <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column> - <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column> - <el-table-column prop="createDate" label="鏉$爜" min-width="100px"></el-table-column> - <el-table-column prop="dealUserName" label="鍝佺墝" min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鍗曚綅" min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="搴撳瓨" min-width="80px"></el-table-column> + <el-table-column prop="code" label="鐗╂枡缂栫爜" min-width="100px"></el-table-column> + <el-table-column prop="name" label="鐗╂枡鍚嶇О" min-width="80px"></el-table-column> + <el-table-column prop="qrcode" label="鏉$爜" min-width="100px"></el-table-column> + <el-table-column prop="brand" label="鍝佺墝" min-width="80px"></el-table-column> + <el-table-column prop="attr" label="瑙勬牸鍨嬪彿" min-width="80px"></el-table-column> + <el-table-column prop="unitName" label="鍗曚綅" min-width="80px"></el-table-column> + <el-table-column prop="maxStock" label="搴撳瓨" min-width="80px"></el-table-column> </el-table> - <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination"> + <Pagination class="mt10" @size-change="handleSizeChange" @current-change="getList" :pagination="pagination"> </Pagination> </GlobalWindow> </template> @@ -38,6 +38,8 @@ import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' import Pagination from '@/components/common/Pagination' +import { fetchList } from '@/api/ywMaterial' +import { ywStockPage } from '@/api/store/index' import { fetchList as getCateList } from '@/api/business/category.js' export default { name: 'OperaCategoryWindow', @@ -51,6 +53,7 @@ page: 1, total: 0 }, + isOut: false, list: [], selList: [], cateList: [], @@ -64,7 +67,7 @@ } }, created() { - this.initData() + this.getCate() }, methods: { confirm() { @@ -75,10 +78,13 @@ this.selList = val }, getList(page) { - const { pagination, searchForm } = this + const { pagination, searchForm, isOut } = this this.listLoading = true if(page){pagination.page = page} - fetchList({ + console.log('isOut', isOut); + + let fn = isOut ? ywStockPage : fetchList + fn({ capacity: pagination.pageSize, page: pagination.page, model: {...searchForm} @@ -86,13 +92,25 @@ this.listLoading = false this.list = res.records this.pagination.total = res.total || 0 + if(isOut){ + this.list.forEach(item => { + item.brand = item.materialBrand + item.attr = item.materialAttr + item.name = item.materialName + item.id = item.materialId + item.code = item.materialCode + item.qrcode = item.materialQrcode + item.unitName = item.materialUnitName + item.maxStock = item.stock + }) + } }, () => { this.listLoading = false }) }, - initData() { + getCate() { getCateList({ - model: { type: 3 }, + model: { type: 7 }, capacity: 1000, page: 1, }).then(res => { diff --git a/admin/src/views/stock/components/InDetail.vue b/admin/src/views/stock/components/InDetail.vue index ad73ba4..e3e8476 100644 --- a/admin/src/views/stock/components/InDetail.vue +++ b/admin/src/views/stock/components/InDetail.vue @@ -1,43 +1,46 @@ <template> - <GlobalWindow width="960px" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close" + <GlobalWindow width="960px" :showConfirm="false" title="鍏ュ簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close" @confirm="confirm"> <div class="main"> + <div class="title" style="color: #333333;"> + <span>鍏ュ簱鍗曠紪鍙凤細{{ info.code }}</span> + </div> <div class="title"> - <span>宸ュ崟璇︽儏</span> + <span>鍩虹淇℃伅</span> </div> <div class="main_content"> <div class="list"> <div class="item"> - <div class="la">鍑哄簱浠撳簱</div> - <div class="val">{{ info.projectName }}</div> + <div class="la">鍏ュ簱浠撳簱</div> + <div class="val">{{ info.warehouseName }}</div> </div> <div class="item"> - <div class="la">鍑哄簱鏃ユ湡</div> - <div class="val">{{ info.categoryName }}</div> + <div class="la">鍏ュ簱鏃ユ湡</div> + <div class="val">{{ info.doneDate }}</div> </div> <div class="item"> - <div class="la">鍑哄簱绫诲瀷</div> - <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div> + <div class="la">鍏ュ簱绫诲瀷</div> + <div class="val" v-if="info.type || info.type == 0">{{ StoreTypeOps[info.type].name }}</div> </div> <div class="item"> <div class="la">澶勭悊浜�</div> - <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div> + <div class="val">{{ info.createUserName }}</div> </div> - <div class="item"> + <div class="item" style="width: 66.6%;"> <div class="la">澶囨敞</div> - <div class="val">{{ info.createDate }}</div> + <div class="val">{{ info.remark }}</div> </div> </div> </div> <div class="title">鐗╂枡淇℃伅</div> - <el-table :data="list" stripe> - <el-table-column align="center" type="index" width="55" /> - <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column> - <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column> - <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table :data="info.recordList" stripe> + <el-table-column align="center" label="搴忓彿" type="index" width="55" /> + <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column> + <el-table-column prop="materialQrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column> + <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="stock" label="鍏ュ簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> </el-table> </div> </GlobalWindow> @@ -46,10 +49,8 @@ <script> import GlobalWindow from '@/components/common/GlobalWindow' import BaseOpera from '@/components/base/BaseOpera' -import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder' -import { getUserList } from '@/api/system/user' -import { Message, Loading } from 'element-ui' -import dayjs from 'dayjs' +import { ywOutinboundDetail } from '@/api' +import { StoreTypeOps } from './config' export default { components: { GlobalWindow @@ -57,21 +58,18 @@ extends: BaseOpera, data() { return { - id: '', visible: false, - info: {}, - list: [] + info: {recordList: []}, + StoreTypeOps } }, created() { - // this.getDetail() }, methods: { - getDetail() { - const { id } = this - detailById(id).then(res => { + getDetail(id) { + ywOutinboundDetail(id).then(res => { this.info = res }) }, diff --git a/admin/src/views/stock/components/InEdit.vue b/admin/src/views/stock/components/InEdit.vue index 3bc1a30..b19d3a0 100644 --- a/admin/src/views/stock/components/InEdit.vue +++ b/admin/src/views/stock/components/InEdit.vue @@ -1,27 +1,27 @@ <template> - <GlobalWindow title="鏂板缓鍑哄簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close" + <GlobalWindow title="鏂板缓鍏ュ簱鍗�" :visible.sync="isShowModal" :confirm-working="isLoading" width="900px" @close="close" @confirm="confirm"> <el-form :model="param" ref="form" :rules="rules"> <div class="df_ac"> - <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="parentId"> - <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�"> - <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option> + <el-form-item class="w3" label="鍏ュ簱浠撳簱" prop="warehouseId"> + <el-select :disabled="param.id" v-model="param.warehouseId" placeholder="璇烽�夋嫨"> + <el-option v-for="op in storeList" :key="op.id" :label="op.name" :value="op.id"></el-option> </el-select> </el-form-item> - <el-form-item class="w3" label="鍑哄簱鏃ユ湡"> - <el-date-picker type="date" v-model="param.getDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd" - placeholder="璇烽�夋嫨鍑哄簱鏃ユ湡"></el-date-picker> + <el-form-item class="w3" label="鍏ュ簱鏃ユ湡" prop="doneDate"> + <el-date-picker type="date" v-model="param.doneDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨鍏ュ簱鏃ユ湡"></el-date-picker> </el-form-item> - <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="parentId"> - <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�"> - <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option> + <el-form-item class="w3" label="鍏ュ簱绫诲瀷" prop="type"> + <el-select :disabled="param.id" v-model="param.type" placeholder="璇烽�夋嫨鍏ュ簱绫诲瀷"> + <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option> </el-select> </el-form-item> <el-form-item class="w3" label="澶勭悊浜�" prop="name"> - <el-input v-model="param.name" v-trim /> + <el-input v-model="param.createUserName" :disabled="true" v-trim /> </el-form-item> - <el-form-item class="w6" label="澶囨敞" prop="name"> - <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + <el-form-item class="w6" label="澶囨敞" prop="remark"> + <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim /> </el-form-item> </div> </el-form> @@ -32,18 +32,19 @@ <el-button type="primary" @click="handleOpenMaterial">閫夋嫨鐗╂枡</el-button> <el-table :data="list" stripe> <el-table-column align="center" label="搴忓彿" type="index" width="50" /> - <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column> - <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column> - <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column> - <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column> - <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px"> - <template v-slot="{row}"> - <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.aa" class="w100"></el-input> + <el-table-column prop="name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column> + <el-table-column prop="qrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column> + <el-table-column prop="brand" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column> + <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column> + <el-table-column prop="dealUserName" label="鍏ュ簱鏁伴噺" min-width="90px"> + <template v-slot="{ row }"> + <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.stock" + class="w100"></el-input> </template> </el-table-column> - <el-table-column prop="dealUserName" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鎿嶄綔" min-width="60px"> + <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column label="鎿嶄綔" min-width="60px"> <template v-slot="scope"> <span @click="handleDel(scope)" class="red pointer">鍒犻櫎</span> </template> @@ -57,52 +58,92 @@ <script> import GlobalWindow from '@/components/common/GlobalWindow' import AssetSel from './AssetSel' -import { create, fetchCateList, getInfoById } from '@/api/business/category.js' +import { fetchList as getStoreList } from '@/api/ywWarehouse' +import { ywOutinboundCreate } from '@/api/store/index' +import { StoreTypeOps, rules } from './config' +import { Message } from 'element-ui' export default { name: 'OperaCategoryWindow', components: { GlobalWindow, AssetSel }, data() { return { // 琛ㄥ崟鏁版嵁 - param: {}, + param: { + createUserName: this.$store.state.userInfo.username, + creator: this.$store.state.userInfo.id, + inOut: 0 + }, activeName: 'first', isShowModal: false, isShowSel: false, isLoading: false, // 楠岃瘉瑙勫垯 - rules: { - name: [{ required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' }], - }, - list: [{}], + rules, + storeList: [], + list: [], + StoreTypeOps: StoreTypeOps.filter(i => i.type == 0), dataList: [], } }, created() { + this.initData() + console.log(this.$store.state.userInfo) }, methods: { confirm() { - + this.$refs['form'].validate((valid) => { + if (valid) { + const { param, list } = this + if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅') + let count = 0 // 鍏ュ簱鏁伴噺蹇呭~ + list.forEach(item => { + if(!item.stock) count ++ + }) + if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍏ュ簱鏁伴噺') + this.isLoading = true + ywOutinboundCreate({ + ...param, + recordList: list + }).then(res => { + this.isLoading = false + Message.success('鎻愪氦鎴愬姛') + this.$emit('success') + this.close() + }, () => { + this.isLoading = false + }) + } + }) }, - getList() { - fetchCateList({ type: 5 }).then(res => { - this.dataList = res || [] + initData() { + getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => { + this.storeList = res.records || [] }) }, - changeSel() { - + changeSel(val) { + const list = val + list.forEach(item => { + const index = this.list.findIndex(i => i.id == item.id) + if(index == -1){ + item.materialId = item.id + item.multifile = null + this.list.push(item) + } + }) }, handleDel(val) { const index = val.$index this.list.splice(index, 1) - + }, handleOpenMaterial() { this.isShowSel = true this.$nextTick(() => { this.$refs.AssetSelRef.isShowModal = true + this.$refs.AssetSelRef.getList() }) }, close() { diff --git a/admin/src/views/stock/components/OutDetail.vue b/admin/src/views/stock/components/OutDetail.vue index ad73ba4..9a0db95 100644 --- a/admin/src/views/stock/components/OutDetail.vue +++ b/admin/src/views/stock/components/OutDetail.vue @@ -1,43 +1,46 @@ <template> - <GlobalWindow width="960px" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close" + <GlobalWindow width="960px" :showConfirm="false" title="鍑哄簱鍗曡鎯�" :visible.sync="visible" :confirm-working="isWorking" @close="close" @confirm="confirm"> <div class="main"> + <div class="title" style="color: #333333;"> + <span>鍑哄簱鍗曠紪鍙凤細{{ info.code }}</span> + </div> <div class="title"> - <span>宸ュ崟璇︽儏</span> + <span>鍩虹淇℃伅</span> </div> <div class="main_content"> <div class="list"> <div class="item"> <div class="la">鍑哄簱浠撳簱</div> - <div class="val">{{ info.projectName }}</div> + <div class="val">{{ info.warehouseName }}</div> </div> <div class="item"> <div class="la">鍑哄簱鏃ユ湡</div> - <div class="val">{{ info.categoryName }}</div> + <div class="val">{{ info.doneDate }}</div> </div> <div class="item"> <div class="la">鍑哄簱绫诲瀷</div> - <div class="val">{{ info.creatorName }}{{ info.creatorCompany ? "-" + info.creatorCompany : '' }}</div> + <div class="val" v-if="info.type || info.type == 0">{{ StoreTypeOps[info.type].name }}</div> </div> <div class="item"> <div class="la">澶勭悊浜�</div> - <div class="val">{{ info.creatorPhone || info.creatorMobile }}</div> + <div class="val">{{ info.createUserName }}</div> </div> - <div class="item"> + <div class="item" style="width: 66.6%;"> <div class="la">澶囨敞</div> - <div class="val">{{ info.createDate }}</div> + <div class="val">{{ info.remark }}</div> </div> </div> </div> <div class="title">鐗╂枡淇℃伅</div> - <el-table :data="list" stripe> - <el-table-column align="center" type="index" width="55" /> - <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column> - <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column> - <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table :data="info.recordList" stripe> + <el-table-column align="center" label="搴忓彿" type="index" width="55" /> + <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="100px"></el-table-column> + <el-table-column prop="materialQrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="100px"></el-table-column> + <el-table-column prop="materialBrand" label="鍝佺墝" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="materialUnitName" label="鍗曚綅" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="stock" label="鍑哄簱鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> </el-table> </div> </GlobalWindow> @@ -46,10 +49,8 @@ <script> import GlobalWindow from '@/components/common/GlobalWindow' import BaseOpera from '@/components/base/BaseOpera' -import { detailById, dispatchOrder, dealOrder } from '@/api/workorder/ywWorkorder' -import { getUserList } from '@/api/system/user' -import { Message, Loading } from 'element-ui' -import dayjs from 'dayjs' +import { ywOutinboundDetail } from '@/api' +import { StoreTypeOps } from './config' export default { components: { GlobalWindow @@ -57,21 +58,18 @@ extends: BaseOpera, data() { return { - id: '', visible: false, - info: {}, - list: [] + info: {recordList: []}, + StoreTypeOps } }, created() { - // this.getDetail() }, methods: { - getDetail() { - const { id } = this - detailById(id).then(res => { + getDetail(id) { + ywOutinboundDetail(id).then(res => { this.info = res }) }, diff --git a/admin/src/views/stock/components/OutEdit.vue b/admin/src/views/stock/components/OutEdit.vue index 3bc1a30..dd12706 100644 --- a/admin/src/views/stock/components/OutEdit.vue +++ b/admin/src/views/stock/components/OutEdit.vue @@ -3,25 +3,25 @@ @confirm="confirm"> <el-form :model="param" ref="form" :rules="rules"> <div class="df_ac"> - <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="parentId"> - <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�"> - <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option> + <el-form-item class="w3" label="鍑哄簱浠撳簱" prop="warehouseId"> + <el-select :disabled="param.id" v-model="param.warehouseId" placeholder="璇烽�夋嫨"> + <el-option v-for="op in storeList" :key="op.id" :label="op.name" :value="op.id"></el-option> </el-select> </el-form-item> - <el-form-item class="w3" label="鍑哄簱鏃ユ湡"> - <el-date-picker type="date" v-model="param.getDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd" + <el-form-item class="w3" label="鍑哄簱鏃ユ湡" prop="doneDate"> + <el-date-picker type="date" v-model="param.doneDate" format="yyyy-MM-dd" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨鍑哄簱鏃ユ湡"></el-date-picker> </el-form-item> - <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="parentId"> - <el-select :disabled="param.id" v-model="param.parentId" placeholder="涓嶅~涓哄垯涓�绾у垎绫�"> - <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></el-option> + <el-form-item class="w3" label="鍑哄簱绫诲瀷" prop="type"> + <el-select :disabled="param.id" v-model="param.type" placeholder="璇烽�夋嫨鍑哄簱绫诲瀷"> + <el-option v-for="op in StoreTypeOps" :key="op.id" :label="op.name" :value="op.id"></el-option> </el-select> </el-form-item> <el-form-item class="w3" label="澶勭悊浜�" prop="name"> - <el-input v-model="param.name" v-trim /> + <el-input v-model="param.createUserName" :disabled="true" v-trim /> </el-form-item> - <el-form-item class="w6" label="澶囨敞" prop="name"> - <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + <el-form-item class="w6" label="澶囨敞" prop="remark"> + <el-input v-model="param.remark" placeholder="璇疯緭鍏�" v-trim /> </el-form-item> </div> </el-form> @@ -32,18 +32,19 @@ <el-button type="primary" @click="handleOpenMaterial">閫夋嫨鐗╂枡</el-button> <el-table :data="list" stripe> <el-table-column align="center" label="搴忓彿" type="index" width="50" /> - <el-table-column prop="creatorName" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="categoryName" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column> - <el-table-column prop="createDate" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column> - <el-table-column prop="dealUserName" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column> - <el-table-column prop="dealUserName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column> + <el-table-column prop="name" label="鐗╂枡鍚嶇О" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column prop="code" label="鐗╂枡缂栫爜" show-overflow-tooltip min-width="90px"></el-table-column> + <el-table-column prop="qrcode" label="鏉″舰鐮�" show-overflow-tooltip min-width="70px"></el-table-column> + <el-table-column prop="brand" label="鍝佺墝" show-overflow-tooltip min-width="70px"></el-table-column> + <el-table-column prop="unitName" label="鍗曚綅" show-overflow-tooltip min-width="70px"></el-table-column> <el-table-column prop="dealUserName" label="鍑哄簱鏁伴噺" min-width="90px"> - <template v-slot="{row}"> - <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.aa" class="w100"></el-input> + <template v-slot="{ row }"> + <el-input oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 11)" v-model="row.stock" + class="w100"></el-input> </template> </el-table-column> - <el-table-column prop="dealUserName" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> - <el-table-column prop="dealUserName" label="鎿嶄綔" min-width="60px"> + <el-table-column prop="maxStock" label="搴撳瓨鏁伴噺" show-overflow-tooltip min-width="80px"></el-table-column> + <el-table-column label="鎿嶄綔" min-width="60px"> <template v-slot="scope"> <span @click="handleDel(scope)" class="red pointer">鍒犻櫎</span> </template> @@ -57,52 +58,91 @@ <script> import GlobalWindow from '@/components/common/GlobalWindow' import AssetSel from './AssetSel' -import { create, fetchCateList, getInfoById } from '@/api/business/category.js' +import { fetchList as getStoreList } from '@/api/ywWarehouse' +import { ywOutinboundCreate } from '@/api/store/index' +import { StoreTypeOps, rules } from './config' +import { Message } from 'element-ui' export default { name: 'OperaCategoryWindow', components: { GlobalWindow, AssetSel }, data() { return { // 琛ㄥ崟鏁版嵁 - param: {}, + param: { + createUserName: this.$store.state.userInfo.username, + creator: this.$store.state.userInfo.id, + inOut: 1 + }, activeName: 'first', isShowModal: false, isShowSel: false, isLoading: false, // 楠岃瘉瑙勫垯 - rules: { - name: [{ required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' }], - }, - list: [{}], + rules, + storeList: [], + list: [], + StoreTypeOps: StoreTypeOps.filter(i => i.type == 1), dataList: [], } }, created() { - + this.initData() }, methods: { confirm() { - - }, - getList() { - fetchCateList({ type: 5 }).then(res => { - this.dataList = res || [] - + this.$refs['form'].validate((valid) => { + if (valid) { + const { param, list } = this + if(list.length == 0) return Message.warning('璇峰厛閫夋嫨鐗╂枡淇℃伅') + let count = 0 // 鍑哄簱鏁伴噺蹇呭~ + list.forEach(item => { + if(!item.stock) count ++ + }) + if(count > 0) return Message.warning('璇疯緭鍏ユ纭殑鍑哄簱鏁伴噺') + this.isLoading = true + ywOutinboundCreate({ + ...param, + recordList: list + }).then(res => { + this.isLoading = false + Message.success('鎻愪氦鎴愬姛') + this.$emit('success') + this.close() + }, () => { + this.isLoading = false + }) + } }) }, - changeSel() { - + initData() { + getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => { + this.storeList = res.records || [] + }) + }, + changeSel(val) { + const list = val + list.forEach(item => { + if(this.list.indexOf(item.id) === -1){ + item.materialId = item.id + item.stock = null + this.list.push(item) + } + }) }, handleDel(val) { const index = val.$index this.list.splice(index, 1) - + }, handleOpenMaterial() { this.isShowSel = true this.$nextTick(() => { this.$refs.AssetSelRef.isShowModal = true + this.$refs.AssetSelRef.isOut = true + this.$refs.AssetSelRef.getList() + console.log('-----'); + }) }, close() { diff --git a/admin/src/views/stock/components/config.js b/admin/src/views/stock/components/config.js new file mode 100644 index 0000000..7b0333f --- /dev/null +++ b/admin/src/views/stock/components/config.js @@ -0,0 +1,18 @@ +export const StoreTypeOps = [ + { name: '閲囪喘鍏ュ簱', id: 0, type: 0 }, + { name: '棰嗙敤閫�鍥�', id: 1, type: 0 }, + { name: '璋冩暣鍏ュ簱', id: 2, type: 0 }, + { name: '鍏朵粬鍏ュ簱', id: 3, type: 0 }, + { name: '鐩樼泩鍏ュ簱', id: 4, type: 0 }, + { name: '棰嗙敤鍑哄簱', id: 5, type: 1 }, + { name: '浠撳簱鍑哄簱', id: 6, type: 1 }, + { name: '璋冩暣鍑哄簱', id: 7, type: 1 }, + { name: '閲囪喘鍑哄簱', id: 8, type: 1 }, + { name: '鍏朵粬鍑哄簱', id: 9, type: 1 }, + { name: '鐩樺嚭鍑哄簱', id: 10, type: 1 }, +] +export const rules = { + warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + doneDate: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + type: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], +} \ No newline at end of file diff --git a/admin/src/views/stock/in.vue b/admin/src/views/stock/in.vue index ee899e6..3d50b84 100644 --- a/admin/src/views/stock/in.vue +++ b/admin/src/views/stock/in.vue @@ -2,17 +2,22 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> - <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">鏂板缓鍑哄簱鍗�</el-button> + <el-button type="primary" @click="handleEdit()" v-permissions="['business:ywpatrolline:create']">鏂板缓鍏ュ簱鍗�</el-button> <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> </div> <el-table v-loading="loading" :data="list" stripe> - <el-table-column prop="platformName" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip /> - <el-table-column prop="platformGroupName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip /> - <el-table-column prop="carCodeFront" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip /> - <el-table-column prop="carCodeBack" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip /> - <el-table-column prop="param1" label="鍑哄簱鏁伴噺" min-width="120" show-overflow-tooltip /> - <el-table-column prop="param2" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip /> - <el-table-column prop="workTime" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip /> + <el-table-column prop="code" label="鍏ュ簱鍗曞彿" min-width="120" show-overflow-tooltip /> + <el-table-column prop="warehouseName" label="鍏ュ簱浠撳簱" min-width="100" show-overflow-tooltip /> + <el-table-column prop="typeName" label="鍏ュ簱绫诲瀷" min-width="100" show-overflow-tooltip /> + <el-table-column prop="doneDate" label="鍏ュ簱鏃ユ湡" min-width="110" show-overflow-tooltip /> + <el-table-column label="鍏ュ簱鏁伴噺" min-width="140"> + <template v-slot="{ row }"> + <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{ + item.materialUnitName }}</div> + </template> + </el-table-column> + <el-table-column prop="createUserName" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip /> + <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip /> <el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip> <template v-slot="{ row }"> <span @click="handleDetail(row)" class="primaryColor pointer">鏌ョ湅璇︽儏</span> @@ -36,7 +41,9 @@ import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) -import { platformLogPage, getPlatformGroupList } from '@/api' +import { ywOutinboundPage, ywOutinboundEx } from '@/api' +import { fetchList as getStoreList } from '@/api/ywWarehouse' +import { StoreTypeOps, rules } from './components/config' export default { components: { Pagination, @@ -54,26 +61,34 @@ page: 1, total: 0 }, - filters: {}, - list: [{}], + filters: { + inOut: 0 + }, + StoreTypeOps, + list: [], total: 0, queryFormConfig: { formItems: [ { - filed: 'carCodeFront', + filed: 'code', type: 'input', - label: '鍑哄簱鍗曞彿', + label: '鍏ュ簱鍗曞彿', }, { - filed: 'platformGroupId', + filed: 'warehouseId', type: 'select', label: '鎵�鍦ㄤ粨搴�', + labelCode: 'name', + valueCode: 'id', options: [] }, { - filed: 'carCodeFront', - type: 'input', - label: '鍑哄簱绫诲瀷', + filed: 'type', + type: 'select', + label: '鍏ュ簱绫诲瀷', + labelCode: 'name', + valueCode: 'id', + options: StoreTypeOps.filter(i => i.type == 0) }, ], online: true @@ -81,8 +96,8 @@ } }, created() { - // this.getList() - // this.getGroupList() + this.getList() + this.initData() }, methods: { handleSub() { @@ -98,45 +113,56 @@ this.$refs.InEditRef.isShowModal = true }) }, - handleDetail() { + handleDetail(row) { this.isShowDetail = true this.$nextTick(() => { this.$refs.InDetailRef.visible = true + this.$refs.InDetailRef.getDetail(row.id) }) }, - handleEx() { }, - getGroupList() { - getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => { - this.queryFormConfig.formItems[1].options = res.map(i => { - return { - value: i.id, - label: i.name - } + handleEx() { + this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵') + .then(() => { + this.loading = true + ywOutinboundEx({ + page: this.pagination.page, + capacity: 1000000, + model: this.filters + }) + .then(response => { + this.download(response) + }) + .catch(e => { + this.$tip.apiFailed(e) + }) + .finally(() => { + this.loading = false + }) }) - // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' }) + .catch(() => { }) + }, + initData() { + getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => { + this.queryFormConfig.formItems[1].options = res.records || [] }) }, getList(page) { const { pagination, filters } = this this.loading = true - if(page){pagination.page = page} - platformLogPage({ + if (page) { pagination.page = page } + ywOutinboundPage({ model: { ...filters, - queryStatus: '6,7,8', - beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, - beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, + inOut: 0 }, - sorts: [{ direction: 'DESC', property: 'param1' }], + // sorts: [{ direction: 'DESC', property: 'param1' }], capacity: pagination.pageSize, page: page, }).then(res => { this.loading = false this.list = res.records || [] this.list.forEach(item => { - item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫' - item.taskOrigin = 'WMS鑾峰彇' - item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�') + item.typeName = this.StoreTypeOps[item.type].name }) this.pagination.total = res.total || 0 }, () => { @@ -144,7 +170,7 @@ }) }, clear() { - this.filters = {} + this.filters = {inOut: 0} this.pagination.pageSize = 10 this.pagination.page = 1 this.getList() diff --git a/admin/src/views/stock/out.vue b/admin/src/views/stock/out.vue index 07aca66..7d2e98f 100644 --- a/admin/src/views/stock/out.vue +++ b/admin/src/views/stock/out.vue @@ -6,13 +6,17 @@ <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> </div> <el-table v-loading="loading" :data="list" stripe> - <el-table-column prop="platformName" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip /> - <el-table-column prop="platformGroupName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip /> - <el-table-column prop="carCodeFront" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip /> - <el-table-column prop="carCodeBack" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip /> - <el-table-column prop="param1" label="鍑哄簱鏁伴噺" min-width="120" show-overflow-tooltip /> - <el-table-column prop="param2" label="鎿嶄綔浜�" min-width="90" show-overflow-tooltip /> - <el-table-column prop="workTime" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip /> + <el-table-column prop="code" label="鍑哄簱鍗曞彿" min-width="120" show-overflow-tooltip /> + <el-table-column prop="warehouseName" label="鍑哄簱浠撳簱" min-width="100" show-overflow-tooltip /> + <el-table-column prop="typeName" label="鍑哄簱绫诲瀷" min-width="100" show-overflow-tooltip /> + <el-table-column prop="doneDate" label="鍑哄簱鏃ユ湡" min-width="110" show-overflow-tooltip /> + <el-table-column label="鍑哄簱鏁伴噺" min-width="140"> + <template v-slot="{ row }"> + <div v-for="item in row.recordList">{{ item.materialName }}[{{ item.materialCode }}]*{{ item.stock }}{{ item.materialUnitName }}</div> + </template> + </el-table-column> + <el-table-column prop="createUserName" label="棰嗙敤浜�" min-width="90" show-overflow-tooltip /> + <el-table-column prop="createDate" label="鎿嶄綔鏃堕棿" min-width="140" show-overflow-tooltip /> <el-table-column prop="workTime" label="鎿嶄綔" min-width="80" show-overflow-tooltip> <template v-slot="{ row }"> <span @click="handleDetail(row)" class="primaryColor pointer">鏌ョ湅璇︽儏</span> @@ -24,19 +28,21 @@ </div> <!-- --> <OutEdit v-if="isShowEdit" @close="isShowEdit = false" @success="getList" ref="OutEditRef" /> - <OutDetail v-if="isShowDetail" ref="OutDetailRef" /> + <OutDetail v-if="isShowDetail" ref="InDetailRef" /> </div> </template> <script> import Pagination from '@/components/common/Pagination' import QueryForm from '@/components/common/QueryForm' -import OutEdit from './components/OutEdit' -import OutDetail from './components/OutDetail' +import OutEdit from './components/OutEdit.vue' +import OutDetail from './components/OutDetail.vue' import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) -import { platformLogPage, getPlatformGroupList } from '@/api' +import { ywOutinboundPage } from '@/api' +import { fetchList as getStoreList } from '@/api/ywWarehouse' +import { StoreTypeOps, rules } from './components/config' export default { components: { Pagination, @@ -54,26 +60,34 @@ page: 1, total: 0 }, - filters: {}, - list: [{}], + filters: { + inOut: 1 + }, + StoreTypeOps, + list: [], total: 0, queryFormConfig: { formItems: [ { - filed: 'carCodeFront', + filed: 'code', type: 'input', label: '鍑哄簱鍗曞彿', }, { - filed: 'platformGroupId', + filed: 'warehouseId', type: 'select', label: '鎵�鍦ㄤ粨搴�', + labelCode: 'name', + valueCode: 'id', options: [] }, { - filed: 'carCodeFront', - type: 'input', + filed: 'type', + type: 'select', label: '鍑哄簱绫诲瀷', + labelCode: 'name', + valueCode: 'id', + options: StoreTypeOps.filter(i => i.type == 0) }, ], online: true @@ -81,8 +95,8 @@ } }, created() { - // this.getList() - // this.getGroupList() + this.getList() + this.initData() }, methods: { handleSub() { @@ -98,45 +112,55 @@ this.$refs.OutEditRef.isShowModal = true }) }, - handleDetail() { + handleDetail(row) { this.isShowDetail = true this.$nextTick(() => { - this.$refs.OutDetailRef.visible = true + this.$refs.InDetailRef.visible = true + this.$refs.InDetailRef.getDetail(row.id) }) }, - handleEx() { }, - getGroupList() { - getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => { - this.queryFormConfig.formItems[1].options = res.map(i => { - return { - value: i.id, - label: i.name - } + handleEx() { + this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵') + .then(() => { + this.loading = true + ywOutinboundEx({ + page: this.pagination.page, + capacity: 1000000, + model: this.filters + }) + .then(response => { + this.download(response) + }) + .catch(e => { + this.$tip.apiFailed(e) + }) + .finally(() => { + this.loading = false + }) }) - // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' }) + .catch(() => { }) + }, + initData() { + getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => { + this.queryFormConfig.formItems[1].options = res.records || [] }) }, getList(page) { const { pagination, filters } = this this.loading = true if(page){pagination.page = page} - platformLogPage({ + ywOutinboundPage({ model: { - ...filters, - queryStatus: '6,7,8', - beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, - beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, + ...filters }, - sorts: [{ direction: 'DESC', property: 'param1' }], + // sorts: [{ direction: 'DESC', property: 'param1' }], capacity: pagination.pageSize, page: page, }).then(res => { this.loading = false this.list = res.records || [] this.list.forEach(item => { - item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫' - item.taskOrigin = 'WMS鑾峰彇' - item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�') + item.typeName = this.StoreTypeOps[item.type].name }) this.pagination.total = res.total || 0 }, () => { @@ -144,7 +168,9 @@ }) }, clear() { - this.filters = {} + this.filters = { + inOut: 1 + } this.pagination.pageSize = 10 this.pagination.page = 1 this.getList() diff --git a/admin/src/views/stock/query.vue b/admin/src/views/stock/query.vue index e46add8..f93e7be 100644 --- a/admin/src/views/stock/query.vue +++ b/admin/src/views/stock/query.vue @@ -2,7 +2,7 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> - <el-button v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> + <el-button @click="handleEx" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> </div> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="materialId" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip /> @@ -25,7 +25,7 @@ import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) -import { fetchList } from '@/api/ywStock' +import { ywStockPage,ywStockPageEx } from '@/api/store/index' export default { components: { Pagination, @@ -72,7 +72,7 @@ getList(page) { const { pagination, filters } = this this.loading = true - fetchList({ + ywStockPage({ model: { ...filters }, @@ -86,6 +86,27 @@ this.loading = false }) }, + handleEx() { + this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵') + .then(() => { + this.loading = true + ywStockPageEx({ + page: this.pagination.page, + capacity: 1000000, + model: this.filters + }) + .then(response => { + this.download(response) + }) + .catch(e => { + this.$tip.apiFailed(e) + }) + .finally(() => { + this.loading = false + }) + }) + .catch(() => { }) + }, clear() { this.filters = {} this.pagination.pageSize = 10 diff --git a/admin/src/views/stock/record.vue b/admin/src/views/stock/record.vue index f7f37f0..b3300bf 100644 --- a/admin/src/views/stock/record.vue +++ b/admin/src/views/stock/record.vue @@ -2,19 +2,35 @@ <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> <div class="mt20"> - <el-button type="primary" @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> + <el-button @click="handleEx()" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> </div> <el-table v-loading="loading" :data="list" stripe> - <el-table-column prop="platformName" label="鍗曟嵁鏃ユ湡" min-width="100" show-overflow-tooltip /> - <el-table-column prop="platformName" label="璧勪骇缂栫爜" min-width="100" show-overflow-tooltip /> - <el-table-column prop="platformGroupName" label="璧勪骇鍚嶇О" min-width="100" show-overflow-tooltip /> - <el-table-column prop="carCodeFront" label="璧勪骇鍒嗙被" min-width="100" show-overflow-tooltip /> - <el-table-column prop="carCodeBack" label="鏁伴噺" min-width="80" show-overflow-tooltip /> - <el-table-column prop="param1" label="绫诲瀷" min-width="80" show-overflow-tooltip /> - <el-table-column prop="workTime" label="浠撳簱" min-width="90" show-overflow-tooltip /> - <el-table-column prop="workTime" label="鍗曟嵁缂栧彿" min-width="120" show-overflow-tooltip /> - <el-table-column prop="workTime" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip /> - <el-table-column prop="workTime" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip /> + <el-table-column prop="doneDate" label="鍗曟嵁鏃ユ湡" min-width="90" show-overflow-tooltip /> + <el-table-column prop="materialCode" label="鐗╂枡缂栫爜" min-width="90" show-overflow-tooltip /> + <el-table-column prop="materialName" label="鐗╂枡鍚嶇О" min-width="90" show-overflow-tooltip /> + <el-table-column prop="carCodeFront" label="鐗╂枡鍒嗙被" min-width="120" show-overflow-tooltip> + <template v-slot="{ row }"> + <span>{{ row.categoryParentName }}/{{ row.categoryName }}</span> + </template> + </el-table-column> + <el-table-column prop="carCodeBack" label="鏁伴噺" min-width="80" show-overflow-tooltip> + <template v-slot="{ row }"> + <span>{{ row.stock }}{{ row.materialUnitName }}</span> + </template> + </el-table-column> + <el-table-column prop="param1" label="绫诲瀷" min-width="70" show-overflow-tooltip> + <template v-slot="{ row }"> + <span v-if="row.type || row.type == 0">{{ StoreTypeOps[row.type] }}</span> + </template> + </el-table-column> + <el-table-column prop="warehouseName" label="浠撳簱" min-width="90" show-overflow-tooltip /> + <el-table-column prop="code" label="鍗曟嵁缂栧彿" min-width="120" show-overflow-tooltip> + <template v-slot="{ row }"> + <span class="primaryColor">{{ row.code }}</span> + </template> + </el-table-column> + <el-table-column prop="createUserName" label="鍒涘缓浜�" min-width="80" show-overflow-tooltip /> + <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip /> </el-table> <div class="mt20"> <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> @@ -28,7 +44,9 @@ import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) -import { platformLogPage, getPlatformGroupList } from '@/api' +import { ywOutinboundRecord, ywOutinboundRecordEx } from '@/api' +import { fetchList as getStoreList } from '@/api/ywWarehouse' +import { StoreTypeOps } from './components/config' export default { components: { Pagination, @@ -45,29 +63,34 @@ filters: {}, list: [], total: 0, + StoreTypeOps, queryFormConfig: { formItems: [ { - filed: 'carCodeFront', + filed: 'materialCode', type: 'input', - label: '璧勪骇缂栫爜', + label: '鐗╂枡缂栫爜', }, { - filed: 'platformGroupId', + filed: 'warehouseId', type: 'select', + labelCode: 'name', + valueCode: 'id', label: '鎵�鍦ㄤ粨搴�', options: [] }, { - filed: 'carCodeFront', + filed: 'code', type: 'input', label: '鍗曟嵁缂栧彿', }, { - filed: 'platformGroupId', + filed: 'type', type: 'select', label: '鍗曟嵁绫诲瀷', - options: [] + labelCode: 'name', + valueCode: 'id', + options: StoreTypeOps }, { filed: 'selDate', @@ -76,7 +99,7 @@ }, { filed: 'selTime', - type: 'daterange', + type: 'datetimerange', label: '鍒涘缓鏃堕棿', }, ], @@ -85,8 +108,8 @@ } }, created() { - // this.getList() - // this.getGroupList() + this.getList() + this.initData() }, methods: { handleSub() { @@ -96,39 +119,58 @@ } }) }, - handleEx() { }, - getGroupList() { - getPlatformGroupList({ queryData: 0, queryType: 0 }).then(res => { - this.queryFormConfig.formItems[1].options = res.map(i => { - return { - value: i.id, - label: i.name - } + handleEx() { + this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵') + .then(() => { + this.loading = true + ywOutinboundRecordEx({ + page: this.pagination.page, + capacity: 1000000, + model: this.filters + }) + .then(response => { + this.download(response) + }) + .catch(e => { + this.$tip.apiFailed(e) + }) + .finally(() => { + this.loading = false + }) }) - // this.queryFormConfig.formItems[1].options.unshift({ value: '', label: '鍏ㄩ儴鏈堝彴缁�' }) + .catch(() => { }) + }, + initData() { + getStoreList({ capacity: 9999, page: 1, model: {} }).then(res => { + this.queryFormConfig.formItems[1].options = res.records || [] }) }, getList(page) { const { pagination, filters } = this this.loading = true - platformLogPage({ + if (filters.selDate && filters.selDate.length > 0) { + filters.doneDateStart = filters.selDate[0] + filters.doneDateEnd = filters.selDate[1] + } else { + filters.doneDateStart = null + filters.doneDateEnd = null + } + if (filters.selTime && filters.selTime.length > 0) { + filters.createDateStart = filters.selTime[0] + filters.createDateEnd = filters.selTime[1] + } else { + filters.createDateStart = null + filters.createDateEnd = null + } + ywOutinboundRecord({ model: { - ...filters, - queryStatus: '6,7,8', - beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, - beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, + ...filters }, - sorts: [{ direction: 'DESC', property: 'param1' }], capacity: pagination.pageSize, page: page || pagination.page, }).then(res => { this.loading = false this.list = res.records || [] - this.list.forEach(item => { - item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫' - item.taskOrigin = 'WMS鑾峰彇' - item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�') - }) this.pagination.total = res.total || 0 }, () => { this.loading = false -- Gitblit v1.9.3