From 332c012e7336f2996c4fe5c8c110d00713c1bde2 Mon Sep 17 00:00:00 2001 From: haoyahui <2032914783@qq.com> Date: 星期六, 11 十一月 2023 18:51:33 +0800 Subject: [PATCH] 采购单,采购明细,库存管理,出入库,调拨管理,库存盘点 --- admin-web/src/views/foundation/classification/edit.vue | 3 admin-web/src/views/stock/inventorycount/inventorytask/index.vue | 260 +- admin-web/src/views/stock/transfer/transferissue/detail.vue | 128 + admin-web/src/views/foundation/store/edit.vue | 173 + admin-web/src/views/foundation/classification/index.vue | 43 admin-web/src/views/stock/procure/purchaseOrder/detail.vue | 201 + admin-web/src/views/stock/scrap/itemScrapping/edit.vue | 486 ++++ admin-web/src/views/stock/transfer/transferApplication/index.vue | 620 ++--- admin-web/src/views/stock/accessStock/outbound/detail.vue | 116 + admin-web/src/views/foundation/material/edit.vue | 2 admin-web/src/views/stock/accessStock/outbound/index.vue | 587 +--- admin-web/src/views/stock/inventorycount/inventorytask/edit.vue | 115 admin-web/src/views/stock/index.scss | 188 + admin-web/src/views/stock/inventorycount/inventorytask/inventory.vue | 80 admin-web/src/views/stock/accessStock/outbound/edit.vue | 516 ++++ admin-web/src/views/stock/procure/receiptDetails/index.vue | 303 +- admin-web/src/views/stock/procure/purchaseOrder/index.vue | 272 - admin-web/src/views/stock/transfer/transferApplication/edit.vue | 516 ++++ admin-web/src/views/stock/transfer/transferissue/index.vue | 616 ++--- admin-web/src/views/stock/scrap/itemScrapping/detail.vue | 120 + admin-web/src/api/stock/procure/purchaseOrder.js | 8 admin-web/src/views/stock/procure/purchaseOrder/edit.vue | 141 admin-web/src/views/stock/scrap/itemScrapping/index.vue | 585 +--- admin-web/src/views/stock/transfer/transferissue/edit.vue | 495 ++++ admin-web/src/views/stock/transfer/transferApplication/detail.vue | 128 + admin-web/src/views/stock/accessStock/outboundDetails/index.vue | 66 26 files changed, 4,522 insertions(+), 2,246 deletions(-) diff --git a/admin-web/src/api/stock/procure/purchaseOrder.js b/admin-web/src/api/stock/procure/purchaseOrder.js index 7199f73..82180e6 100644 --- a/admin-web/src/api/stock/procure/purchaseOrder.js +++ b/admin-web/src/api/stock/procure/purchaseOrder.js @@ -64,18 +64,18 @@ params, }); } -export function procureDel(data) { +export function procureDel(params) { return request({ url: '/pc/whForm/procure/del', method: 'delete', - data, + params, }); } // 鍏ュ簱 -export function procureIncome(data) { +export function procureIncome(params) { return request({ url: '/pc/whForm/procure/income', method: 'post', - data, + params, }); } \ No newline at end of file diff --git a/admin-web/src/views/foundation/classification/edit.vue b/admin-web/src/views/foundation/classification/edit.vue index 808e3f7..2669df8 100644 --- a/admin-web/src/views/foundation/classification/edit.vue +++ b/admin-web/src/views/foundation/classification/edit.vue @@ -1,7 +1,7 @@ <template> <win-sm :title="setting.title" @close="close" :width="'800px'"> <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px"> - <el-form-item label="涓婄骇鍒嗙被" prop="fatherCategoryName" :key="key"> + <el-form-item v-if="setting.pid" label="涓婄骇鍒嗙被" prop="fatherCategoryName" :key="key"> <el-input v-model="formData.fatherCategoryName" clearable @@ -100,6 +100,7 @@ getEditInfo(id) {}, // 鍒嗙被鍚嶇О鑾峰彇 getCategoryName() { + if(!this.formData.fatherCategoryId) return getCategoryDetail({ id: this.formData.fatherCategoryId }).then((res) => { this.formData.fatherCategoryName = res.categoryName; this.key = Math.random(); diff --git a/admin-web/src/views/foundation/classification/index.vue b/admin-web/src/views/foundation/classification/index.vue index 6913db5..59bf55a 100644 --- a/admin-web/src/views/foundation/classification/index.vue +++ b/admin-web/src/views/foundation/classification/index.vue @@ -17,7 +17,12 @@ </el-col> </el-row> <!--娣诲姞/缂栬緫寮圭獥--> - <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="refreshData" /> + <edit + v-if="editSetting.show" + :setting="editSetting" + @close="editSetting.show = false" + @search="refreshData" + /> </el-card> </el-container> </el-container> @@ -40,8 +45,8 @@ import { getTree } from '@/api/foudation/classification'; import myImport from '@/views/components/myImport'; import { getBaseUrl } from '@/utils/base'; -import {getType} from '@/api/system/dict/type' -import {getDicts} from '@/api/system/dict/data' +import { getType } from '@/api/system/dict/type'; +import { getDicts } from '@/api/system/dict/data'; export default { name: 'index', @@ -178,13 +183,13 @@ // 鑾峰彇鏈烘瀯鏍� this.initTreeData(); // 绫诲埆瀛楀吀 - getDicts('GOODS_PRICE').then(res=>{ - this.items[1].options = res.map(v=>{ - v.label=v.dict_label - v.value=v.dict_value - return v - }) - }) + getDicts('GOODS_PRICE').then((res) => { + this.items[1].options = res.map((v) => { + v.label = v.dict_label; + v.value = v.dict_value; + return v; + }); + }); }, methods: { //瀵煎叆 @@ -241,15 +246,17 @@ .catch(() => {}); }, showAdd() { - if (!this.editSetting.orgId) { - this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') - } else { - this.editSetting.pid = this.p.id; + // if (!this.editSetting.orgId) { + // this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') + // } else { + if (this.p && this.p) { + this.editSetting.pid = this.p.id; + } this.editSetting.id = null; this.editSetting.info = null; this.editSetting.title = '鏂板'; this.editSetting.show = true; - } + // } }, showAudit(row) { this.editSetting.id = row.id; @@ -280,14 +287,14 @@ // 鏌ヨtable鍒楄〃 search(pageNum) { if (pageNum != undefined) { - this.$refs.myTable.search({pageNum}); + this.$refs.myTable.search({ pageNum }); } else { this.$refs.myTable.search(); } }, refreshData() { - this.initTreeData() - this.search() + this.initTreeData(); + this.search(); }, fifterForm(params) { this.filterFrom = Object.assign(this.filterFrom, params); diff --git a/admin-web/src/views/foundation/material/edit.vue b/admin-web/src/views/foundation/material/edit.vue index 9b014dd..ae949f5 100644 --- a/admin-web/src/views/foundation/material/edit.vue +++ b/admin-web/src/views/foundation/material/edit.vue @@ -59,7 +59,7 @@ radio1: '', code: '', name: '', - states: '', + states: 1, summary: '', categoryId: null, models:[ diff --git a/admin-web/src/views/foundation/store/edit.vue b/admin-web/src/views/foundation/store/edit.vue index 1445921..c60e02f 100644 --- a/admin-web/src/views/foundation/store/edit.vue +++ b/admin-web/src/views/foundation/store/edit.vue @@ -1,19 +1,27 @@ <template> <win-sm :title="setting.title" @close="close" :width="'800px'"> <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px"> - <el-form-item label="缂栧彿" prop="code"> - <el-input disabled v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-form-item label="缂栧彿" prop="warehouseCode"> + <el-input disabled v-model="formData.warehouseCode" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> <el-form-item label="浠撳簱鍚嶇О" prop="warehouseName"> - <el-input v-model="formData.warehouseName" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-input v-model="formData.warehouseName" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> <el-form-item label="浠撳簱绫诲瀷" prop="classificationCode"> - <el-select v-model="formData.classificationCode" clearable placeholder="璇烽�夋嫨" style="width: 100%"> - <el-option v-for="item in classList" :key="item.dict_code" :label="item.dict_label" :value="item.dict_code"></el-option> + <el-select v-model="formData.classificationCode" clearable placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option + v-for="item in classList" + :key="item.dict_code" + :label="item.dict_label" + :value="item.dict_code" + ></el-option> </el-select> </el-form-item> - <el-form-item label="鍦板潃" > - <el-input v-model="formData.adress" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-form-item label="鎵�灞炴満鏋�" prop="agencyIds"> + <el-cascader v-model="formData.agencyIds" :options="treeList" :props="{checkStrictly: true,value:'id'}" @change="handleChange" style="width: 100%"></el-cascader> + </el-form-item> + <el-form-item label="鍦板潃"> + <el-input v-model="formData.adress" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> <el-form-item label="鐘舵��" prop="states"> <el-radio-group v-model="formData.states"> @@ -23,100 +31,145 @@ </el-form-item> </el-form> <div slot="footer" align="center" class="dialog-footer"> - <my-button name="鍙栨秷" site="form" @click="close"/> - <my-button name="淇濆瓨" site="form" @click="save"/> + <my-button name="鍙栨秷" site="form" @click="close" /> + <my-button name="淇濆瓨" site="form" @click="save" /> </div> </win-sm> </template> <script> -import winSm from '@/components/win/win-sm' -import myButton from '@/components/myButton/myButton' -import * as finsystenant from '@/api/baseSetting/finsystenant' +import winSm from '@/components/win/win-sm'; +import myButton from '@/components/myButton/myButton'; +import * as finsystenant from '@/api/baseSetting/finsystenant'; export default { - components: {winSm, myButton}, + components: { winSm, myButton }, props: { setting: { type: Object, - default: () => { - } - } + default: () => {}, + }, }, data() { return { - classList:[], + classList: [], + treeList: [], checkAll: false, checkedList: [], formData: { + warehouseCode:null, classificationId: null, + classificationCode:null, + states: 1, + agencyIds:[], + agencyId:'' }, rules: { - warehouseName: [ - {required: true, message: '璇疯緭鍏�', trigger: 'blur'} - ], - name: [ - {required: true, message: '璇疯緭鍏�', trigger: 'blur'} - ], - states: [ - {required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'blur'} - ] - } - } + warehouseName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + classificationCode: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + agencyIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }], + states: [{ required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'blur' }], + }, + }; }, created() { - this.class_List() - if(this.setting.info){ - this.formData = Object.assign({},JSON.parse(this.setting.info)) + this.class_List(); + this.tree_List(); + if (this.setting.info) { + this.formData = Object.assign({}, JSON.parse(this.setting.info)); } }, methods: { - class_List (){ - finsystenant.classList().then(res => { + class_List() { + finsystenant.classList().then((res) => { if (res) { - console.log(res,'res'); - this.classList = res + console.log(res, 'res'); + this.classList = res; } - }) + }); }, - getEditInfo(id){ - + tree_List() { + finsystenant.getTree().then((res) => { + if (res) { + this.treeList = res; + this.$set(this.formData,'agencyIds',this.findParentIds(this.treeList,this.formData.agencyId)) + } + }); }, + handleChange(e){ + this.formData.agencyId = e[e.length-1] + }, + getEditInfo(id) {}, close() { - this.$emit('close') + this.$emit('close'); }, save() { this.$refs.ruleForm.validate((valid) => { if (valid) { - const params = Object.assign({}, this.formData) - if(this.setting.id){ + const params = Object.assign({}, this.formData); + if (this.setting.id) { // 缂栬緫鎺ュ彛 - finsystenant.editstore(params).then(res => { + finsystenant.editstore(params).then((res) => { if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); } else { - this.$message.error('淇濆瓨澶辫触') + this.$message.error('淇濆瓨澶辫触'); } - }) - }else{ - params.orgId = this.setting.orgId - finsystenant.addstore(params).then(res => { + }); + } else { + params.orgId = this.setting.orgId; + finsystenant.addstore(params).then((res) => { if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); } else { - this.$message.error('淇濆瓨澶辫触') + this.$message.error('淇濆瓨澶辫触'); } - }) + }); } } else { - this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��') + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); } - }) - } - } -} + }); + }, + // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁� + findParentIds(dataSource, nodeId) { + const parentIds = [nodeId]; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + + // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣 + function traverse(node, nodeId) { + if (node.id === nodeId) { + // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣 + return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + } + + if (node.children) { + // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐� + for (const childNode of node.children) { + if (traverse(childNode, nodeId)) { + // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + parentIds.unshift(node.id); + return true; + } + } + } + + return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse + } + + // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣 + for (const node of dataSource) { + if (traverse(node, nodeId)) { + // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜� + break; + } + } + + return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + }, + }, +}; </script> diff --git a/admin-web/src/views/stock/accessStock/outbound/detail.vue b/admin-web/src/views/stock/accessStock/outbound/detail.vue new file mode 100644 index 0000000..c973e30 --- /dev/null +++ b/admin-web/src/views/stock/accessStock/outbound/detail.vue @@ -0,0 +1,116 @@ +<template> + <win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'"> + <el-row :gutter="20"> + <el-col :span="8"> + <span>鍑哄簱鍗曞彿锛�</span> + <span>{{ detail.businessFormCode }}</span> + </el-col> + <el-col :span="8"> + <span>鍑哄簱浠撳簱锛�</span> + <span>{{ detail.warehouseName }}</span> + </el-col> + <el-col :span="8"> + <span>鎵�灞炴満鏋勶細</span> + <span>{{ detail.agencyName }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col :span="8"> + <span>鍒涘缓浜猴細</span> + <span>{{ detail.buyerName }}</span> + </el-col> + <el-col :span="8"> + <span>鍑哄簱鏃堕棿锛�</span> + <span>{{ detail.incomeTime | formatTime }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col class="img-row" :span="24"> + <span>鍑哄簱鎵嬬画锛�</span> + <div class="img-box"></div> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex"> + <el-row :gutter="20"> + <el-col :span="8"> + <span>鐗╁搧鍒嗙被锛�</span> + <span>{{ goodsItem.baseCategoryName }}</span> + </el-col> + <el-col :span="8"> + <span>鐗╁搧鍚嶇О锛�</span> + <span>{{ goodsItem.goodsTemplateName }}</span> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px"> + <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ scope.row.baseGoodsModelsName }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="counts" label="鍑哄簱鏁伴噺" align="center"> + <template slot-scope="scope"> + {{ scope.row.counts }} + </template> + </el-table-column> + <el-table-column prop="counts" label="閲戦" align="center"> + <template slot-scope="scope"> + {{ (scope.row.price * scope.row.counts).toFixed(2) }} + </template> + </el-table-column> + </el-table> + </div> + </win-md> +</template> +<script> +import { procureDetail } from '@/api/stock/procure/purchaseOrder'; +import winMd from '@/components/win/win-md'; +import * as DateFormatter from '@/utils/DateFormatter'; + +export default { + components: { winMd }, + + props: { + setting: { + type: Object, + default: () => {}, + }, + }, + data() { + return { + detail: { + baseCategoryName: '', + businessFormCode: '', + goodsTemplateName: '', + agencyId: '', + agencyName: '', + states: '', + createName: '', + time: '', + procureGoods: [{}, {}], + }, + }; + }, + filters: { + formatTime(time) { + if (!time) return; + return DateFormatter.LongToDateTime(time); + }, + }, + created() { + procureDetail({ id: this.setting.id }).then((res) => { + this.detail = res; + }); + }, + methods: { + close() {}, + }, +}; +</script> +<style lang="scss" scoped> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/accessStock/outbound/edit.vue b/admin-web/src/views/stock/accessStock/outbound/edit.vue new file mode 100644 index 0000000..22d1448 --- /dev/null +++ b/admin-web/src/views/stock/accessStock/outbound/edit.vue @@ -0,0 +1,516 @@ +<template> + <win-md class="stock-edit" :title="`${setting.title}鍑哄簱鍑哄簱`" @close="close" :width="'800px'"> + <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> + <div class="main-w"> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="鍑哄簱浠撳簱" prop="warehouseId"> + <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="鍑哄簱鏃堕棿" prop="procureTime"> + <el-date-picker + v-model="formData.procureTime" + type="datetime" + value="yyyy-MM-dd HH:mm:ss" + value-format="yyyyMMddHHmmss" + placeholder="璇烽�夋嫨鏃ユ湡" + style="width: 100%" + > + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="鍑哄簱鎵嬬画" prop="procureDoc"> + <upload :settings="uploadSettings" @on-change="uploadChange"></upload> + </el-form-item> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex"> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍒嗙被" + :prop="`procureGoods[${goodsIndex}].baseCategoryIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-cascader + v-model="goodsItem.baseCategoryIds" + :options="categoryOptions" + :props="{ value: 'id' }" + @change="categoryChange($event, goodsIndex)" + style="width: 100%" + ></el-cascader> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍚嶇О" + :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.baseGoodsTemplateId" + placeholder="璇峰厛鎷╃墿鍝佸垎绫�" + filterable + :disabled="!goodsItem.baseCategoryId" + style="width: 100%" + @change="goodsTemplateChange($event, goodsIndex)" + > + <el-option + v-for="item in goodsItem.goodsOptions" + :key="item.id" + :label="item.goodsName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="瑙勬牸鍨嬪彿" + :prop="`procureGoods[${goodsIndex}].modelsIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.modelsIds" + multiple + placeholder="璇峰厛鎷╃墿鍝佸悕绉�" + :disabled="!goodsItem.baseCategoryId" + @change="modelChange($event, goodsIndex)" + @remove-tag="modelRemoveTag($event, goodsIndex)" + style="width: 100%" + > + <el-option + v-for="item in goodsItem.modelsOptions" + :key="item.id" + :label="item.modelName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true"> + <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center"> + <template slot-scope="scope">{{ }} + {{ scope.row.worehouseCount }} + </template> + </el-table-column> + <el-table-column prop="counts" label="鍑哄簱鏁伴噺" align="center"> + <template slot-scope="scope"> + <el-input + type="number" + v-model="scope.row.counts" + @change="countsChange($event, goodsIndex,scope.$index)" + ></el-input> + </template> + </el-table-column> + </el-table> + <div class="btn-group"> + <el-button + v-if="formData.procureGoods.length > 1" + name="绉婚櫎" + type="danger" + plain + size="mini" + @click="removeGoods(goodsIndex)" + >绉婚櫎</el-button + > + <el-button + v-if="formData.procureGoods.length - 1 == goodsIndex" + name="鏂板鐗╁搧" + type="primary" + plain + size="mini" + @click="addGoods" + >鏂板鐗╁搧</el-button + > + </div> + </div> + </div> + </el-form> + <div slot="footer" align="center" class="dialog-footer"> + <my-button name="鍙栨秷" site="form" @click="close" /> + <my-button name="淇濆瓨" site="form" @click="handleSubmit" /> + </div> + </win-md> +</template> +<script> +import { + goodsTemplate, + procureAdd, + procureEdit, + selectTenantWarehouse, + goodsModel, + procureDetail, +} from '@/api/stock/procure/purchaseOrder'; +import { getTree } from '@/api/foudation/classification'; +import MyButton from '@/components/myButton/myButton'; +import winMd from '@/components/win/win-md'; +import upload from '@/components/upload/index'; +import { getUploadUrl } from '@/utils/base'; + +import SettingIplatform from '../../../../../public/static/config'; + +export default { + components: { MyButton, winMd, upload }, + props: { + setting: { + type: Object, + default: () => {}, + }, + }, + data() { + return { + visible: false, + loading: false, + buyTypeOptions: [ + { + label: '闆嗛噰', + value: '1', + }, + { + label: '鑷噰', + value: '2', + }, + ], + warehouses: [], // 鍑哄簱浠撳簱鍒楄〃 + categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 + modelList: [], //鍨嬪彿鍒楄〃 + formData: { + warehouseId: '', // 鍑哄簱浠撳簱id + procureTime: '', // 鍑哄簱鏃堕棿 + buyType: '2', // 鍑哄簱鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛� + procureGoods: [], + }, + goodsItem: { + whFormProcureId: '', // 鍑哄簱鍗旾D + baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 + baseCategoryId: '', // 鍒嗙被缂栧彿 + baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿 + goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О + supplier: '', // 渚涘簲鍟� + sort: '', // 鏄剧ず椤哄簭 + goodsOptions: [], // 鐗╁搧鍒楄〃select + modelsOptions: [], //瑙勬牸鍨嬪彿select + models: [], // 鐗╁搧鍚嶇О + modelsIds: [], //瑙勬牸鍨嬪彿 + }, + modelsItem: { + baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿 + price: 0, // 鍗曚环(鍑哄簱闇�瑕侊紝璋冩嫧涓嶉渶瑕�) + worehouseCount: 0, + counts: 0, // 鎿嶄綔鏁伴噺 + supplier: '', // 渚涘簲鍟� + unit: null, //鍗曚綅 + }, + rules: { + warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + + // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], + baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + }, + + uploadSettings: { + title: '涓婁紶', + max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M + num: 2, // 鏀寔涓婁紶鍥剧墖涓暟 + accept: '.jpg,.png', // 闄愬埗鏍煎紡 + tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb` + uploadUrl: getUploadUrl(), // 涓婁紶璺緞 + multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶 + disabled: false, // 鏄惁绂佺敤 + type: 'text', // text/picture + }, + }; + }, + created() { + this.init(); + }, + methods: { + async init() { + this.getWarehouseList(); + this.getgoodsTemplate(); + this.getgoodsModel(); + // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 + const treeRes = await getTree(); + this.categoryOptions = this.removeEmptyChildren(treeRes); + if (this.setting.id) { + const detail = await procureDetail({ id: this.setting.id }); + this.formData = Object.assign(this.formData, detail); + this.$set(this.formData, 'buyType', this.formData.buyType.toString()); + this.formData.procureTime = this.formData.procureTime.toString(); + this.formData.procureGoods.map((item, index) => { + // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃 + let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId); + pIds = pIds.reverse(); + item.baseCategoryIds = [...pIds, item.baseCategoryId]; + this.$set( + this.formData.procureGoods[index], + 'modelsIds', + item.models.map((v) => v.baseGoodsModelsId), + ); + this.getgoodsTemplate(item.baseCategoryId, index); + this.getgoodsModel(item.baseGoodsTemplateId, index); + return item; + }); + } else { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + } + this.visible = true; + }, + + // 鑾峰彇鍑哄簱浠撳簱鍒楄〃 + getWarehouseList() { + selectTenantWarehouse() + .then((res) => { + this.warehouses = res; + if (this.warehouses.length && !this.formData.warehouseId) { + // 榛樿閫変腑绗竴涓粨搴� + this.formData.warehouseId = this.warehouses[0].id; + } + }) + .catch((err) => { + console.log('err', err); + }); + }, + + removeEmptyChildren(arr) { + arr.forEach((item) => { + if (!item.children || !item.children.length) { + delete item.children; + } else { + this.removeEmptyChildren(item.children); + } + }); + return arr; + }, + + // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 + getgoodsTemplate(id, index) { + goodsTemplate({ categoryId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'goodsOptions', res); + } else { + this.goodsTemplatelAll = res; + } + }); + }, + + // 瑙勬牸鍨嬪彿 + getgoodsModel(id, index) { + goodsModel({ goodsTemplatesId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'modelsOptions', res); + } else { + this.goodsModelAll = res; + } + }); + }, + + // 鏍规嵁鐗╁搧鍚嶇Оid鑾峰彇鍚嶅瓧 + getGoodsTemplateName(id) { + let item = this.goodsTemplatelAll.find((v) => v.id == id); + if (item) { + return item.goodsName; + } + return; + }, + + // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧 + getGoodsModelsName(id) { + let item = this.goodsModelAll.find((v) => v.id == id); + if (item) { + return item.modelName; + } + return; + }, + + // 鐗╁搧鍒嗙被閫夋嫨 + categoryChange(e, index) { + this.formData.procureGoods[index].goodsOptions = []; + this.formData.procureGoods[index].baseGoodsTemplateId = ''; + this.formData.procureGoods[index].goodsTemplateName = ''; + this.formData.procureGoods[index].modelsOptions = []; + this.formData.procureGoods[index].modelsIds = []; + this.formData.procureGoods[index].models = []; + + this.formData.procureGoods[index].baseCategoryId = e[e.length - 1]; + // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 + this.getgoodsTemplate(e[e.length - 1], index); + }, + + // 鐗╁搧鍚嶇О鍒楄〃 + goodsTemplateChange(e, index) { + this.formData.procureGoods[index].modelsOptions = []; + this.formData.procureGoods[index].modelsIds = []; + this.formData.procureGoods[index].models = []; + + this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e); + // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 + this.getgoodsModel(e, index); + }, + + // 瑙勬牸鍨嬪彿閫夋嫨 + modelChange(e, index) { + let arr = [...this.formData.procureGoods[index].models]; + let str = JSON.stringify(arr); + e.forEach((item) => { + if (str.indexOf(item) == -1) { + let temp = this.goodsModelAll.find((v) => v.id == item); + arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit }); + } + }); + this.formData.procureGoods[index].models = arr; + }, + + // 瑙勬牸鍨嬪彿绉婚櫎 + modelRemoveTag(e, index) { + let arr = this.formData.procureGoods[index].models; + let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e); + this.formData.procureGoods[index].models.splice(delIndex, 1); + }, + + // 涓婁紶 + uploadChange(e) { + console.log('uploadChange', e); + }, + + // 鐐瑰嚮鏂板鐗╁搧 + addGoods() { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + }, + + // 鐐瑰嚮绉婚櫎 + removeGoods(index) { + this.formData.procureGoods.splice(index, 1); + }, + + // 鍑哄簱鏁伴噺鏍¢獙 + countsChange(e, goodsIndex,index) { + const curItem = this.formData.procureGoods[goodsIndex].models[index] + const worehouseCount = curItem.worehouseCount + if (e > worehouseCount) { + this.$message.warning('鏁伴瓒呰繃鐜版湁搴撳瓨'); + curItem.counts = worehouseCount + } + }, + + // 鎻愪氦 + handleSubmit() { + this.$refs['ruleForm'].validate((valid) => { + if (valid) { + console.log('this.formData', this.formData); + if (this.setting.id) { + procureAdd(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('create err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } else { + procureEdit(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('edit err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } + } else { + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); + } + }); + }, + + close() { + this.formData = { + warehouseId: '', // 鍑哄簱浠撳簱id + procureTime: '', // 鍑哄簱鏃堕棿 + procureGoods: [], + }; + this.$emit('close'); + }, + + // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁� + findParentIds(dataSource, nodeId) { + const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + + // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣 + function traverse(node, nodeId) { + if (node.id === nodeId) { + // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣 + return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + } + + if (node.children) { + // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐� + for (const childNode of node.children) { + if (traverse(childNode, nodeId)) { + // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + parentIds.push(node.id); + return true; + } + } + } + + return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse + } + + // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣 + for (const node of dataSource) { + if (traverse(node, nodeId)) { + // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜� + break; + } + } + + return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + }, + }, +}; +</script> +<style scoped lang="scss"> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/accessStock/outbound/index.vue b/admin-web/src/views/stock/accessStock/outbound/index.vue index ea1d5b0..28c09d9 100644 --- a/admin-web/src/views/stock/accessStock/outbound/index.vue +++ b/admin-web/src/views/stock/accessStock/outbound/index.vue @@ -1,118 +1,78 @@ <template> - <div class="app-container"> + <div class="app-container stock-container"> <el-container> - <el-container> - <el-card class="box-card" style="width: 100%" shadow="never"> - <!--鎼滅储鏉′欢--> - <div class="filter-container"> - <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> - </div> - <el-row style="margin-top: 15px"> - <el-col> - <!--鍒楄〃--> - <my-button name="鏂板" @click="addtable" site="form" /> - <div :style="{'overflow-y': 'auto', height:`${clientHeight - 320}px`}"> - <el-row class="card" - :gutter="5"> - <el-col v-for="(item, index) in proData" :key="index" class="cm-item"> - <el-card class="card-data"> - <div class="card-container"> - <div class="hed-one">鍑哄簱鍗曞彿锛歿{ item.order_no }}</div> - <div class="one-hed"> - <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.customer_name }}</div> - </div> - <div class="card-end"> - <div v-for="(just, index) in item.data" class="two-end"> - <div class="item"><span>{{ just.order_no }}锛�</span>{{ just.customer_name }}</div> - </div> - </div> - </div> - <div class="card-but"> - <my-button name="鏌ョ湅璇︽儏" site="form" /> - <my-button name="瀵煎嚭鍑哄簱鍗�" site="form" /> - </div> - </el-card> - </el-col> - </el-row> - </div> - <el-pagination - :small="false" - :current-page="1" - :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" - :page-size="10" - layout="total, sizes, prev, pager, next, jumper" - :total="0" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </el-col> - </el-row> - <!--娣诲姞/缂栬緫寮圭獥--> - <el-dialog title="鏂板鍑哄簱" :close-on-click-modal="false" :visible.sync="adddialog" width="60%" > - <el-form ref="ruleForm" :model="formData" class="demo-ruleForm" label-width="100px"> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="24"> - <el-form-item label="鍑哄簱鎵嬬画" prop="name"> - 浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢 - </el-form-item> - </el-col> - </el-row> - <div style="position: relative;"> - <div style="background-color: #F9F9F9;width: 90%;"> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-table :data="formData.tableData" height="100%" :stripe="true"> - <el-table-column prop="projectName" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column> - <el-table-column prop="time1" label="鍗曚綅" align="center"> </el-table-column> - <el-table-column prop="unit" label="鐜版湁搴撳瓨" align="center"> </el-table-column> - <el-table-column prop="time2" label="鍑哄簱鏁伴噺" align="center"> </el-table-column> - </el-table> - </div> - <div style="position: absolute;right: 0;top: 152px;"> - <my-button style="display: block;margin-left: 10px;margin-bottom: 5px;" name="绉婚櫎" site="form"/> - <my-button name="鏂板鐗╁搧" site="form"/> - </div> - </div> - </el-form> - <div slot="footer" align="center" class="dialog-footer"> - <my-button name="纭畾" site="form" /> - <my-button name="鍙栨秷" site="form" @click="adddialog = false"/> + <el-card class="box-card" style="width: 100%" shadow="never"> + <!--鎼滅储鏉′欢--> + <div class="filter-container"> + <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> + </div> + <el-row style="margin-top: 15px"> + <el-col> + <!--鍒楄〃--> + <div class="table-tool-bar" style="margin-bottom: 15px;"> + <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" /> + <my-button name="瀵煎叆" @click="importSetting.dialogShow = true" site="tools" size="medium" /> </div> - </el-dialog> - </el-card> - </el-container> + <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading"> + <el-row class="card" :gutter="5"> + <el-col v-for="(item, index) in list" :key="index" class="cm-item"> + <el-card class="card-data"> + <div class="card-container"> + <div class="card-header"> + <div class="card-header-left"> + <span>鍑哄簱鍗曞彿锛�</span> + <span class="value">{{ item.businessFormCode }}</span> + </div> + <div class="card-header-right"> + <el-button site="form" type="success" size="mini" @click="handleExport(item)" + >瀵煎嚭鍑哄簱鍗�</el-button + > + <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)" + >鏌ョ湅璇︽儏</el-button + > + </div> + </div> + <div class="one-hed"> + <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyId }}</div> + <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.buyerName }}</div> + <div class="box"> + <span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + </div> + </div> + <div class="card-end"> + <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item"> + <div class="name">{{ just.goodsTemplateName }}</div> + <div class="value-box"> + <div class="value-box-item"> + <span class="label">鏁伴噺锛�</span> + <span class="value">{{ just.count }}</span> + <span class="unit">{{ just.unit }}</span> + </div> + </div> + </div> + </div> + </div> + </el-card> + </el-col> + </el-row> + </div> + <el-pagination + :small="false" + :current-page="pageNum" + :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + </el-row> + </el-card> </el-container> + <!--娣诲姞/缂栬緫寮圭獥--> + <edit v-if="editSetting.show" :setting="editSetting" ref="editRef" @close="editSetting.show=false" @search="refreshData"></edit> + <detail v-if="detailSetting.show" :setting="detailSetting" @close="editSetting.show=false" ref="detailRef"></detail> <my-import :import-setting="importSetting" :dialog-show="importSetting.dialogShow" @@ -122,196 +82,66 @@ </template> <script> -import MyButton from "@/components/myButton/myButton"; +import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import myImport from '@/views/components/myImport'; +import edit from './edit'; +import detail from './detail'; +import { getBaseUrl } from '@/utils/base'; +import * as DateFormatter from '@/utils/DateFormatter'; export default { - name: "index", - components: {MyButton, myImport}, + name: 'index', + components: { MyButton, myImport, edit, detail }, data() { return { - + loading: false, adddialog: false, - formData:{ - tableData:[ - { - projectName:'555' - }, - { - projectName:'444' - } - ], - }, + list: [], // 鎼滅储妗� items: [ { type: 'text', - dataIndex: 'name', + dataIndex: 'businessFormCode', label: '鍑哄簱鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'text', - dataIndex: 'name', + dataIndex: 'goodsTemplateName', label: '鐗╁搧鍚嶇О', placeholder: '鍙ā绯婃悳绱�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'select', + dataIndex: 'name', + label: '鏈烘瀯', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [], }, { type: 'text', - dataIndex: 'name', + dataIndex: 'buyerName', label: '鍒涘缓浜�', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'date-picker', dataIndex: 'val1', label: '鍑哄簱鏃堕棿', - defaultValue: '' + defaultValue: '', }, { type: 'date-picker', dataIndex: 'val2', label: '鑷�', - defaultValue: '' + defaultValue: '', }, - // { - // type: 'select', - // dataIndex: 'status', - // label: '鐘舵��', - // placeholder: '璇烽�夋嫨', - // defaultValue: '1', - // options: [ - // { - // label: '鍚敤', - // value: '1' - // }, - // { - // label: '绂佺敤', - // value: '0' - // } - // ] - // } - ], - proData: [ - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - } ], // 鏍戞暟鎹� treeDataList: [], @@ -320,25 +150,25 @@ tenantId: null, userName: null, userPhone: null, - status: 1 + states: null, }, // 瀵煎叆 importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null + dialogTitle: '瀵煎叆', + dialogShow: false, + fileSettings: { + data: {}, + uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃 + accept: '.xls', // 鏍煎紡 + type: 'text', // 鍥炴樉褰㈠紡 + loading: false, // 瀵煎叆鏁堟灉 + }, + /* 妯℃澘涓嬭浇 */ + templateSettings: { + templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О + templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃 + }, + onSuccess: null, }, editSetting: { title: '', @@ -346,104 +176,129 @@ orgId: '', show: false, }, - } + detailSetting: { + title: '璇︽儏', + id: '', + show: false, + }, + pageNum: 1, + pageSize: 10, + total: 0, + }; }, computed: { - clientHeight () { - return document.documentElement.clientHeight + clientHeight() { + return document.documentElement.clientHeight; + }, + }, + filters: { + formatTime(time) { + if (!time) return; + return DateFormatter.LongToDateTime(time); }, }, created() { + this.fetchData(); }, methods: { - handleSizeChange(){}, - handleCurrentChange(){}, + fetchData() { + this.loading = true; + procureList({ + pageNum: this.pageNum, + pageSize: this.pageSize, + ...this.filterFrom, + }).then((res) => { + this.list = res.datas; + this.total = res.totalRows; + this.loading = false; + console.log(this.list); + }); + }, //瀵煎叆 importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() + this.importSetting.dialogShow = true; + this.importSetting.onSuccess = (response, callBack) => { + if (response.code === 1) { + this.$message.success(response.msg); + this.search(1); + } else { + this.$message.warning(response.msg); } + callBack(); + }; }, - - addtable() { - this.adddialog = true + // 瀵煎嚭 + handleExport() {}, + // 鏂板 + handleAdd() { + this.editSetting.id = null; + this.editSetting.info = null; + this.editSetting.title = '鏂板'; + this.editSetting.show = true; + }, + // 缂栬緫 + handleEdit(row) { + this.editSetting.id = row.id; + this.editSetting.info = null; + this.editSetting.title = '缂栬緫'; + this.editSetting.show = true; + }, + // 璇︽儏 + handleDetail(row) { + this.detailSetting.id = row.id; + this.detailSetting.info = JSON.stringify(row); + this.detailSetting.title = '璇︽儏'; + this.detailSetting.show = true; + }, + // 鍑哄簱 + handleIncome(row) { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 鍑哄簱鍚�?`, '鍑哄簱鍑哄簱') + .then(function () { + procureIncome({ id: row.id }).then((res) => { + this.$message.success('鍑哄簱鎴愬姛锛�'); + this.search(); + }); + }) + .catch(() => {}); + }, + del(row) { + this.$modal + .confirm('鏄惁纭鍒犻櫎鍑哄簱鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�') + .then(function () { + procureDel({ id: row.id }).then((res) => {}); + }) + .then((res) => { + this.$message.success('鍒犻櫎鎴愬姛锛�'); + this.search(); + }) + .catch(() => {}); + }, + // 鍒嗛〉 + handleSizeChange(pageSize) { + this.pageSize = pageSize; + this.search({ pageNum: 1 }); + }, + handleCurrentChange(pageNum) { + this.myTable.paging.page.pageNum = pageNum; + this.search({ pageNum: pageNum }); }, // 鏌ヨtable鍒楄〃 search(pageNum) { - if (pageNum != undefined) { - // this.$refs.myTable.search(pageNum) - } else { - // this.$refs.myTable.search() - } + this.fetchData(); + }, + refreshData() { + this.pageNum = 1; + this.pageSize = 10; + this.search(); }, fifterForm(params) { - console.log(params,'555'); - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + this.search(1); + }, + }, +}; </script> -<style scoped> -.card { - display: flex; - flex-wrap: wrap; - margin: 0px !important; - .cm-item { - width: 100%; - } - .cm-item /deep/ .el-card__body { - padding: 10px; - } -} -.card-data{ - margin-top: 8px; - .card-container{ - display: inline-block; - width: 70%; - .hed-one{ - color: #2298EE; - font-size: 18px; - } - .one-hed{ - margin-top: 15px; - .box{ - display: inline-block; - margin-right: 20px; - } - } - .span-two{ - color: #83919e; - font-size: 14px; - } - .card-end{ - font-size: 14px; - color: #3d3d3d; - margin-top: 15px; - display: flex; - flex-wrap: wrap; - .two-end{ - width: calc(33.33% - 20px); - margin-bottom: 15px; - } - } - - } - .card-but{ - display: inline-block; - } - .end{ - display: inline-block; - } - -} - +<style scoped lang="scss"> +@import url(../../index.scss); </style> diff --git a/admin-web/src/views/stock/accessStock/outboundDetails/index.vue b/admin-web/src/views/stock/accessStock/outboundDetails/index.vue index 2936cd9..29e6efc 100644 --- a/admin-web/src/views/stock/accessStock/outboundDetails/index.vue +++ b/admin-web/src/views/stock/accessStock/outboundDetails/index.vue @@ -14,7 +14,7 @@ </el-col> </el-row> <!--娣诲姞/缂栬緫寮圭獥--> - <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"/> + <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false"/> </el-card> </el-container> </el-container> @@ -30,14 +30,14 @@ import MyTableV2 from "@/components/myTable/myTableV2"; import MyButton from "@/components/myButton/myButton"; import SettingIplatform from '@/utils/settingIplatform'; -import edit from './edit' +import detail from '../outbound/detail' import * as finsystenant from '@/api/baseSetting/finsystenant' import myImport from '@/views/components/myImport' import {getBaseUrl} from '@/utils/base'; export default { name: "index", - components: {MyButton, MyTableV2, edit, myImport}, + components: {MyButton, MyTableV2, detail, myImport}, data() { return { // 鎼滅储妗� @@ -72,6 +72,23 @@ label: '鐗╁搧鍚嶇О', placeholder: '璇疯緭鍏�', defaultValue: '' + }, + { + type: 'select', + dataIndex: 'modelsIds', + label: '瑙勬牸鍨嬪彿', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [], + }, + { + type: 'cascader', + dataIndex: 'agencyId', + label: '鏈烘瀯', + placeholder: '璇烽�夋嫨', + optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, + defaultValue: '', + options: [], }, { type: 'text', @@ -114,6 +131,11 @@ orgId: '', show: false, }, + detailSetting: { + title: '璇︽儏', + id: '', + show: false, + }, // 琛ㄦ牸鏁版嵁 table: { showIndex: true, // 鏄惁鏄剧ず搴忓彿 @@ -151,7 +173,7 @@ { title: '璇︽儏', events: (row) => { - this.showAudit(row); + this.showDetail(row); }, }, ], @@ -227,37 +249,11 @@ .catch(() => { }); }, - showAdd() { - // if (!this.editSetting.orgId) { - // this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') - // } else { - this.editSetting.id = null; - this.editSetting.info = null; - this.editSetting.title = '鏂板'; - this.editSetting.show = true; - // } - }, - showAudit(row) { - this.editSetting.id = row.id; - this.editSetting.info = JSON.stringify(row); - this.editSetting.title = '缂栬緫'; - this.editSetting.show = true; - }, - nodeClick(param) { - param = param || {} - this.p = Object.assign({}, { - id: param.id, - name: param.name - }) - if (this.p.id != undefined && this.p.id != null) { - this.filterFrom.tenantId = this.p.id - this.editSetting.orgId = this.p.id - } else { - this.filterFrom.tenantId = null - this.editSetting.orgId = null - } - this.importSetting.fileSettings.data = {pid: param.id} - this.search(1) + showDetail(row) { + this.detailSetting.id = row.id; + this.detailSetting.info = JSON.stringify(row); + this.detailSetting.title = '璇︽儏'; + this.detailSetting.show = true; }, // 鏌ヨtable鍒楄〃 search(pageNum) { diff --git a/admin-web/src/views/stock/index.scss b/admin-web/src/views/stock/index.scss new file mode 100644 index 0000000..fc19052 --- /dev/null +++ b/admin-web/src/views/stock/index.scss @@ -0,0 +1,188 @@ +.stock-container { + .ml-20 { + margin-left: 20px; + } + .card { + display: flex; + flex-wrap: wrap; + margin: 0px !important; + .cm-item { + width: 100%; + } + .cm-item .el-card__body { + padding-bottom: 5px; + } + } + .card-data { + position: relative; + margin-top: 8px; + .card-container { + .card-header { + height: 48px; + display: flex; + align-items: center; + justify-content: space-between; + background: #f3f9fe; + padding: 0 32px 0 15px; + box-sizing: border-box; + } + .card-header-left { + display: flex; + align-items: center; + color: #999999; + font-family: 'Microsoft YaHei UI'; + font-size: 18px; + font-weight: 700; + .value { + color: #3d3d3d; + } + + .states { + width: 54px; + height: 22px; + line-height: 22px; + text-align: center; + border-radius: 4px; + border: 1px solid #f9675b99; + background: #f9675b1a; + font-family: 'Microsoft YaHei'; + color: #f9675b; + font-size: 13px; + font-style: normal; + font-weight: 400; + margin-left: 8px; + } + .states-success { + border: 1px solid #39ad6199; + background: #39ad610f; + color: #39ad61; + } + .states-info { + border: 1px solid #999999; + background: #39ad610f; + color: #999999; + } + } + .one-hed { + margin-top: 15px; + padding: 0 32px 0 15px; + box-sizing: border-box; + .box { + display: inline-block; + margin-right: 20px; + } + .span-two { + color: #83919e; + font-size: 14px; + } + } + .card-end { + font-size: 14px; + color: #3d3d3d; + margin-top: 15px; + display: flex; + flex-wrap: wrap; + font-family: 'Microsoft YaHei UI'; + padding: 0 16px; + box-sizing: border-box; + .item { + width: 379px; + height: 60px; + padding: 8px 12px 9px 12px; + box-sizing: border-box; + align-items: center; + gap: 8px; + flex-shrink: 0; + background: #f9f9f9; + margin-right: 15px; + margin-bottom: 15px; + &:last-child { + margin-right: 0; + } + .name { + height: 22px; + line-height: 22px; + } + .value-box { + display: flex; + .value-box-item { + margin-right: 20px; + .label { + color: #99999999; + line-height: 22px; + } + .value { + color: #ff3131; + } + } + } + } + } + } + } +} + +/*缂栬緫*/ +.stock-edit{ + .main-w { + width: 88%; + } + .goods-card { + position: relative; + background: #f6f6f6; + padding: 20px; + box-sizing: border-box; + border-radius: 4px; + background-color: #f9f9f9; + margin-top: 20px; + &:nth-of-type(1) { + margin-top: 0; + } + } + .btn-group { + width: 80px; + position: absolute; + right: -94px; + bottom: 0px; + .el-button { + margin-bottom: 10px; + margin-left: 0; + display: block; + &:last-child { + margin-bottom: 0; + } + } + } +} + +/*璇︽儏*/ +.stock-detail{ + .img-row { + display: flex; + align-content: center; + } + .img-box { + display: inline-block; + width: 80px; + height: 80px; + background: #f9f9f9; + margin-right: 20px; + cursor: pointer; + .img { + width: 100%; + } + } + + .goods-card { + position: relative; + background: #f6f6f6; + padding: 20px; + box-sizing: border-box; + border-radius: 4px; + background-color: #f9f9f9; + margin-top: 20px; + &:nth-of-type(1) { + margin-top: 0; + } + } +} \ No newline at end of file diff --git a/admin-web/src/views/stock/inventorycount/inventorytask/edit.vue b/admin-web/src/views/stock/inventorycount/inventorytask/edit.vue index 37b0db9..7a747d4 100644 --- a/admin-web/src/views/stock/inventorycount/inventorytask/edit.vue +++ b/admin-web/src/views/stock/inventorycount/inventorytask/edit.vue @@ -1,43 +1,48 @@ <template> <win-sm :title="setting.title" @close="close" :width="'800px'"> <el-form ref="ruleForm" :model="formData" :rules="rules" class="demo-ruleForm" label-width="100px"> - <el-form-item label="缂栧彿" prop="code"> - <el-input disabled v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-form-item label="鐩樼偣鍗曞悕" prop="code"> + <el-input disabled v-model="formData.code" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-form-item label="鐩樼偣浠撳簱" prop="name"> + <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> - <el-form-item label="鍦板潃" > - <el-input v-model="formData.adss" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-form-item label="鐩樼偣浜�"> + <el-input v-model="formData.adss" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> - <el-form-item label="鐘舵��" prop="status"> - <el-switch - v-model="formData.status" - active-color="#0d997c" - inactive-color="#C0CCDA"> - </el-switch> + <el-form-item label="鐩戠洏浜�"> + <el-input v-model="formData.adss" clearable maxlength="20" show-word-limit style="width: 100%" /> + </el-form-item> + <el-form-item label="澶囨敞" prop="status"> + <el-input + type="textarea" + placeholder="璇疯緭鍏ュ唴瀹�" + v-model="formData.adss" + resize="none" + maxlength="100" + show-word-limit + ></el-input> </el-form-item> </el-form> <div slot="footer" align="center" class="dialog-footer"> - <my-button name="鍙栨秷" site="form" @click="close"/> - <my-button name="淇濆瓨" site="form" @click="save"/> + <my-button name="鍙栨秷" site="form" @click="close" /> + <my-button name="淇濆瓨" site="form" @click="save" /> </div> </win-sm> </template> <script> -import winSm from '@/components/win/win-sm' -import myButton from '@/components/myButton/myButton' -import * as finsystenant from '@/api/baseSetting/finsystenant' +import winSm from '@/components/win/win-sm'; +import myButton from '@/components/myButton/myButton'; +import * as finsystenant from '@/api/baseSetting/finsystenant'; export default { - components: {winSm, myButton}, + components: { winSm, myButton }, props: { setting: { type: Object, - default: () => { - } - } + default: () => {}, + }, }, data() { return { @@ -50,62 +55,54 @@ summary: '', }, rules: { - code: [ - {required: true, message: '璇疯緭鍏ユ満鏋勭紪鍙�', trigger: 'blur'} - ], - name: [ - {required: true, message: '璇疯緭鍏ユ満鏋勫悕绉�', trigger: 'blur'} - ], - status: [ - {required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'blur'} - ] - } - } + code: [{ required: true, message: '璇疯緭鍏ユ満鏋勭紪鍙�', trigger: 'blur' }], + name: [{ required: true, message: '璇疯緭鍏ユ満鏋勫悕绉�', trigger: 'blur' }], + status: [{ required: true, message: '璇烽�夋嫨鐘舵��', trigger: 'blur' }], + }, + }; }, created() { - if(this.setting.info){ - this.formData = Object.assign({},JSON.parse(this.setting.info)) + if (this.setting.info) { + this.formData = Object.assign({}, JSON.parse(this.setting.info)); } }, methods: { - getEditInfo(id){ - - }, + getEditInfo(id) {}, close() { - this.$emit('close') + this.$emit('close'); }, save() { this.$refs.ruleForm.validate((valid) => { if (valid) { - const params = Object.assign({}, this.formData) - if(this.setting.id){ + const params = Object.assign({}, this.formData); + if (this.setting.id) { // 缂栬緫鎺ュ彛 - finsystenant.edit(params).then(res => { + finsystenant.edit(params).then((res) => { if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); } else { - this.$message.error('淇濆瓨澶辫触') + this.$message.error('淇濆瓨澶辫触'); } - }) - }else{ - params.orgId = this.setting.orgId - finsystenant.add(params).then(res => { + }); + } else { + params.orgId = this.setting.orgId; + finsystenant.add(params).then((res) => { if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); } else { - this.$message.error('淇濆瓨澶辫触') + this.$message.error('淇濆瓨澶辫触'); } - }) + }); } } else { - this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��') + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); } - }) - } - } -} + }); + }, + }, +}; </script> diff --git a/admin-web/src/views/stock/inventorycount/inventorytask/index.vue b/admin-web/src/views/stock/inventorycount/inventorytask/index.vue index 54f2d7d..97040e4 100644 --- a/admin-web/src/views/stock/inventorycount/inventorytask/index.vue +++ b/admin-web/src/views/stock/inventorycount/inventorytask/index.vue @@ -10,11 +10,17 @@ <el-row style="margin-top: 15px"> <el-col> <!--鍒楄〃--> - <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/> + <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" /> </el-col> </el-row> <!--娣诲姞/缂栬緫寮圭獥--> - <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"/> + <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search" /> + <inventory + v-if="inventorySetting.show" + :setting="inventorySetting" + @close="inventorySetting.show = false" + @search="search" + /> </el-card> </el-container> </el-container> @@ -27,17 +33,18 @@ </template> <script> -import MyTableV2 from "@/components/myTable/myTableV2"; -import MyButton from "@/components/myButton/myButton"; +import MyTableV2 from '@/components/myTable/myTableV2'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import edit from './edit' -import * as finsystenant from '@/api/baseSetting/finsystenant' -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import edit from './edit'; +import inventory from './inventory'; +import * as finsystenant from '@/api/baseSetting/finsystenant'; +import myImport from '@/views/components/myImport'; +import { getBaseUrl } from '@/utils/base'; export default { - name: "index", - components: {MyButton, MyTableV2, edit, myImport}, + name: 'index', + components: { MyButton, MyTableV2, edit, myImport, inventory }, data() { return { // 鎼滅储妗� @@ -47,31 +54,14 @@ dataIndex: 'name', label: '鐩樼偣鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, - // { - // type: 'select', - // dataIndex: 'status', - // label: '绫诲瀷', - // placeholder: '璇烽�夋嫨', - // defaultValue: '1', - // options: [ - // { - // label: '鍚敤', - // value: '1' - // }, - // { - // label: '绂佺敤', - // value: '0' - // } - // ] - // }, { type: 'text', dataIndex: 'name', label: '浠诲姟鍚嶇О', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, ], // 鏍戞暟鎹� @@ -81,27 +71,33 @@ tenantId: null, userName: null, userPhone: null, - status: 1 + status: 1, }, // 瀵煎叆 importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null + dialogTitle: '瀵煎叆', + dialogShow: false, + fileSettings: { + data: {}, + uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃 + accept: '.xls', // 鏍煎紡 + type: 'text', // 鍥炴樉褰㈠紡 + loading: false, // 瀵煎叆鏁堟灉 + }, + /* 妯℃澘涓嬭浇 */ + templateSettings: { + templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О + templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃 + }, + onSuccess: null, }, editSetting: { + title: '', + id: '', + orgId: '', + show: false, + }, + inventorySetting: { title: '', id: '', orgId: '', @@ -114,36 +110,51 @@ url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 璇锋眰鍦板潃 // 宸ュ叿鏉� tools: { - columnsCtrl: {// 鍒楁帶鍒舵寜閽� - show: false + columnsCtrl: { + // 鍒楁帶鍒舵寜閽� + show: false, }, - generalExport: {// 閫氱敤瀵煎嚭鎸夐挳 - show: false + generalExport: { + // 閫氱敤瀵煎嚭鎸夐挳 + show: false, }, // 鑷畾涔夊伐鍏锋潯鎸夐挳 custom: [ - ] + { + name: '鏂板', + click: () => { + this.showAdd(); + }, + }, + ], }, // 鍒椾俊鎭� columns: [ - {title: '鐩樼偣鍗曞彿', field: 'name', align: 'left',}, - {title: '浠诲姟鍚嶇О', field: 'code', align: 'center'}, - {title: '鐩樼偣浠撳簱', field: 'lv', align: 'center', }, - {title: '鐩樼偣浜�', field: 'lv', align: 'center', }, - {title: '鐩戠洏浜�', field: 'summary', align: 'left',}, - {title: '鐩樼偣鏃堕棿', field: 'summary', align: 'left',}, - {title: '鍒涘缓鏃堕棿', field: 'summary', align: 'left',}, - {title: '鐘舵��', field: 'summary', align: 'left',}, - ], + { title: '鐩樼偣鍗曞彿', field: 'name', align: 'left' }, + { title: '浠诲姟鍚嶇О', field: 'code', align: 'center' }, + { title: '鐩樼偣浠撳簱', field: 'lv', align: 'center' }, + { title: '鐩樼偣浜�', field: 'lv', align: 'center' }, + { title: '鐩戠洏浜�', field: 'summary', align: 'left' }, + { title: '鐩樼偣鏃堕棿', field: 'summary', align: 'left' }, + { title: '鍒涘缓鏃堕棿', field: 'summary', align: 'left' }, + { title: '鐘舵��', field: 'summary', align: 'left' }, + ], // 鎿嶄綔淇℃伅 operation: { show: true, // 鏄剧ず鎿嶄綔鍒� width: '150', // 鍒楀 attr: [ { - title: '璇︽儏', + title: '缂栬緫', events: (row) => { this.showAudit(row); + }, + }, + { + title: '鐩樼偣', + type:'success', + events: (row) => { + this.showInventory(row); }, }, ], @@ -155,79 +166,73 @@ small: false, pageNum: 1, pageSize: 10, - total: 0 - } - } + total: 0, + }, + }, }, - } + }; }, created() { // 鑾峰彇鏈烘瀯鏍� - this.initTreeData() + this.initTreeData(); }, methods: { //瀵煎叆 importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() + this.importSetting.dialogShow = true; + this.importSetting.onSuccess = (response, callBack) => { + if (response.code === 1) { + this.$message.success(response.msg); + this.search(1); + } else { + this.$message.warning(response.msg); } + callBack(); + }; }, // 宸︿晶鏍戝垵濮嬪寲 initTreeData() { - finsystenant.getTree().then(res => { - const content = res || [] - this.treeDataList.splice(0, this.treeDataList.length) - this.treeDataList = content + finsystenant.getTree().then((res) => { + const content = res || []; + this.treeDataList.splice(0, this.treeDataList.length); + this.treeDataList = content; if (content.length > 0) { - this.importSetting.fileSettings.data = {pid: content[0].id} + this.importSetting.fileSettings.data = { pid: content[0].id }; } - }) + }); }, updState(row) { - let vm = this - let text = row.status == 0 ? "鍚敤" : "绂佺敤"; + let vm = this; + let text = row.status == 0 ? '鍚敤' : '绂佺敤'; vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鍚楋紵').then(function () { - let params = Object.assign({}, row) - params.status = row.status == 1 ? 0 : 1 - finsystenant.edit(params).then(res => { + let params = Object.assign({}, row); + params.status = row.status == 1 ? 0 : 1; + finsystenant.edit(params).then((res) => { if (res) { - row.status = row.status === 1 ? 0 : 1 - vm.$modal.msgSuccess(text + "鎴愬姛"); - vm.search() + row.status = row.status === 1 ? 0 : 1; + vm.$modal.msgSuccess(text + '鎴愬姛'); + vm.search(); } - }) - }) + }); + }); }, del(row) { this.$modal .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.name + '"鐨勬満鏋勫悧锛�') .then(function () { - finsystenant.del({id: row.id}).then((res) => { - }); + finsystenant.del({ id: row.id }).then((res) => {}); }) .then((res) => { this.$message.success('鍒犻櫎鎴愬姛锛�'); - this.search() + this.search(); }) - .catch(() => { - }); + .catch(() => {}); }, showAdd() { - // if (!this.editSetting.orgId) { - // this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') - // } else { - this.editSetting.id = null; - this.editSetting.info = null; - this.editSetting.title = '鏂板'; - this.editSetting.show = true; - // } + this.editSetting.id = null; + this.editSetting.info = null; + this.editSetting.title = '鏂板'; + this.editSetting.show = true; }, showAudit(row) { this.editSetting.id = row.id; @@ -235,38 +240,45 @@ this.editSetting.title = '缂栬緫'; this.editSetting.show = true; }, + showInventory(row) { + this.inventorySetting.id = row.id; + this.inventorySetting.info = JSON.stringify(row); + this.inventorySetting.title = '鐩樼偣'; + this.inventorySetting.show = true; + }, nodeClick(param) { - param = param || {} - this.p = Object.assign({}, { - id: param.id, - name: param.name - }) + param = param || {}; + this.p = Object.assign( + {}, + { + id: param.id, + name: param.name, + }, + ); if (this.p.id != undefined && this.p.id != null) { - this.filterFrom.tenantId = this.p.id - this.editSetting.orgId = this.p.id + this.filterFrom.tenantId = this.p.id; + this.editSetting.orgId = this.p.id; } else { - this.filterFrom.tenantId = null - this.editSetting.orgId = null + this.filterFrom.tenantId = null; + this.editSetting.orgId = null; } - this.importSetting.fileSettings.data = {pid: param.id} - this.search(1) + this.importSetting.fileSettings.data = { pid: param.id }; + this.search(1); }, // 鏌ヨtable鍒楄〃 search(pageNum) { if (pageNum != undefined) { - this.$refs.myTable.search(pageNum) + this.$refs.myTable.search(pageNum); } else { - this.$refs.myTable.search() + this.$refs.myTable.search(); } }, fifterForm(params) { - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + this.search(1); + }, + }, +}; </script> -<style scoped> - -</style> +<style scoped></style> diff --git a/admin-web/src/views/stock/inventorycount/inventorytask/inventory.vue b/admin-web/src/views/stock/inventorycount/inventorytask/inventory.vue new file mode 100644 index 0000000..ff242e6 --- /dev/null +++ b/admin-web/src/views/stock/inventorycount/inventorytask/inventory.vue @@ -0,0 +1,80 @@ +<template> + <win-md :title="setting.title" @close="close" :width="'1200px'"> + <el-row :gutter="20" style="margin-bottom: 20px" type="flex" align="middle"> + <el-col :span="6">鐩樼偣鍗曞彿锛歿{ formData.businessFormCode }}</el-col> + <el-col :span="6">鐩樼偣浠诲姟锛歿{ formData.businessTaskCode }}</el-col> + <el-col :span="6">鐩樼偣浠撳簱锛歿{ formData.warehouseId }}</el-col> + <el-col :span="3" :offset="3"> + <my-button name="瀵煎嚭鐩樼偣鍗�" site="form" size="medium" type="primary" /> + </el-col> + </el-row> + <el-table v-loading="loading" :data="formData.tableData" height="100%" :stripe="true" class="the-table"> + <el-table-column prop="goodsTemplateName" label="鐗╁搧鍚嶇О"> </el-table-column> + <el-table-column prop="baseGoodsModelsId" label="鍨嬪彿" align="center"> </el-table-column> + <el-table-column prop="classification" label="绫诲埆"> </el-table-column> + <el-table-column prop="unit" label="鍗曚綅" align="center"> </el-table-column> + <el-table-column prop="kc" label="搴旀湁搴撳瓨" align="center"> </el-table-column> + <el-table-column prop="price" label="鍗曚环" align="center"> </el-table-column> + <el-table-column prop="inventoryResult" label="閲戦" align="center"> </el-table-column> + <el-table-column prop="inventoryCounts" label="瀹炵洏鏁伴噺" align="center"> + <template slot-scope="scope"> + <el-input v-model="scope.row.inventoryCounts"></el-input> + </template> + </el-table-column> + </el-table> + + <div slot="footer" align="center" class="dialog-footer"> + <my-button name="鏆傚瓨" site="form" type="primary" @click="close" /> + <my-button name="瀹屾垚鐩樼偣" site="form" type="success" @click="save" /> + </div> + </win-md> +</template> + +<script> +import winMd from '@/components/win/win-md'; +import myButton from '@/components/myButton/myButton'; +export default { + components: { winMd, myButton }, + props: { + setting: { + type: Object, + default: () => {}, + }, + }, + data() { + return { + loading: false, + formData: { + businessFormCode: '2023080812', + businessTaskCode: '2023骞�9鏈堢洏鐐瑰崟', + warehouseId: '寮�灏佸競浠撳簱', + tableData: [], + }, + }; + }, + created() { + for (let i = 0; i < 10; i++) { + this.formData.tableData.push({ + goodsTemplateName: '鏂戒箰榛戣壊纰崇矇', + baseGoodsModelsId: '鏂戒箰c2201', + classification: 'A', + unit: '濂�', + kc: 10, + price: 20, + inventoryResult: 200, + inventoryCounts: 0, + }); + } + }, + methods: { + close() { + this.$emit('close'); + }, + save() { + + } + }, +}; +</script> + +<style></style> diff --git a/admin-web/src/views/stock/procure/purchaseOrder/detail.vue b/admin-web/src/views/stock/procure/purchaseOrder/detail.vue index 35f7d41..d98bfd2 100644 --- a/admin-web/src/views/stock/procure/purchaseOrder/detail.vue +++ b/admin-web/src/views/stock/procure/purchaseOrder/detail.vue @@ -1,15 +1,5 @@ <template> - <el-dialog - title="璇︽儏" - width="60%" - :modal="true" - :visible.sync="visible" - :top="'15vh'" - :close-on-click-modal="false" - :append-to-body="true" - :destroy-on-close="true" - @close="close" - > + <win-md class="stock-detail" :title="setting.title" @close="close" :width="'800px'"> <el-row :gutter="20"> <el-col :span="8"> <span>鍏ュ簱鍗曞彿锛�</span> @@ -17,17 +7,17 @@ </el-col> <el-col :span="8"> <span>鍏ュ簱浠撳簱锛�</span> - <span>{{ detail.goodsTemplateName }}</span> + <span>{{ detail.warehouseName }}</span> </el-col> <el-col :span="8"> <span>鎵�灞炴満鏋勶細</span> - <span>{{ detail.agencyId }}</span> + <span>{{ detail.agencyName }}</span> </el-col> </el-row> <el-row :gutter="20" style="margin-top: 20px"> <el-col :span="8"> <span>鐘舵�侊細</span> - <span>{{ detail.states==1?'寰呭叆搴�':'宸插叆搴�' }}</span> + <span>{{ detail.states == 1 ? '寰呭叆搴�' : '宸插叆搴�' }}</span> </el-col> <el-col :span="8"> <span>鍒涘缓浜猴細</span> @@ -35,34 +25,42 @@ </el-col> <el-col :span="8"> <span>鍏ュ簱鏃堕棿锛�</span> - <span>{{ detail.time }}</span> + <span>{{ detail.incomeTime | formatTime }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col class="img-row" :span="12"> + <span>閲囪喘绫诲瀷锛�</span> + <span>{{ detail.buyType == 1 ? '闆嗛噰' : '鑷噰' }}</span> </el-col> </el-row> <el-row :gutter="20" style="margin-top: 20px"> <el-col class="img-row" :span="24"> <span>閲囪喘鎵嬬画鐓х墖锛�</span> - <div class="img-box"></div> + <div class="img-box" v-for="(item, index) in fileList" :key="index" @click="handlePreview(item)"> + <img class="img" :src="getUrl(item.path)" alt="" /> + </div> </el-col> </el-row> <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex"> <el-row :gutter="20"> <el-col :span="8"> <span>鐗╁搧鍒嗙被锛�</span> - <span>{{ goodsItem.baseCategoryId }}</span> + <span>{{ goodsItem.baseCategoryName }}</span> </el-col> <el-col :span="8"> <span>鐗╁搧鍚嶇О锛�</span> - <span>{{ goodsItem.baseGoodsTemplateId }}</span> + <span>{{ goodsItem.goodsTemplateName }}</span> </el-col> <el-col :span="8"> <span>渚涜揣鍟嗭細</span> <span>{{ goodsItem.supplier }}</span> </el-col> </el-row> - <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px;"> - <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> + <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px"> + <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center"> <template slot-scope="scope"> - {{ scope.row.baseGoodsModelsId }} + {{ scope.row.baseGoodsModelsName }} </template> </el-table-column> <el-table-column label="鍗曚綅" align="center"> @@ -70,78 +68,145 @@ {{ scope.row.unit }} </template> </el-table-column> - <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center"> + <el-table-column prop="price" label="鍗曚环" align="center"> <template slot-scope="scope"> - <el-input v-model="scope.row.price"></el-input> + {{ scope.row.price }} </template> </el-table-column> - <el-table-column prop="counts" label="鍑哄簱鏁伴噺" align="center"> + <el-table-column prop="counts" label="鍏ュ簱鏁伴噺" align="center"> <template slot-scope="scope"> - <el-input v-model="scope.row.counts"></el-input> + {{ scope.row.counts }} + </template> + </el-table-column> + <el-table-column prop="counts" label="閲戦" align="center"> + <template slot-scope="scope"> + {{ (scope.row.price * scope.row.counts).toFixed(2) }} </template> </el-table-column> </el-table> </div> - </el-dialog> + <div id="uploadPreviewImages" style="display: none"> + <span v-for="(src, index) in fileList" :key="index"> + <img + v-if="checkImg(src.name)" + class="v-img" + :src="src.url" + :alt="src.name" + style="width: 100px; height: 100px" + /> + </span> + </div> + </win-md> </template> <script> -import { - procureDetail, -} from '@/api/stock/procure/purchaseOrder'; +import { procureDetail } from '@/api/stock/procure/purchaseOrder'; +import winMd from '@/components/win/win-md'; +import * as DateFormatter from '@/utils/DateFormatter'; +import { getDownUrl } from '@/utils/base'; +import Viewer from 'viewerjs'; +import 'viewerjs/dist/viewer.css'; + +let viewer = null; + export default { + components: { winMd }, + + props: { + setting: { + type: Object, + default: () => {}, + }, + }, data() { return { - visible: false, + fileList: [], detail: { - businessFormCode:'', - goodsTemplateName:'', - agencyId:'', - states:'', - createName:'', - time:'', - procureGoods:[{},{}] + baseCategoryName: '', + businessFormCode: '', + goodsTemplateName: '', + procureDoc: '', + agencyId: '', + agencyName: '', + states: '', + createName: '', + time: '', + procureGoods: [{}, {}], + fileKey: Math.random(), }, }; }, + filters: { + formatTime(time) { + if (!time) return; + return DateFormatter.LongToDateTime(time); + }, + }, + created() { + procureDetail({ id: this.setting.id }).then((res) => { + this.detail = res; + this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : []; + this.$nextTick(() => { + this.initPreviewImg(); + }); + }); + }, methods: { - open(id) { - this.visible = true; - procureDetail({ id }).then(res=>{ - this.detail = res - }) + initPreviewImg() { + if (viewer != null) { + viewer.destroy(); + } + const ViewerDom = document.querySelector('#uploadPreviewImages'); + viewer = new Viewer(ViewerDom, {}); + }, + handlePreview(file) { + if (!this.checkImg(file.name)) { + return false; + } + let index = 0; + for (let i = 0; i < this.fileList.length; i++) { + const f = this.fileList[i]; + if (this.checkImg(f.name)) { + if (file.id == f.id) { + break; + } + index++; + } + } + // this.fileList.forEach((f, i) => { + // if (file.uid == f.uid) { + // index = i + // } + // }) + // document.querySelector('#uploadPreviewImages').children[0].click() + viewer.view(index); + }, + checkImg(name) { + const suffix = name.substring(name.lastIndexOf('.'), name.length); + const imgArray = ['.jpg', '.jpeg', '.png', '.bmp']; + if (imgArray.indexOf(suffix) < 0) { + return false; + } + return true; + }, + getUrl(path) { + if (path.substr(0, 7).toLowerCase() == 'http://' || path.substr(0, 8).toLowerCase() == 'https://') { + return path; + } else { + return getDownUrl() + path; + } }, close() { - this.visible = false; + this.$emit('close'); }, }, }; </script> <style lang="scss" scoped> -.img-row { - display: flex; - align-content: center; +@import url(../../index.scss); +.el-dialog { + z-index: 1100 !important; } -.img-box { - display: inline-block; - width: 80px; - height: 80px; - background: #f9f9f9; - margin-right: 20px; - img { - width: 100%; - } -} - -.goods-card { - position: relative; - background: #f6f6f6; - padding: 20px; - box-sizing: border-box; - border-radius: 4px; - background-color: #f9f9f9; - margin-top: 20px; - &:nth-of-type(1) { - margin-top: 0; - } +>>> .el-dialog { + z-index: 1100 !important; } </style> diff --git a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue index 93e1c42..259b8c8 100644 --- a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue +++ b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue @@ -1,15 +1,5 @@ <template> - <el-dialog - :title="`${type == 'create' ? '鏂板' : '缂栬緫'}${title}`" - width="60%" - :modal="true" - :visible.sync="visible" - :top="'15vh'" - :close-on-click-modal="false" - :append-to-body="true" - :destroy-on-close="true" - @close="close" - > + <win-md class="stock-edit" :title="`${setting.title}閲囪喘鍏ュ簱`" @close="close" :width="'800px'"> <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> <div class="main-w"> <el-row :gutter="24" class="headerHeight"> @@ -35,9 +25,18 @@ </el-col> </el-row> <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="閲囪喘绫诲瀷" prop="buyType"> + <el-select v-model="formData.buyType" placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in buyTypeOptions" :key="item.value" :label="item.label" :value="item.value" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24" class="headerHeight"> <el-col :span="24"> <el-form-item label="閲囪喘鍏ュ簱鎵嬬画" prop="procureDoc"> - <upload :settings="uploadSettings" @on-change="uploadChange"></upload> + <upload ref="uploadRef" :values="fileList" :settings="uploadSettings" @on-change="uploadChange"></upload> </el-form-item> </el-col> </el-row> @@ -171,10 +170,10 @@ </div> </el-form> <div slot="footer" align="center" class="dialog-footer"> - <el-button name="纭畾" site="form" type="primary" @click="handleSubmit">纭畾</el-button> - <el-button name="鍙栨秷" site="form" @click="close">鍙栨秷</el-button> + <my-button name="鍙栨秷" site="form" @click="close"/> + <my-button name="淇濆瓨" site="form" @click="handleSubmit"/> </div> - </el-dialog> + </win-md> </template> <script> import { @@ -189,29 +188,39 @@ import MyButton from '@/components/myButton/myButton'; import winMd from '@/components/win/win-md'; import upload from '@/components/upload/index'; -import { getUploadUrl } from '@/utils/base'; +import { getUploadUrl,getDownUrl} from '@/utils/base'; import SettingIplatform from '../../../../../public/static/config'; export default { components: { MyButton, winMd, upload }, props: { - title: { - type: String, - default: '閲囪喘鍏ュ簱', - }, + setting: { + type: Object, + default: () => { + } + } }, data() { return { - type: 'create', visible: false, loading: false, + buyTypeOptions:[{ + label:'闆嗛噰', + value: '1' + },{ + label:'鑷噰', + value: '2' + }], + fileList:[], warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃 categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 modelList: [], //鍨嬪彿鍒楄〃 formData: { + procureDoc:'', warehouseId: '', // 鍏ュ簱浠撳簱id procureTime: '', // 閲囪喘鏃堕棿 + buyType: '2', // 閲囪喘鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛� procureGoods: [], }, goodsItem: { @@ -237,8 +246,9 @@ rules: { warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], - // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], + procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], @@ -247,41 +257,45 @@ uploadSettings: { title: '涓婁紶', max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M - num: 2, // 鏀寔涓婁紶鍥剧墖涓暟 + num: 10, // 鏀寔涓婁紶鍥剧墖涓暟 accept: '.jpg,.png', // 闄愬埗鏍煎紡 tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb` uploadUrl: getUploadUrl(), // 涓婁紶璺緞 multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶 disabled: false, // 鏄惁绂佺敤 - type: 'text', // text/picture + type: 'picture', // text/picture }, }; }, - created() {}, + created() { + this.init() + }, methods: { - async open(id) { + async init() { this.getWarehouseList(); + this.getgoodsTemplate() this.getgoodsModel(); // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 const treeRes = await getTree(); this.categoryOptions = this.removeEmptyChildren(treeRes); - if (id) { - this.type = 'edit'; - const detail = await procureDetail({ id }); - console.log('procureDetail', detail); + if (this.setting.id) { + const detail = await procureDetail({ id:this.setting.id }); this.formData = Object.assign(this.formData, detail); + if(this.formData.procureDoc) { + this.fileList = JSON.parse(this.formData.procureDoc) + } + this.$set(this.formData,'buyType',this.formData.buyType.toString()) this.formData.procureTime = this.formData.procureTime.toString(); this.formData.procureGoods.map((item, index) => { // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃 let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId); - pIds = pIds.reverse(); item.baseCategoryIds = [...pIds, item.baseCategoryId]; - item.modelsIds = item.models.map((v) => v.baseGoodsModelsId); + this.$set(this.formData.procureGoods[index],'modelsIds',item.models.map((v) => v.baseGoodsModelsId)) this.getgoodsTemplate(item.baseCategoryId, index); this.getgoodsModel(item.baseGoodsTemplateId, index); + return item }); } else { - this.type = 'create'; this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); } this.visible = true; @@ -318,6 +332,8 @@ goodsTemplate({ categoryId: id || '' }).then((res) => { if (index || index == 0) { this.$set(this.formData.procureGoods[index], 'goodsOptions', res); + }else { + this.goodsTemplatelAll = res; } }); }, @@ -333,6 +349,15 @@ }); }, + // 鏍规嵁鐗╁搧鍚嶇Оid鑾峰彇鍚嶅瓧 + getGoodsTemplateName(id) { + let item = this.goodsTemplatelAll.find((v) => v.id == id); + if (item) { + return item.goodsName; + } + return; + }, + // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧 getGoodsModelsName(id) { let item = this.goodsModelAll.find((v) => v.id == id); @@ -345,7 +370,11 @@ // 鐗╁搧鍒嗙被閫夋嫨 categoryChange(e, index) { this.formData.procureGoods[index].goodsOptions = [] - this.formData.procureGoods[index].baseCategoryId = '' + this.formData.procureGoods[index].baseGoodsTemplateId = '' + this.formData.procureGoods[index].goodsTemplateName = '' + this.formData.procureGoods[index].modelsOptions = [] + this.formData.procureGoods[index].modelsIds = [] + this.formData.procureGoods[index].models = [] this.formData.procureGoods[index].baseCategoryId = e[e.length - 1]; // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 @@ -358,6 +387,7 @@ this.formData.procureGoods[index].modelsIds = [] this.formData.procureGoods[index].models = [] + this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e) // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 this.getgoodsModel(e, index); }, @@ -383,8 +413,9 @@ }, // 涓婁紶 - uploadChange(e) { - console.log('uploadChange', e); + uploadChange() { + let arr = this.$refs.uploadRef.fileList + this.formData.procureDoc = JSON.stringify(arr) }, // 鐐瑰嚮鏂板鐗╁搧 @@ -402,7 +433,7 @@ this.$refs['ruleForm'].validate((valid) => { if (valid) { console.log('this.formData', this.formData); - if (this.type == 'create') { + if (!this.setting.id) { procureAdd(this.formData) .then((res) => { this.$message.success('淇濆瓨鎴愬姛锛�'); @@ -437,12 +468,12 @@ procureTime: '', // 閲囪喘鏃堕棿 procureGoods: [], } - this.visible = false; + this.$emit('close') }, // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁� findParentIds(dataSource, nodeId) { - const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + const parentIds = [nodeId]; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣 function traverse(node, nodeId) { @@ -456,7 +487,7 @@ for (const childNode of node.children) { if (traverse(childNode, nodeId)) { // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 - parentIds.push(node.id); + parentIds.unshift(node.id); return true; } } @@ -479,33 +510,5 @@ }; </script> <style scoped lang="scss"> -.main-w { - width: 88%; -} -.goods-card { - position: relative; - background: #f6f6f6; - padding: 20px; - box-sizing: border-box; - border-radius: 4px; - background-color: #f9f9f9; - margin-top: 20px; - &:nth-of-type(1) { - margin-top: 0; - } -} -.btn-group { - width: 140px; - position: absolute; - right: -160px; - bottom: 0px; - .el-button { - margin-bottom: 10px; - margin-left: 0; - display: block; - &:last-child { - margin-bottom: 0; - } - } -} +@import url(../../index.scss); </style> diff --git a/admin-web/src/views/stock/procure/purchaseOrder/index.vue b/admin-web/src/views/stock/procure/purchaseOrder/index.vue index 826f06f..d0deb5a 100644 --- a/admin-web/src/views/stock/procure/purchaseOrder/index.vue +++ b/admin-web/src/views/stock/procure/purchaseOrder/index.vue @@ -1,5 +1,5 @@ <template> - <div class="app-container"> + <div class="app-container stock-container"> <el-container> <el-card class="box-card" style="width: 100%" shadow="never"> <!--鎼滅储鏉′欢--> @@ -9,8 +9,10 @@ <el-row style="margin-top: 15px"> <el-col> <!--鍒楄〃--> - <my-button name="鏂板" @click="addtable" site="tools" size="medium" /> - <my-button name="瀵煎叆" @click="importSetting.dialogShow = true" site="tools" size="medium" /> + <div class="table-tool-bar" style="margin-bottom: 15px"> + <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" /> + <my-button name="瀵煎叆" @click="importSetting.dialogShow = true" site="tools" size="medium" /> + </div> <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading"> <el-row class="card" :gutter="5"> <el-col v-for="(item, index) in list" :key="index" class="cm-item"> @@ -20,7 +22,9 @@ <div class="card-header-left"> <span>鍏ュ簱鍗曞彿锛�</span> <span class="value">{{ item.businessFormCode }}</span> - <div class="states" :class="item.states==1?'':'states-income'">{{ item.states == 1 ? '寰呭叆搴�' : '宸插叆搴�' }}</div> + <div class="states" :class="item.states == 1 ? '' : 'states-success'"> + {{ item.states == 1 ? '寰呭叆搴�' : '宸插叆搴�' }} + </div> </div> <div class="card-header-right"> <template v-if="item.states == 1"> @@ -47,20 +51,21 @@ <div class="one-hed"> <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyId }}</div> <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.buyerName }}</div> - <div class="box"><span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.procureTime }}</div> - <div class="box"><span class="span-two">鍏ュ簱鏃堕棿锛�</span>{{ item.procureTime }}</div> + <div class="box"> + <span class="span-two">閲囪喘鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + </div> + <div class="box"> + <span class="span-two">鍏ュ簱鏃堕棿锛�</span>{{ item.incomeTime | formatTime }} + </div> </div> <div class="card-end"> - <div v-for="(just, index) in item.models" :key="index" class="item"> - <div class="name">{{ just.baseGoodsModelsId }}</div> + <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item"> + <div class="name">{{ just.goodsTemplateName }}</div> <div class="value-box"> <div class="value-box-item"> <span class="label">鏁伴噺锛�</span> - <span class="value">{{ just.counts }}</span> - </div> - <div class="value-box-item"> - <span class="label">閲戦锛�</span> - <span class="value">{{ just.price }}</span> + <span class="value">{{ just.count }}</span> + <span class="unit">{{ just.unit }}</span> </div> </div> </div> @@ -85,8 +90,19 @@ </el-card> </el-container> <!--娣诲姞/缂栬緫寮圭獥--> - <edit ref="editRef"></edit> - <detail ref="detailRef"></detail> + <edit + v-if="editSetting.show" + :setting="editSetting" + ref="editRef" + @close="editSetting.show = false" + @search="refreshData" + ></edit> + <detail + v-if="detailSetting.show" + :setting="detailSetting" + @close="detailSetting.show = false" + ref="detailRef" + ></detail> <my-import :import-setting="importSetting" :dialog-show="importSetting.dialogShow" @@ -97,12 +113,14 @@ <script> import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder'; +import { getTree } from '@/api/baseSetting/finsystenant'; import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; import myImport from '@/views/components/myImport'; import edit from './edit'; import detail from './detail'; import { getBaseUrl } from '@/utils/base'; +import * as DateFormatter from '@/utils/DateFormatter'; export default { name: 'index', @@ -112,16 +130,6 @@ loading: false, adddialog: false, list: [], - formData: { - tableData: [ - { - projectName: '555', - }, - { - projectName: '444', - }, - ], - }, // 鎼滅储妗� items: [ { @@ -139,10 +147,11 @@ defaultValue: '', }, { - type: 'select', - dataIndex: 'name', + type: 'cascader', + dataIndex: 'agencyId', label: '鏈烘瀯', placeholder: '璇烽�夋嫨', + optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, defaultValue: '', options: [], }, @@ -176,13 +185,13 @@ }, { type: 'date-picker', - dataIndex: 'val1', + dataIndex: 'incomeTimeStart', label: '鍏ュ簱鏃堕棿', defaultValue: '', }, { type: 'date-picker', - dataIndex: 'val2', + dataIndex: 'incomeTimeEnd', label: '鑷�', defaultValue: '', }, @@ -220,6 +229,11 @@ orgId: '', show: false, }, + detailSetting: { + title: '璇︽儏', + id: '', + show: false, + }, pageNum: 1, pageSize: 10, total: 0, @@ -228,6 +242,12 @@ computed: { clientHeight() { return document.documentElement.clientHeight; + }, + }, + filters: { + formatTime(time) { + if (!time) return; + return DateFormatter.LongToDateTime(time); }, }, created() { @@ -247,6 +267,7 @@ console.log(this.list); }); }, + //瀵煎叆 importOrg() { this.importSetting.dialogShow = true; @@ -261,61 +282,79 @@ }; }, // 瀵煎嚭 - handleExport() { - - }, + handleExport() {}, // 鏂板 - addtable() { - this.$refs.editRef.open(); + handleAdd() { + this.editSetting.id = null; + this.editSetting.info = null; + this.editSetting.title = '鏂板'; + this.editSetting.show = true; }, // 缂栬緫 handleEdit(row) { - this.$refs.editRef.open(row.id); + this.editSetting.id = row.id; + this.editSetting.info = null; + this.editSetting.title = '缂栬緫'; + this.editSetting.show = true; }, // 璇︽儏 handleDetail(row) { - this.$refs.detailRef.open(row.id); + this.detailSetting.id = row.id; + this.detailSetting.show = true; }, // 鍏ュ簱 handleIncome(row) { - this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 鍏ュ簱鍚�?`, '閲囪喘鍏ュ簱') - .then(function () { - procureIncome({ id: row.id }).then((res) => { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 鍏ュ簱鍚�?`, '閲囪喘鍏ュ簱').then(() => { + procureIncome({ id: row.id }) + .then((res) => { this.$message.success('鍏ュ簱鎴愬姛锛�'); - }); - }) - .then((res) => { - this.search(); - }) - .catch(() => {}); + this.search(); + }) + .catch(() => {}); + }); }, del(row) { - this.$modal - .confirm('鏄惁纭鍒犻櫎鍏ュ簱鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�') - .then(function () { - procureDel({ id: row.id }).then((res) => {}); - }) - .then((res) => { - this.$message.success('鍒犻櫎鎴愬姛锛�'); - this.search(); - }) - .catch(() => {}); + this.$modal.confirm('鏄惁纭鍒犻櫎鍏ュ簱鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�').then( () => { + procureDel({ id: row.id }) + .then((res) => { + this.$message.success('鍒犻櫎鎴愬姛锛�'); + this.search(); + }) + .catch(() => {}); + }); }, // 鍒嗛〉 handleSizeChange(pageSize) { this.pageSize = pageSize; - this.search({ pageNum: 1 }); + this.search(1); }, handleCurrentChange(pageNum) { - this.myTable.paging.page.pageNum = pageNum; - this.search({ pageNum: pageNum }); + this.pageNum = pageNum; + this.search(pageNum); }, // 鏌ヨtable鍒楄〃 search(pageNum) { + if (pageNum) { + this.pageNum = pageNum; + } this.fetchData(); + }, + refreshData() { + this.pageNum = 1; + this.pageSize = 10; + this.search(); }, fifterForm(params) { this.filterFrom = Object.assign(this.filterFrom, params); + if (this.filterFrom.incomeTimeStart) { + this.filterFrom.incomeTimeStart = this.filterFrom.incomeTimeStart.replace(/\-/g, ''); + } + if (this.filterFrom.incomeTimeEnd) { + this.filterFrom.incomeTimeEnd = this.filterFrom.incomeTimeEnd.replace(/\-/g, ''); + } + if (this.filterFrom.agencyId.length) { + this.filterFrom.agencyId = this.filterFrom.agencyId[this.filterFrom.agencyId.length - 1]; + } this.search(1); }, }, @@ -323,120 +362,5 @@ </script> <style scoped lang="scss"> -.ml-20 { - margin-left: 20px; -} -.card { - display: flex; - flex-wrap: wrap; - margin: 0px !important; - .cm-item { - width: 100%; - } - .cm-item ::v-deep .el-card__body { - padding-bottom: 5px; - } -} -.card-data { - position: relative; - margin-top: 8px; - .card-container { - .card-header { - height: 48px; - display: flex; - align-items: center; - justify-content: space-between; - background: #f3f9fe; - padding: 0 32px 0 15px; - box-sizing: border-box; - } - .card-header-left { - display: flex; - align-items: center; - color: #999999; - font-family: 'Microsoft YaHei UI'; - font-size: 18px; - font-weight: 700; - .value { - color: #3d3d3d; - } - - .states { - width: 54px; - height: 22px; - line-height: 22px; - text-align: center; - border-radius: 4px; - border: 1px solid #f9675b99; - background: #f9675b1a; - font-family: 'Microsoft YaHei'; - color: #f9675b; - font-size: 13px; - font-style: normal; - font-weight: 400; - margin-left: 8px; - } - .states-income { - border: 1px solid #39ad6199; - background: #39ad610f; - color: #39ad61; - } - } - .one-hed { - margin-top: 15px; - padding: 0 32px 0 15px; - box-sizing: border-box; - .box { - display: inline-block; - margin-right: 20px; - } - .span-two { - color: #83919e; - font-size: 14px; - } - } - .card-end { - font-size: 14px; - color: #3d3d3d; - margin-top: 15px; - display: flex; - flex-wrap: wrap; - font-family: 'Microsoft YaHei UI'; - padding: 0 16px; - box-sizing: border-box; - .item { - width: 379px; - height: 60px; - padding: 8px 12px 9px 12px; - box-sizing: border-box; - align-items: center; - gap: 8px; - flex-shrink: 0; - background: #f9f9f9; - margin-right: 15px; - margin-bottom: 15px; - &:last-child { - margin-right: 0; - } - .name { - height: 22px; - line-height: 22px; - } - .value-box { - display: flex; - .value-box-item { - margin-right: 20px; - .label { - color: #99999999; - line-height: 22px; - } - .value { - color: #ff3131; - } - } - } - } - } - } -} +@import url(../../index.scss); </style> diff --git a/admin-web/src/views/stock/procure/receiptDetails/index.vue b/admin-web/src/views/stock/procure/receiptDetails/index.vue index 494f54e..dd58717 100644 --- a/admin-web/src/views/stock/procure/receiptDetails/index.vue +++ b/admin-web/src/views/stock/procure/receiptDetails/index.vue @@ -10,11 +10,11 @@ <el-row style="margin-top: 15px"> <el-col> <!--鍒楄〃--> - <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/> + <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" /> </el-col> </el-row> <!--娣诲姞/缂栬緫寮圭獥--> - <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"/> + <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false" /> </el-card> </el-container> </el-container> @@ -27,58 +27,72 @@ </template> <script> -import MyTableV2 from "@/components/myTable/myTableV2"; -import MyButton from "@/components/myButton/myButton"; +import * as DateFormatter from '@/utils/DateFormatter'; +import MyTableV2 from '@/components/myTable/myTableV2'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import edit from './edit' -import * as finsystenant from '@/api/baseSetting/finsystenant' -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import detail from '../purchaseOrder/detail'; +import * as finsystenant from '@/api/baseSetting/finsystenant'; +import {goodsModel} from '@/api/stock/procure/purchaseOrder'; +import myImport from '@/views/components/myImport'; +import { getBaseUrl } from '@/utils/base'; export default { - name: "index", - components: {MyButton, MyTableV2, edit, myImport}, + name: 'index', + components: { MyButton, MyTableV2, detail, myImport }, data() { return { // 鎼滅储妗� items: [ { type: 'text', - dataIndex: 'name', + dataIndex: 'businessFormCode', label: '鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'text', + dataIndex: 'goodsTemplateName', + label: '鐗╁搧鍚嶇О', + placeholder: '璇疯緭鍏�', + defaultValue: '', }, { type: 'select', - dataIndex: 'status', - label: '绫诲瀷', + dataIndex: 'baseGoodsTemplateId', + label: '瑙勬牸鍨嬪彿', placeholder: '璇烽�夋嫨', - defaultValue: '1', - options: [ - { - label: '鍚敤', - value: '1' - }, - { - label: '绂佺敤', - value: '0' - } - ] + defaultValue: '', + options:[] + }, + { + type: 'cascader', + dataIndex: 'agencyId', + label: '鏈烘瀯', + placeholder: '璇烽�夋嫨', + optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, + defaultValue: '', + options: [], }, { type: 'text', - dataIndex: 'name', - label: '鐗╁搧鍚嶇О', - placeholder: '璇疯緭鍏�', - defaultValue: '' - }, - { - type: 'text', - dataIndex: 'name', + dataIndex: 'buyerName', label: '鍒涘缓浜�', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'date-picker', + dataIndex: 'incomeTimeStart', + label: '鏃堕棿', + defaultValue: '', + }, + { + type: 'date-picker', + dataIndex: 'incomeTimeEnd', + label: '鑷�', + defaultValue: '', }, ], // 鏍戞暟鎹� @@ -86,29 +100,28 @@ // 鎼滅储鏉′欢 filterFrom: { tenantId: null, - userName: null, - userPhone: null, - status: 1 + agencyId:[], + status: 1, }, // 瀵煎叆 importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null + dialogTitle: '瀵煎叆', + dialogShow: false, + fileSettings: { + data: {}, + uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃 + accept: '.xls', // 鏍煎紡 + type: 'text', // 鍥炴樉褰㈠紡 + loading: false, // 瀵煎叆鏁堟灉 + }, + /* 妯℃澘涓嬭浇 */ + templateSettings: { + templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О + templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃 + }, + onSuccess: null, }, - editSetting: { + detailSetting: { title: '', id: '', orgId: '', @@ -118,30 +131,39 @@ table: { showIndex: true, // 鏄惁鏄剧ず搴忓彿 expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁 - url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 璇锋眰鍦板潃 + url: SettingIplatform.apiBaseURL + '/pc/whForm/procure/detail/list', // 璇锋眰鍦板潃 // 宸ュ叿鏉� tools: { - columnsCtrl: {// 鍒楁帶鍒舵寜閽� - show: false + columnsCtrl: { + // 鍒楁帶鍒舵寜閽� + show: false, }, - generalExport: {// 閫氱敤瀵煎嚭鎸夐挳 - show: false + generalExport: { + // 閫氱敤瀵煎嚭鎸夐挳 + show: false, }, // 鑷畾涔夊伐鍏锋潯鎸夐挳 - custom: [ - ] + custom: [], }, // 鍒椾俊鎭� columns: [ - {title: '鍗曞彿', field: 'code', align: 'center'}, - {title: '鐗╁搧鍚嶇О', field: 'lv', align: 'center', }, - {title: '瑙勬牸鍨嬪彿', field: 'lv', align: 'center', }, - {title: '鍗曚环', field: 'summary', align: 'left',}, - {title: '鍏ュ簱鏁伴噺', field: 'summary', align: 'left',}, - {title: '閲戦', field: 'summary', align: 'left',}, - {title: '鎵�灞炴満鏋�', field: 'summary', align: 'left',}, - {title: '鍒涘缓浜�', field: 'summary', align: 'left',}, - {title: '鎿嶄綔鏃堕棿', field: 'summary', align: 'left',}, + { title: '鍗曞彿', field: 'businessFormCode', align: 'center' }, + { title: '鐗╁搧鍚嶇О', field: 'goodsTemplateName', align: 'center' }, + { title: '瑙勬牸鍨嬪彿', field: 'baseGoodsModelsName', align: 'center' }, + { title: '鍗曚环', field: 'price', align: 'center' }, + { title: '鍏ュ簱鏁伴噺', field: 'counts', align: 'center' }, + { title: '閲戦', field: 'amount', align: 'center' }, + { title: '鎵�灞炴満鏋�', field: 'agencyName', align: 'center' }, + { title: '鍒涘缓浜�', field: 'buyerName', align: 'center' }, + { + title: '鎿嶄綔鏃堕棿', + field: 'procureTime', + align: 'center', + width: 160, + formatter: (row) => { + return { value: DateFormatter.LongToDateTime(row.procureTime) }; + }, + }, ], // 鎿嶄綔淇℃伅 operation: { @@ -151,7 +173,7 @@ { title: '璇︽儏', events: (row) => { - this.showAudit(row); + this.showDetail(row); }, }, ], @@ -163,118 +185,95 @@ small: false, pageNum: 1, pageSize: 10, - total: 0 - } - } + total: 0, + }, + }, }, - } + }; }, created() { - // 鑾峰彇鏈烘瀯鏍� - this.initTreeData() + // 鎼滅储妗嗚鏍煎瀷鍙� + goodsModel().then(res=>{ + this.items.forEach(v=>{ + if(v.label=='瑙勬牸鍨嬪彿'){ + v.options = res.map(item=>{ + item.label = item.modelName, + item.value = item.id + return item + }) + } + }) + }) }, methods: { //瀵煎叆 importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() + this.importSetting.dialogShow = true; + this.importSetting.onSuccess = (response, callBack) => { + if (response.code === 1) { + this.$message.success(response.msg); + this.search(1); + } else { + this.$message.warning(response.msg); } - }, - // 宸︿晶鏍戝垵濮嬪寲 - initTreeData() { - finsystenant.getTree().then(res => { - const content = res || [] - this.treeDataList.splice(0, this.treeDataList.length) - this.treeDataList = content - if (content.length > 0) { - this.importSetting.fileSettings.data = {pid: content[0].id} - } - }) + callBack(); + }; }, updState(row) { - let vm = this - let text = row.status == 0 ? "鍚敤" : "绂佺敤"; + let vm = this; + let text = row.status == 0 ? '鍚敤' : '绂佺敤'; vm.$modal.confirm('纭瑕�' + text + '"' + row.name + '"鍚楋紵').then(function () { - let params = Object.assign({}, row) - params.status = row.status == 1 ? 0 : 1 - finsystenant.edit(params).then(res => { + let params = Object.assign({}, row); + params.status = row.status == 1 ? 0 : 1; + finsystenant.edit(params).then((res) => { if (res) { - row.status = row.status === 1 ? 0 : 1 - vm.$modal.msgSuccess(text + "鎴愬姛"); - vm.search() + row.status = row.status === 1 ? 0 : 1; + vm.$modal.msgSuccess(text + '鎴愬姛'); + vm.search(); } - }) - }) + }); + }); }, del(row) { this.$modal .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.name + '"鐨勬満鏋勫悧锛�') .then(function () { - finsystenant.del({id: row.id}).then((res) => { - }); + finsystenant.del({ id: row.id }).then((res) => {}); }) .then((res) => { this.$message.success('鍒犻櫎鎴愬姛锛�'); - this.search() + this.search(); }) - .catch(() => { - }); + .catch(() => {}); }, - showAdd() { - // if (!this.editSetting.orgId) { - // this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') - // } else { - this.editSetting.id = null; - this.editSetting.info = null; - this.editSetting.title = '鏂板'; - this.editSetting.show = true; - // } - }, - showAudit(row) { - this.editSetting.id = row.id; - this.editSetting.info = JSON.stringify(row); - this.editSetting.title = '缂栬緫'; - this.editSetting.show = true; - }, - nodeClick(param) { - param = param || {} - this.p = Object.assign({}, { - id: param.id, - name: param.name - }) - if (this.p.id != undefined && this.p.id != null) { - this.filterFrom.tenantId = this.p.id - this.editSetting.orgId = this.p.id - } else { - this.filterFrom.tenantId = null - this.editSetting.orgId = null - } - this.importSetting.fileSettings.data = {pid: param.id} - this.search(1) + showDetail(row) { + this.detailSetting.id=row.businessId + this.detailSetting.title='璇︽儏' + this.detailSetting.show=true }, // 鏌ヨtable鍒楄〃 search(pageNum) { if (pageNum != undefined) { - this.$refs.myTable.search(pageNum) + this.$refs.myTable.search(pageNum); } else { - this.$refs.myTable.search() + this.$refs.myTable.search(); } }, fifterForm(params) { - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + if (this.filterFrom.incomeTimeStart) { + this.filterFrom.incomeTimeStart = this.filterFrom.incomeTimeStart.replace(/\-/g, ''); + } + if (this.filterFrom.incomeTimeEnd) { + this.filterFrom.incomeTimeEnd = this.filterFrom.incomeTimeEnd.replace(/\-/g, ''); + } + if (params.agencyId&¶ms.agencyId.length) { + this.filterFrom.agencyId = params.agencyId[params.agencyId.length - 1]; + } + this.search(1); + }, + }, +}; </script> -<style scoped> - -</style> +<style scoped></style> diff --git a/admin-web/src/views/stock/scrap/itemScrapping/detail.vue b/admin-web/src/views/stock/scrap/itemScrapping/detail.vue new file mode 100644 index 0000000..c1b2bc7 --- /dev/null +++ b/admin-web/src/views/stock/scrap/itemScrapping/detail.vue @@ -0,0 +1,120 @@ +<template> + <el-dialog + title="璇︽儏" + width="60%" + :modal="true" + :visible.sync="visible" + :top="'15vh'" + :close-on-click-modal="false" + :append-to-body="true" + :destroy-on-close="true" + @close="close" + class="stock-detail" + > + <el-row :gutter="20"> + <el-col :span="8"> + <span>鍏ュ簱鍗曞彿锛�</span> + <span>{{ detail.businessFormCode }}</span> + </el-col> + <el-col :span="8"> + <span>鍏ュ簱浠撳簱锛�</span> + <span>{{ detail.goodsTemplateName }}</span> + </el-col> + <el-col :span="8"> + <span>鎵�灞炴満鏋勶細</span> + <span>{{ detail.agencyId }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col :span="8"> + <span>鐘舵�侊細</span> + <span>{{ detail.states == 1 ? '寰呭叆搴�' : '宸插叆搴�' }}</span> + </el-col> + <el-col :span="8"> + <span>鍒涘缓浜猴細</span> + <span>{{ detail.buyerName }}</span> + </el-col> + <el-col :span="8"> + <span>鍏ュ簱鏃堕棿锛�</span> + <span>{{ detail.time }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col class="img-row" :span="24"> + <span>閲囪喘鎵嬬画鐓х墖锛�</span> + <div class="img-box"></div> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex"> + <el-row :gutter="20"> + <el-col :span="8"> + <span>鐗╁搧鍒嗙被锛�</span> + <span>{{ goodsItem.baseCategoryId }}</span> + </el-col> + <el-col :span="8"> + <span>鐗╁搧鍚嶇О锛�</span> + <span>{{ goodsItem.baseGoodsTemplateId }}</span> + </el-col> + <el-col :span="8"> + <span>渚涜揣鍟嗭細</span> + <span>{{ goodsItem.supplier }}</span> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px"> + <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ scope.row.baseGoodsModelsId }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center"> + <template slot-scope="scope"> + <el-input v-model="scope.row.price"></el-input> + </template> + </el-table-column> + <el-table-column prop="counts" label="鍑哄簱鏁伴噺" align="center"> + <template slot-scope="scope"> + <el-input v-model="scope.row.counts"></el-input> + </template> + </el-table-column> + </el-table> + </div> + </el-dialog> +</template> +<script> +import { procureDetail } from '@/api/stock/procure/purchaseOrder'; +export default { + data() { + return { + visible: false, + detail: { + businessFormCode: '', + goodsTemplateName: '', + agencyId: '', + states: '', + createName: '', + time: '', + procureGoods: [{}, {}], + }, + }; + }, + methods: { + open(id) { + this.visible = true; + procureDetail({ id }).then((res) => { + this.detail = res; + }); + }, + close() { + this.visible = false; + }, + }, +}; +</script> +<style lang="scss" scoped> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/scrap/itemScrapping/edit.vue b/admin-web/src/views/stock/scrap/itemScrapping/edit.vue new file mode 100644 index 0000000..7c48f51 --- /dev/null +++ b/admin-web/src/views/stock/scrap/itemScrapping/edit.vue @@ -0,0 +1,486 @@ +<template> + <el-dialog + :title="`${type == 'create' ? '鏂板' : '缂栬緫'}${title}`" + width="60%" + :modal="true" + :visible.sync="visible" + :top="'15vh'" + :close-on-click-modal="false" + :append-to-body="true" + :destroy-on-close="true" + @close="close" + class="stock-edit" + > + <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> + <div class="main-w"> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="鍏ュ簱浠撳簱" prop="warehouseId"> + <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="閲囪喘鏃堕棿" prop="procureTime"> + <el-date-picker + v-model="formData.procureTime" + type="datetime" + value="yyyy-MM-dd HH:mm:ss" + value-format="yyyyMMddHHmmss" + placeholder="璇烽�夋嫨鏃ユ湡" + style="width: 100%" + > + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="24"> + <el-form-item label="閲囪喘鍏ュ簱鎵嬬画" prop="procureDoc"> + <upload :settings="uploadSettings" @on-change="uploadChange"></upload> + </el-form-item> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex"> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍒嗙被" + :prop="`procureGoods[${goodsIndex}].baseCategoryIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-cascader + v-model="goodsItem.baseCategoryIds" + :options="categoryOptions" + :props="{ value: 'id' }" + @change="categoryChange($event, goodsIndex)" + style="width: 100%" + ></el-cascader> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍚嶇О" + :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.baseGoodsTemplateId" + placeholder="璇峰厛鎷╃墿鍝佸垎绫�" + filterable + :disabled="!goodsItem.baseCategoryId" + style="width: 100%" + @change="goodsTemplateChange($event, goodsIndex)" + > + <el-option + v-for="item in goodsItem.goodsOptions" + :key="item.id" + :label="item.goodsName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="瑙勬牸鍨嬪彿" + :prop="`procureGoods[${goodsIndex}].modelsIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.modelsIds" + multiple + placeholder="璇峰厛鎷╃墿鍝佸悕绉�" + :disabled="!goodsItem.baseCategoryId" + @change="modelChange($event, goodsIndex)" + @remove-tag="modelRemoveTag($event, goodsIndex)" + style="width: 100%" + > + <el-option + v-for="item in goodsItem.modelsOptions" + :key="item.id" + :label="item.modelName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="渚涜揣鍟�" prop="supplier"> + <el-input v-model="goodsItem.supplier" clearable maxlength="20" show-word-limit /> + </el-form-item> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true"> + <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鍗曚环锛堝厓锛�" align="center"> + <template slot-scope="scope"> + <el-input type="number" v-model="scope.row.price"></el-input> + </template> + </el-table-column> + <el-table-column prop="counts" label="閲囪喘鏁伴噺" align="center"> + <template slot-scope="scope"> + <el-input type="number" v-model="scope.row.counts"></el-input> + </template> + </el-table-column> + </el-table> + <div class="btn-group"> + <el-button + v-if="formData.procureGoods.length > 1" + name="绉婚櫎" + type="danger" + plain + size="mini" + @click="removeGoods(goodsIndex)" + >绉婚櫎</el-button + > + <el-button + v-if="formData.procureGoods.length - 1 == goodsIndex" + name="鏂板鐗╁搧" + type="primary" + plain + size="mini" + @click="addGoods" + >鏂板鐗╁搧</el-button + > + </div> + </div> + </div> + </el-form> + <div slot="footer" align="center" class="dialog-footer"> + <el-button name="纭畾" site="form" type="primary" @click="handleSubmit">纭畾</el-button> + <el-button name="鍙栨秷" site="form" @click="close">鍙栨秷</el-button> + </div> + </el-dialog> +</template> +<script> +import { + goodsTemplate, + procureAdd, + procureEdit, + selectTenantWarehouse, + goodsModel, + procureDetail, +} from '@/api/stock/procure/purchaseOrder'; +import { getTree } from '@/api/foudation/classification'; +import MyButton from '@/components/myButton/myButton'; +import winMd from '@/components/win/win-md'; +import upload from '@/components/upload/index'; +import { getUploadUrl } from '@/utils/base'; + +import SettingIplatform from '../../../../../public/static/config'; + +export default { + components: { MyButton, winMd, upload }, + props: { + title: { + type: String, + default: '閲囪喘鍏ュ簱', + }, + }, + data() { + return { + type: 'create', + visible: false, + loading: false, + warehouses: [], // 鍏ュ簱浠撳簱鍒楄〃 + categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 + modelList: [], //鍨嬪彿鍒楄〃 + formData: { + warehouseId: '', // 鍏ュ簱浠撳簱id + procureTime: '', // 閲囪喘鏃堕棿 + procureGoods: [], + }, + goodsItem: { + whFormProcureId: '', // 閲囪喘鍗旾D + baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 + baseCategoryId: '', // 鍒嗙被缂栧彿 + baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿 + goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О + supplier: '', // 渚涘簲鍟� + sort: '', // 鏄剧ず椤哄簭 + goodsOptions: [], // 鐗╁搧鍒楄〃select + modelsOptions: [], //瑙勬牸鍨嬪彿select + models: [], // 鐗╁搧鍚嶇О + modelsIds: [], //瑙勬牸鍨嬪彿 + }, + modelsItem: { + baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿 + price: 0, // 鍗曚环(閲囪喘闇�瑕侊紝璋冩嫧涓嶉渶瑕�) + counts: 0, // 鎿嶄綔鏁伴噺 + supplier: '', // 渚涘簲鍟� + unit: null, //鍗曚綅 + }, + rules: { + warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + + // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], + baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + }, + + uploadSettings: { + title: '涓婁紶', + max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M + num: 2, // 鏀寔涓婁紶鍥剧墖涓暟 + accept: '.jpg,.png', // 闄愬埗鏍煎紡 + tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb` + uploadUrl: getUploadUrl(), // 涓婁紶璺緞 + multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶 + disabled: false, // 鏄惁绂佺敤 + type: 'text', // text/picture + }, + }; + }, + created() {}, + methods: { + async open(id) { + this.getWarehouseList(); + this.getgoodsModel(); + // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 + const treeRes = await getTree(); + this.categoryOptions = this.removeEmptyChildren(treeRes); + if (id) { + this.type = 'edit'; + const detail = await procureDetail({ id }); + console.log('procureDetail', detail); + this.formData = Object.assign(this.formData, detail); + this.formData.procureTime = this.formData.procureTime.toString(); + this.formData.procureGoods.map((item, index) => { + // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃 + let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId); + pIds = pIds.reverse(); + item.baseCategoryIds = [...pIds, item.baseCategoryId]; + item.modelsIds = item.models.map((v) => v.baseGoodsModelsId); + this.getgoodsTemplate(item.baseCategoryId, index); + this.getgoodsModel(item.baseGoodsTemplateId, index); + }); + } else { + this.type = 'create'; + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + } + this.visible = true; + }, + + // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃 + getWarehouseList() { + selectTenantWarehouse() + .then((res) => { + this.warehouses = res; + if (this.warehouses.length && !this.formData.warehouseId) { + // 榛樿閫変腑绗竴涓粨搴� + this.formData.warehouseId = this.warehouses[0].id; + } + }) + .catch((err) => { + console.log('err', err); + }); + }, + + removeEmptyChildren(arr) { + arr.forEach((item) => { + if (!item.children || !item.children.length) { + delete item.children; + } else { + this.removeEmptyChildren(item.children); + } + }); + return arr; + }, + + // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 + getgoodsTemplate(id, index) { + goodsTemplate({ categoryId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'goodsOptions', res); + } + }); + }, + + // 瑙勬牸鍨嬪彿 + getgoodsModel(id, index) { + goodsModel({ goodsTemplatesId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'modelsOptions', res); + } else { + this.goodsModelAll = res; + } + }); + }, + + // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧 + getGoodsModelsName(id) { + let item = this.goodsModelAll.find((v) => v.id == id); + if (item) { + return item.modelName; + } + return; + }, + + // 鐗╁搧鍒嗙被閫夋嫨 + categoryChange(e, index) { + this.formData.procureGoods[index].goodsOptions = [] + this.formData.procureGoods[index].baseGoodsTemplateId = '' + this.formData.procureGoods[index].goodsTemplateName = '' + + this.formData.procureGoods[index].baseCategoryId = e[e.length - 1]; + // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 + this.getgoodsTemplate(e[e.length - 1], index); + }, + + // 鐗╁搧鍚嶇О鍒楄〃 + goodsTemplateChange(e, index) { + this.formData.procureGoods[index].modelsOptions = [] + this.formData.procureGoods[index].modelsIds = [] + this.formData.procureGoods[index].models = [] + + this.formData.goodsTemplateName = this.getGoodsModelsName(e) + // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 + this.getgoodsModel(e, index); + }, + + // 瑙勬牸鍨嬪彿閫夋嫨 + modelChange(e, index) { + let arr = [...this.formData.procureGoods[index].models]; + let str = JSON.stringify(arr); + e.forEach((item) => { + if (str.indexOf(item) == -1) { + let temp = this.goodsModelAll.find((v) => v.id == item); + arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit }); + } + }); + this.formData.procureGoods[index].models = arr; + }, + + // 瑙勬牸鍨嬪彿绉婚櫎 + modelRemoveTag(e, index) { + let arr = this.formData.procureGoods[index].models; + let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e); + this.formData.procureGoods[index].models.splice(delIndex, 1); + }, + + // 涓婁紶 + uploadChange(e) { + console.log('uploadChange', e); + }, + + // 鐐瑰嚮鏂板鐗╁搧 + addGoods() { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + }, + + // 鐐瑰嚮绉婚櫎 + removeGoods(index) { + this.formData.procureGoods.splice(index, 1); + }, + + // 鎻愪氦 + handleSubmit() { + this.$refs['ruleForm'].validate((valid) => { + if (valid) { + console.log('this.formData', this.formData); + if (this.type == 'create') { + procureAdd(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('create err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } else { + procureEdit(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('edit err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } + } else { + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); + } + }); + }, + + close() { + this.formData ={ + warehouseId: '', // 鍏ュ簱浠撳簱id + procureTime: '', // 閲囪喘鏃堕棿 + procureGoods: [], + } + this.visible = false; + }, + + // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁� + findParentIds(dataSource, nodeId) { + const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + + // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣 + function traverse(node, nodeId) { + if (node.id === nodeId) { + // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣 + return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + } + + if (node.children) { + // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐� + for (const childNode of node.children) { + if (traverse(childNode, nodeId)) { + // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + parentIds.push(node.id); + return true; + } + } + } + + return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse + } + + // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣 + for (const node of dataSource) { + if (traverse(node, nodeId)) { + // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜� + break; + } + } + + return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + }, + }, +}; +</script> +<style scoped lang="scss"> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/scrap/itemScrapping/index.vue b/admin-web/src/views/stock/scrap/itemScrapping/index.vue index ea1d5b0..0c7be3d 100644 --- a/admin-web/src/views/stock/scrap/itemScrapping/index.vue +++ b/admin-web/src/views/stock/scrap/itemScrapping/index.vue @@ -1,118 +1,79 @@ <template> - <div class="app-container"> + <div class="app-container stock-container"> <el-container> - <el-container> - <el-card class="box-card" style="width: 100%" shadow="never"> - <!--鎼滅储鏉′欢--> - <div class="filter-container"> - <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> - </div> - <el-row style="margin-top: 15px"> - <el-col> - <!--鍒楄〃--> - <my-button name="鏂板" @click="addtable" site="form" /> - <div :style="{'overflow-y': 'auto', height:`${clientHeight - 320}px`}"> - <el-row class="card" - :gutter="5"> - <el-col v-for="(item, index) in proData" :key="index" class="cm-item"> - <el-card class="card-data"> - <div class="card-container"> - <div class="hed-one">鍑哄簱鍗曞彿锛歿{ item.order_no }}</div> - <div class="one-hed"> - <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鍑哄簱鏃堕棿锛�</span>{{ item.customer_name }}</div> - </div> - <div class="card-end"> - <div v-for="(just, index) in item.data" class="two-end"> - <div class="item"><span>{{ just.order_no }}锛�</span>{{ just.customer_name }}</div> - </div> - </div> + <el-card class="box-card" style="width: 100%" shadow="never"> + <!--鎼滅储鏉′欢--> + <div class="filter-container"> + <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> + </div> + <el-row style="margin-top: 15px"> + <el-col> + <!--鍒楄〃--> + <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading"> + <el-row class="card" :gutter="5"> + <el-col v-for="(item, index) in list" :key="index" class="cm-item"> + <el-card class="card-data"> + <div class="card-container"> + <div class="card-header"> + <div class="card-header-left"> + <span>璋冩嫧鍗曞彿锛�</span> + <span class="value">{{ item.businessFormCode }}</span> + <div class="states" :class="item.states == 1 ? '' : 'states-success'"> + {{ item.states == 1 ? '寰呰皟鎷�' : '宸茶皟鎷�' }} + </div> + </div> + <div class="card-header-right"> + <el-button site="form" type="success" size="mini" @click="handleExport(item)" + >瀵煎嚭璋冩嫧鍑哄簱鍗�</el-button + > + <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)" + >鏌ョ湅璇︽儏</el-button + > + </div> + </div> + <div class="one-hed"> + <div class="box"><span class="span-two">鎺ユ敹鏈烘瀯锛�</span>{{ item.agencyId }}</div> + <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.buyerName }}</div> + <div class="box"><span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.procureTime }}</div> + <div class="box"><span class="span-two">鎺ユ敹鏃堕棿锛�</span>{{ item.procureTime }}</div> + <div class="box"><span class="span-two">璋冩嫧鏈烘瀯锛�</span>{{ item.procureTime }}</div> + <div class="box"><span class="span-two">璋冩嫧浜猴細</span>{{ item.procureTime }}</div> + <div class="box"><span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.procureTime }}</div> + </div> + <div class="card-end"> + <div v-for="(just, index) in item.models" :key="index" class="item"> + <div class="name">{{ just.baseGoodsModelsId }}</div> + <div class="value-box"> + <div class="value-box-item"> + <span class="label">鏁伴噺锛�</span> + <span class="value">{{ just.counts }}</span> + <span class="unit">{{ just.unit }}</span> </div> - <div class="card-but"> - <my-button name="鏌ョ湅璇︽儏" site="form" /> - <my-button name="瀵煎嚭鍑哄簱鍗�" site="form" /> - </div> - </el-card> - </el-col> - </el-row> - </div> - <el-pagination - :small="false" - :current-page="1" - :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" - :page-size="10" - layout="total, sizes, prev, pager, next, jumper" - :total="0" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </el-col> - </el-row> - <!--娣诲姞/缂栬緫寮圭獥--> - <el-dialog title="鏂板鍑哄簱" :close-on-click-modal="false" :visible.sync="adddialog" width="60%" > - <el-form ref="ruleForm" :model="formData" class="demo-ruleForm" label-width="100px"> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="24"> - <el-form-item label="鍑哄簱鎵嬬画" prop="name"> - 浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢 - </el-form-item> - </el-col> - </el-row> - <div style="position: relative;"> - <div style="background-color: #F9F9F9;width: 90%;"> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-table :data="formData.tableData" height="100%" :stripe="true"> - <el-table-column prop="projectName" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column> - <el-table-column prop="time1" label="鍗曚綅" align="center"> </el-table-column> - <el-table-column prop="unit" label="鐜版湁搴撳瓨" align="center"> </el-table-column> - <el-table-column prop="time2" label="鍑哄簱鏁伴噺" align="center"> </el-table-column> - </el-table> - </div> - <div style="position: absolute;right: 0;top: 152px;"> - <my-button style="display: block;margin-left: 10px;margin-bottom: 5px;" name="绉婚櫎" site="form"/> - <my-button name="鏂板鐗╁搧" site="form"/> - </div> - </div> - </el-form> - <div slot="footer" align="center" class="dialog-footer"> - <my-button name="纭畾" site="form" /> - <my-button name="鍙栨秷" site="form" @click="adddialog = false"/> + </div> + </div> + </div> + </div> + </el-card> + </el-col> + </el-row> </div> - </el-dialog> - </el-card> - </el-container> + <el-pagination + :small="false" + :current-page="pageNum" + :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + </el-row> + </el-card> </el-container> + <!--娣诲姞/缂栬緫寮圭獥--> + <edit ref="editRef"></edit> + <detail ref="detailRef"></detail> <my-import :import-setting="importSetting" :dialog-show="importSetting.dialogShow" @@ -122,196 +83,86 @@ </template> <script> -import MyButton from "@/components/myButton/myButton"; +import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import myImport from '@/views/components/myImport'; +import edit from './edit'; +import detail from './detail'; +import { getBaseUrl } from '@/utils/base'; export default { - name: "index", - components: {MyButton, myImport}, + name: 'index', + components: { MyButton, myImport, edit, detail }, data() { return { - + loading: false, adddialog: false, - formData:{ - tableData:[ - { - projectName:'555' - }, - { - projectName:'444' - } - ], - }, + list: [], // 鎼滅储妗� items: [ { type: 'text', - dataIndex: 'name', - label: '鍑哄簱鍗曞彿', + dataIndex: 'businessFormCode', + label: '璋冩嫧鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'text', - dataIndex: 'name', + dataIndex: 'goodsTemplateName', label: '鐗╁搧鍚嶇О', placeholder: '鍙ā绯婃悳绱�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'select', + dataIndex: 'name', + label: '鏈烘瀯', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [], }, { type: 'text', - dataIndex: 'name', + dataIndex: 'buyerName', label: '鍒涘缓浜�', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'select', + dataIndex: 'states', + label: '鐘舵��', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [ + { + label: '鍏ㄩ儴', + value: '', + }, + { + label: '寰呰皟鎷�', + value: '1', + }, + { + label: '宸茶皟鎷�', + value: '2', + }, + ], }, { type: 'date-picker', dataIndex: 'val1', - label: '鍑哄簱鏃堕棿', - defaultValue: '' + label: '璋冩嫧鏃堕棿', + defaultValue: '', }, { type: 'date-picker', dataIndex: 'val2', label: '鑷�', - defaultValue: '' + defaultValue: '', }, - // { - // type: 'select', - // dataIndex: 'status', - // label: '鐘舵��', - // placeholder: '璇烽�夋嫨', - // defaultValue: '1', - // options: [ - // { - // label: '鍚敤', - // value: '1' - // }, - // { - // label: '绂佺敤', - // value: '0' - // } - // ] - // } - ], - proData: [ - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'666', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - } ], // 鏍戞暟鎹� treeDataList: [], @@ -320,25 +171,25 @@ tenantId: null, userName: null, userPhone: null, - status: 1 + states: null, }, // 瀵煎叆 importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null + dialogTitle: '瀵煎叆', + dialogShow: false, + fileSettings: { + data: {}, + uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃 + accept: '.xls', // 鏍煎紡 + type: 'text', // 鍥炴樉褰㈠紡 + loading: false, // 瀵煎叆鏁堟灉 + }, + /* 妯℃澘涓嬭浇 */ + templateSettings: { + templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О + templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃 + }, + onSuccess: null, }, editSetting: { title: '', @@ -346,104 +197,106 @@ orgId: '', show: false, }, - } + pageNum: 1, + pageSize: 10, + total: 0, + }; }, computed: { - clientHeight () { - return document.documentElement.clientHeight + clientHeight() { + return document.documentElement.clientHeight; }, }, created() { + this.fetchData(); }, methods: { - handleSizeChange(){}, - handleCurrentChange(){}, + fetchData() { + this.loading = true; + procureList({ + pageNum: this.pageNum, + pageSize: this.pageSize, + ...this.filterFrom, + }).then((res) => { + this.list = res.datas; + this.total = res.totalRows; + this.loading = false; + console.log(this.list); + }); + }, //瀵煎叆 importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() + this.importSetting.dialogShow = true; + this.importSetting.onSuccess = (response, callBack) => { + if (response.code === 1) { + this.$message.success(response.msg); + this.search(1); + } else { + this.$message.warning(response.msg); } + callBack(); + }; }, - + // 瀵煎嚭 + handleExport() {}, + // 鏂板 addtable() { - this.adddialog = true + this.$refs.editRef.open(); + }, + // 缂栬緫 + handleEdit(row) { + this.$refs.editRef.open(row.id); + }, + // 璇︽儏 + handleDetail(row) { + this.$refs.detailRef.open(row.id); + }, + // 璋冩嫧 + handleIncome(row) { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 璋冩嫧鍚�?`, '閲囪喘璋冩嫧') + .then(function () { + procureIncome({ id: row.id }).then((res) => { + this.$message.success('璋冩嫧鎴愬姛锛�'); + }); + }) + .then((res) => { + this.search(); + }) + .catch(() => {}); + }, + del(row) { + this.$modal + .confirm('鏄惁纭鍒犻櫎璋冩嫧鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�') + .then(function () { + procureDel({ id: row.id }).then((res) => {}); + }) + .then((res) => { + this.$message.success('鍒犻櫎鎴愬姛锛�'); + this.search(); + }) + .catch(() => {}); + }, + // 鍒嗛〉 + handleSizeChange(pageSize) { + this.pageSize = pageSize; + this.search({ pageNum: 1 }); + }, + handleCurrentChange(pageNum) { + this.myTable.paging.page.pageNum = pageNum; + this.search({ pageNum: pageNum }); }, // 鏌ヨtable鍒楄〃 search(pageNum) { - if (pageNum != undefined) { - // this.$refs.myTable.search(pageNum) - } else { - // this.$refs.myTable.search() - } + this.fetchData(); }, fifterForm(params) { - console.log(params,'555'); - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + this.search(1); + }, + }, +}; </script> -<style scoped> -.card { - display: flex; - flex-wrap: wrap; - margin: 0px !important; - .cm-item { - width: 100%; - } - .cm-item /deep/ .el-card__body { - padding: 10px; - } -} -.card-data{ - margin-top: 8px; - .card-container{ - display: inline-block; - width: 70%; - .hed-one{ - color: #2298EE; - font-size: 18px; - } - .one-hed{ - margin-top: 15px; - .box{ - display: inline-block; - margin-right: 20px; - } - } - .span-two{ - color: #83919e; - font-size: 14px; - } - .card-end{ - font-size: 14px; - color: #3d3d3d; - margin-top: 15px; - display: flex; - flex-wrap: wrap; - .two-end{ - width: calc(33.33% - 20px); - margin-bottom: 15px; - } - } - - } - .card-but{ - display: inline-block; - } - .end{ - display: inline-block; - } - -} - +<style scoped lang="scss"> +@import url(../../index.scss); </style> diff --git a/admin-web/src/views/stock/transfer/transferApplication/detail.vue b/admin-web/src/views/stock/transfer/transferApplication/detail.vue new file mode 100644 index 0000000..f126f45 --- /dev/null +++ b/admin-web/src/views/stock/transfer/transferApplication/detail.vue @@ -0,0 +1,128 @@ +<template> + <el-dialog + title="璇︽儏" + width="60%" + :modal="true" + :visible.sync="visible" + :top="'15vh'" + :close-on-click-modal="false" + :append-to-body="true" + :destroy-on-close="true" + @close="close" + class="stock-detail" + > + <el-row :gutter="20"> + <el-col :span="8"> + <span>璋冩嫧鍗曞彿锛�</span> + <span>{{ detail.businessFormCode }}</span> + </el-col> + <el-col :span="8"> + <span>璋冩嫧浠撳簱锛�</span> + <span>{{ detail.warehouseName }}</span> + </el-col> + <el-col :span="8"> + <span>鎵�灞炴満鏋勶細</span> + <span>{{ detail.agencyId }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col :span="8"> + <span>鐘舵�侊細</span> + <span>{{ detail.states == 1 ? '寰呰皟鎷�' : '宸茶皟鎷�' }}</span> + </el-col> + <el-col :span="8"> + <span>鍒涘缓浜猴細</span> + <span>{{ detail.buyerName }}</span> + </el-col> + <el-col :span="8"> + <span>璋冩嫧鏃堕棿锛�</span> + <span>{{ detail.incomeTime | formatTime }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col class="img-row" :span="24"> + <span>璋冩嫧鎵嬬画鐓х墖锛�</span> + <div class="img-box"></div> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex"> + <el-row :gutter="20"> + <el-col :span="8"> + <span>鐗╁搧鍒嗙被锛�</span> + <span>{{ goodsItem.baseCategoryId }}</span> + </el-col> + <el-col :span="8"> + <span>鐗╁搧鍚嶇О锛�</span> + <span>{{ goodsItem.goodsTemplateName }}</span> + </el-col> + <el-col :span="8"> + <span>渚涜揣鍟嗭細</span> + <span>{{ goodsItem.supplier }}</span> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px"> + <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ scope.row.baseGoodsModelsName }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center"> + <template slot-scope="scope"> + {{ scope.row.price }} + </template> + </el-table-column> + <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center"> + <template slot-scope="scope"> + {{ scope.row.counts }} + </template> + </el-table-column> + </el-table> + </div> + </el-dialog> +</template> +<script> +import { procureDetail } from '@/api/stock/procure/purchaseOrder'; +import * as DateFormatter from '@/utils/DateFormatter'; + +export default { + data() { + return { + visible: false, + detail: { + businessFormCode: '', + goodsTemplateName: '', + agencyId: '', + states: '', + createName: '', + time: '', + procureGoods: [{}, {}], + }, + }; + }, + filters:{ + formatTime(time) { + if(!time) return + return DateFormatter.LongToDateTime(time) + } + }, + methods: { + open(id) { + this.visible = true; + procureDetail({ id }).then((res) => { + this.detail = res; + }); + }, + close() { + this.visible = false; + }, + }, +}; +</script> +<style lang="scss" scoped> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/transfer/transferApplication/edit.vue b/admin-web/src/views/stock/transfer/transferApplication/edit.vue new file mode 100644 index 0000000..dcb0408 --- /dev/null +++ b/admin-web/src/views/stock/transfer/transferApplication/edit.vue @@ -0,0 +1,516 @@ +<template> + <win-md class="stock-edit" :title="`${setting.title}璋冩嫧璋冩嫧`" @close="close" :width="'800px'"> + <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> + <div class="main-w"> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="璋冩嫧浠撳簱" prop="warehouseId"> + <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璋冩嫧鏃堕棿" prop="procureTime"> + <el-date-picker + v-model="formData.procureTime" + type="datetime" + value="yyyy-MM-dd HH:mm:ss" + value-format="yyyyMMddHHmmss" + placeholder="璇烽�夋嫨鏃ユ湡" + style="width: 100%" + > + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="璋冩嫧鎵嬬画" prop="procureDoc"> + <upload :settings="uploadSettings" @on-change="uploadChange"></upload> + </el-form-item> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex"> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍒嗙被" + :prop="`procureGoods[${goodsIndex}].baseCategoryIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-cascader + v-model="goodsItem.baseCategoryIds" + :options="categoryOptions" + :props="{ value: 'id' }" + @change="categoryChange($event, goodsIndex)" + style="width: 100%" + ></el-cascader> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍚嶇О" + :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.baseGoodsTemplateId" + placeholder="璇峰厛鎷╃墿鍝佸垎绫�" + filterable + :disabled="!goodsItem.baseCategoryId" + style="width: 100%" + @change="goodsTemplateChange($event, goodsIndex)" + > + <el-option + v-for="item in goodsItem.goodsOptions" + :key="item.id" + :label="item.goodsName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="瑙勬牸鍨嬪彿" + :prop="`procureGoods[${goodsIndex}].modelsIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.modelsIds" + multiple + placeholder="璇峰厛鎷╃墿鍝佸悕绉�" + :disabled="!goodsItem.baseCategoryId" + @change="modelChange($event, goodsIndex)" + @remove-tag="modelRemoveTag($event, goodsIndex)" + style="width: 100%" + > + <el-option + v-for="item in goodsItem.modelsOptions" + :key="item.id" + :label="item.modelName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true"> + <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center"> + <template slot-scope="scope">{{ }} + {{ scope.row.worehouseCount }} + </template> + </el-table-column> + <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center"> + <template slot-scope="scope"> + <el-input + type="number" + v-model="scope.row.counts" + @change="countsChange($event, goodsIndex,scope.$index)" + ></el-input> + </template> + </el-table-column> + </el-table> + <div class="btn-group"> + <el-button + v-if="formData.procureGoods.length > 1" + name="绉婚櫎" + type="danger" + plain + size="mini" + @click="removeGoods(goodsIndex)" + >绉婚櫎</el-button + > + <el-button + v-if="formData.procureGoods.length - 1 == goodsIndex" + name="鏂板鐗╁搧" + type="primary" + plain + size="mini" + @click="addGoods" + >鏂板鐗╁搧</el-button + > + </div> + </div> + </div> + </el-form> + <div slot="footer" align="center" class="dialog-footer"> + <my-button name="鍙栨秷" site="form" @click="close" /> + <my-button name="淇濆瓨" site="form" @click="handleSubmit" /> + </div> + </win-md> +</template> +<script> +import { + goodsTemplate, + procureAdd, + procureEdit, + selectTenantWarehouse, + goodsModel, + procureDetail, +} from '@/api/stock/procure/purchaseOrder'; +import { getTree } from '@/api/foudation/classification'; +import MyButton from '@/components/myButton/myButton'; +import winMd from '@/components/win/win-md'; +import upload from '@/components/upload/index'; +import { getUploadUrl } from '@/utils/base'; + +import SettingIplatform from '../../../../../public/static/config'; + +export default { + components: { MyButton, winMd, upload }, + props: { + setting: { + type: Object, + default: () => {}, + }, + }, + data() { + return { + visible: false, + loading: false, + buyTypeOptions: [ + { + label: '闆嗛噰', + value: '1', + }, + { + label: '鑷噰', + value: '2', + }, + ], + warehouses: [], // 璋冩嫧浠撳簱鍒楄〃 + categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 + modelList: [], //鍨嬪彿鍒楄〃 + formData: { + warehouseId: '', // 璋冩嫧浠撳簱id + procureTime: '', // 璋冩嫧鏃堕棿 + buyType: '2', // 璋冩嫧鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛� + procureGoods: [], + }, + goodsItem: { + whFormProcureId: '', // 璋冩嫧鍗旾D + baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 + baseCategoryId: '', // 鍒嗙被缂栧彿 + baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿 + goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О + supplier: '', // 渚涘簲鍟� + sort: '', // 鏄剧ず椤哄簭 + goodsOptions: [], // 鐗╁搧鍒楄〃select + modelsOptions: [], //瑙勬牸鍨嬪彿select + models: [], // 鐗╁搧鍚嶇О + modelsIds: [], //瑙勬牸鍨嬪彿 + }, + modelsItem: { + baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿 + price: 0, // 鍗曚环(璋冩嫧闇�瑕侊紝璋冩嫧涓嶉渶瑕�) + worehouseCount: 0, + counts: 0, // 鎿嶄綔鏁伴噺 + supplier: '', // 渚涘簲鍟� + unit: null, //鍗曚綅 + }, + rules: { + warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + + // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], + baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + }, + + uploadSettings: { + title: '涓婁紶', + max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M + num: 2, // 鏀寔涓婁紶鍥剧墖涓暟 + accept: '.jpg,.png', // 闄愬埗鏍煎紡 + tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb` + uploadUrl: getUploadUrl(), // 涓婁紶璺緞 + multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶 + disabled: false, // 鏄惁绂佺敤 + type: 'text', // text/picture + }, + }; + }, + created() { + this.init(); + }, + methods: { + async init() { + this.getWarehouseList(); + this.getgoodsTemplate(); + this.getgoodsModel(); + // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 + const treeRes = await getTree(); + this.categoryOptions = this.removeEmptyChildren(treeRes); + if (this.setting.id) { + const detail = await procureDetail({ id: this.setting.id }); + this.formData = Object.assign(this.formData, detail); + this.$set(this.formData, 'buyType', this.formData.buyType.toString()); + this.formData.procureTime = this.formData.procureTime.toString(); + this.formData.procureGoods.map((item, index) => { + // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃 + let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId); + pIds = pIds.reverse(); + item.baseCategoryIds = [...pIds, item.baseCategoryId]; + this.$set( + this.formData.procureGoods[index], + 'modelsIds', + item.models.map((v) => v.baseGoodsModelsId), + ); + this.getgoodsTemplate(item.baseCategoryId, index); + this.getgoodsModel(item.baseGoodsTemplateId, index); + return item; + }); + } else { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + } + this.visible = true; + }, + + // 鑾峰彇璋冩嫧浠撳簱鍒楄〃 + getWarehouseList() { + selectTenantWarehouse() + .then((res) => { + this.warehouses = res; + if (this.warehouses.length && !this.formData.warehouseId) { + // 榛樿閫変腑绗竴涓粨搴� + this.formData.warehouseId = this.warehouses[0].id; + } + }) + .catch((err) => { + console.log('err', err); + }); + }, + + removeEmptyChildren(arr) { + arr.forEach((item) => { + if (!item.children || !item.children.length) { + delete item.children; + } else { + this.removeEmptyChildren(item.children); + } + }); + return arr; + }, + + // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 + getgoodsTemplate(id, index) { + goodsTemplate({ categoryId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'goodsOptions', res); + } else { + this.goodsTemplatelAll = res; + } + }); + }, + + // 瑙勬牸鍨嬪彿 + getgoodsModel(id, index) { + goodsModel({ goodsTemplatesId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'modelsOptions', res); + } else { + this.goodsModelAll = res; + } + }); + }, + + // 鏍规嵁鐗╁搧鍚嶇Оid鑾峰彇鍚嶅瓧 + getGoodsTemplateName(id) { + let item = this.goodsTemplatelAll.find((v) => v.id == id); + if (item) { + return item.goodsName; + } + return; + }, + + // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧 + getGoodsModelsName(id) { + let item = this.goodsModelAll.find((v) => v.id == id); + if (item) { + return item.modelName; + } + return; + }, + + // 鐗╁搧鍒嗙被閫夋嫨 + categoryChange(e, index) { + this.formData.procureGoods[index].goodsOptions = []; + this.formData.procureGoods[index].baseGoodsTemplateId = ''; + this.formData.procureGoods[index].goodsTemplateName = ''; + this.formData.procureGoods[index].modelsOptions = []; + this.formData.procureGoods[index].modelsIds = []; + this.formData.procureGoods[index].models = []; + + this.formData.procureGoods[index].baseCategoryId = e[e.length - 1]; + // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 + this.getgoodsTemplate(e[e.length - 1], index); + }, + + // 鐗╁搧鍚嶇О鍒楄〃 + goodsTemplateChange(e, index) { + this.formData.procureGoods[index].modelsOptions = []; + this.formData.procureGoods[index].modelsIds = []; + this.formData.procureGoods[index].models = []; + + this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e); + // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 + this.getgoodsModel(e, index); + }, + + // 瑙勬牸鍨嬪彿閫夋嫨 + modelChange(e, index) { + let arr = [...this.formData.procureGoods[index].models]; + let str = JSON.stringify(arr); + e.forEach((item) => { + if (str.indexOf(item) == -1) { + let temp = this.goodsModelAll.find((v) => v.id == item); + arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit }); + } + }); + this.formData.procureGoods[index].models = arr; + }, + + // 瑙勬牸鍨嬪彿绉婚櫎 + modelRemoveTag(e, index) { + let arr = this.formData.procureGoods[index].models; + let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e); + this.formData.procureGoods[index].models.splice(delIndex, 1); + }, + + // 涓婁紶 + uploadChange(e) { + console.log('uploadChange', e); + }, + + // 鐐瑰嚮鏂板鐗╁搧 + addGoods() { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + }, + + // 鐐瑰嚮绉婚櫎 + removeGoods(index) { + this.formData.procureGoods.splice(index, 1); + }, + + // 璋冩嫧鏁伴噺鏍¢獙 + countsChange(e, goodsIndex,index) { + const curItem = this.formData.procureGoods[goodsIndex].models[index] + const worehouseCount = curItem.worehouseCount + if (e > worehouseCount) { + this.$message.warning('鏁伴瓒呰繃鐜版湁搴撳瓨'); + curItem.counts = worehouseCount + } + }, + + // 鎻愪氦 + handleSubmit() { + this.$refs['ruleForm'].validate((valid) => { + if (valid) { + console.log('this.formData', this.formData); + if (this.setting.id) { + procureAdd(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('create err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } else { + procureEdit(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('edit err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } + } else { + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); + } + }); + }, + + close() { + this.formData = { + warehouseId: '', // 璋冩嫧浠撳簱id + procureTime: '', // 璋冩嫧鏃堕棿 + procureGoods: [], + }; + this.$emit('close'); + }, + + // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁� + findParentIds(dataSource, nodeId) { + const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + + // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣 + function traverse(node, nodeId) { + if (node.id === nodeId) { + // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣 + return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + } + + if (node.children) { + // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐� + for (const childNode of node.children) { + if (traverse(childNode, nodeId)) { + // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + parentIds.push(node.id); + return true; + } + } + } + + return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse + } + + // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣 + for (const node of dataSource) { + if (traverse(node, nodeId)) { + // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜� + break; + } + } + + return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + }, + }, +}; +</script> +<style scoped lang="scss"> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/transfer/transferApplication/index.vue b/admin-web/src/views/stock/transfer/transferApplication/index.vue index 77df32b..fe44d28 100644 --- a/admin-web/src/views/stock/transfer/transferApplication/index.vue +++ b/admin-web/src/views/stock/transfer/transferApplication/index.vue @@ -1,125 +1,77 @@ <template> - <div class="app-container"> + <div class="app-container stock-container"> <el-container> - <el-container> - <el-card class="box-card" style="width: 100%" shadow="never"> - <!--鎼滅储鏉′欢--> - <div class="filter-container"> - <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> - </div> - <el-row style="margin-top: 15px"> - <el-col> - <!--鍒楄〃--> - <my-button name="鏂板" @click="addtable" site="form" /> - <div :style="{'overflow-y': 'auto', height:`${clientHeight - 320}px`}"> - <el-row class="card" - :gutter="5"> - <el-col v-for="(item, index) in proData" :key="index" class="cm-item"> - <el-card class="card-data"> - <div class="card-container"> - <div class="hed-one"> <span>璋冩嫧鍗曞彿锛歿{ item.order_no }}</span><span style="margin-left: 20px;"><el-button type="warning" plain size="mini">寰呮帴鏀�</el-button></span></div> - <div class="one-hed"> - <div class="box"><span class="span-two">鎺ュ彈鏈烘瀯锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎺ユ敹鏃堕棿锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎺ュ彈浜猴細</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎺ュ彈鏃堕棿锛�</span>{{ item.customer_name }}</div> - </div> - <div class="card-end"> - <div v-for="(just, index) in item.data" class="two-end"> - <div class="item"><span>{{ just.order_no }}锛�</span>{{ just.customer_name }}</div> - </div> - </div> - </div> - <div class="card-but"> - <div style="margin-top: 10px;"> - <my-button style="width: 120px;" name="鍒犻櫎" site="form" /> - <my-button style="width: 120px;" name="鏌ョ湅璇︽儏" site="form" /> - </div> - </div> - - </el-card> - </el-col> - </el-row> - </div> - <el-pagination - :small="false" - :current-page="1" - :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" - :page-size="10" - layout="total, sizes, prev, pager, next, jumper" - :total="0" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </el-col> - </el-row> - <!--娣诲姞/缂栬緫寮圭獥--> - <el-dialog title="鏂板鍑哄簱" :close-on-click-modal="false" :visible.sync="adddialog" width="60%" > - <el-form ref="ruleForm" :model="formData" class="demo-ruleForm" label-width="100px"> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="24"> - <el-form-item label="鍑哄簱鎵嬬画" prop="name"> - 浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢 - </el-form-item> - </el-col> - </el-row> - <div style="position: relative;"> - <div style="background-color: #F9F9F9;width: 90%;"> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-table :data="formData.tableData" height="100%" :stripe="true"> - <el-table-column prop="projectName" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column> - <el-table-column prop="time1" label="鍗曚綅" align="center"> </el-table-column> - <el-table-column prop="unit" label="鐜版湁搴撳瓨" align="center"> </el-table-column> - <el-table-column prop="time2" label="鍑哄簱鏁伴噺" align="center"> </el-table-column> - </el-table> - </div> - <div style="position: absolute;right: 0;top: 152px;"> - <my-button style="display: block;margin-left: 10px;margin-bottom: 5px;" name="绉婚櫎" site="form"/> - <my-button name="鏂板鐗╁搧" site="form"/> - </div> - </div> - </el-form> - <div slot="footer" align="center" class="dialog-footer"> - <my-button name="纭畾" site="form" /> - <my-button name="鍙栨秷" site="form" @click="adddialog = false"/> + <el-card class="box-card" style="width: 100%" shadow="never"> + <!--鎼滅储鏉′欢--> + <div class="filter-container"> + <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> + </div> + <el-row style="margin-top: 15px"> + <el-col> + <!--鍒楄〃--> + <div class="table-tool-bar" style="margin-bottom: 15px;"> + <my-button name="鏂板" @click="handleAdd" site="tools" size="medium" /> </div> - </el-dialog> - </el-card> - </el-container> + <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading"> + <el-row class="card" :gutter="5"> + <el-col v-for="(item, index) in list" :key="index" class="cm-item"> + <el-card class="card-data"> + <div class="card-container"> + <div class="card-header"> + <div class="card-header-left"> + <span>璋冩嫧鍗曞彿锛�</span> + <span class="value">{{ item.businessFormCode }}</span> + </div> + <div class="card-header-right"> + <el-button site="form" type="success" size="mini" @click="handleExport(item)" + >瀵煎嚭璋冩嫧鍗�</el-button + > + <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)" + >鏌ョ湅璇︽儏</el-button + > + </div> + </div> + <div class="one-hed"> + <div class="box"><span class="span-two">鏈烘瀯锛�</span>{{ item.agencyId }}</div> + <div class="box"><span class="span-two">鎿嶄綔浜猴細</span>{{ item.buyerName }}</div> + <div class="box"> + <span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + </div> + </div> + <div class="card-end"> + <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item"> + <div class="name">{{ just.goodsTemplateName }}</div> + <div class="value-box"> + <div class="value-box-item"> + <span class="label">鏁伴噺锛�</span> + <span class="value">{{ just.count }}</span> + <span class="unit">{{ just.unit }}</span> + </div> + </div> + </div> + </div> + </div> + </el-card> + </el-col> + </el-row> + </div> + <el-pagination + :small="false" + :current-page="pageNum" + :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + </el-row> + </el-card> </el-container> + <!--娣诲姞/缂栬緫寮圭獥--> + <edit v-if="editSetting.show" :setting="editSetting" ref="editRef" @close="editSetting.show=false" @search="refreshData"></edit> + <detail ref="detailRef"></detail> <my-import :import-setting="importSetting" :dialog-show="importSetting.dialogShow" @@ -129,196 +81,100 @@ </template> <script> -import MyButton from "@/components/myButton/myButton"; +import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import myImport from '@/views/components/myImport'; +import edit from './edit'; +import detail from './detail'; +import { getBaseUrl } from '@/utils/base'; +import * as DateFormatter from '@/utils/DateFormatter'; export default { - name: "index", - components: {MyButton, myImport}, + name: 'index', + components: { MyButton, myImport, edit, detail }, data() { return { - + loading: false, adddialog: false, - formData:{ - tableData:[ - { - projectName:'555' - }, - { - projectName:'444' - } - ], - }, + list: [], // 鎼滅储妗� items: [ { type: 'text', - dataIndex: 'name', - label: '鍑哄簱鍗曞彿', + dataIndex: 'businessFormCode', + label: '璋冩嫧鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'text', - dataIndex: 'name', + dataIndex: 'goodsTemplateName', label: '鐗╁搧鍚嶇О', placeholder: '鍙ā绯婃悳绱�', - defaultValue: '' + defaultValue: '', }, { - type: 'text', + type: 'select', dataIndex: 'name', - label: '鍒涘缓浜�', - placeholder: '璇疯緭鍏�', - defaultValue: '' + label: '璋冩嫧鏈烘瀯', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [], + }, + { + type: 'select', + dataIndex: 'name', + label: '鎺ユ敹鏈烘瀯', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [], + }, + { + type: 'select', + dataIndex: 'states', + label: '鐘舵��', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [ + { + label: '鍏ㄩ儴', + value: '', + }, + { + label: '寰呰皟鎷�', + value: '1', + }, + { + label: '宸茶皟鎷�', + value: '2', + }, + ], }, { type: 'date-picker', dataIndex: 'val1', - label: '鍑哄簱鏃堕棿', - defaultValue: '' + label: '鐢宠鏃堕棿', + defaultValue: '', }, { type: 'date-picker', dataIndex: 'val2', label: '鑷�', - defaultValue: '' - }, - // { - // type: 'select', - // dataIndex: 'status', - // label: '鐘舵��', - // placeholder: '璇烽�夋嫨', - // defaultValue: '1', - // options: [ - // { - // label: '鍚敤', - // value: '1' - // }, - // { - // label: '绂佺敤', - // value: '0' - // } - // ] - // } - ], - proData: [ - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] + defaultValue: '', }, { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃' - }, - ] + type: 'date-picker', + dataIndex: 'val1', + label: '鎺ユ敹鏃堕棿', + defaultValue: '', }, { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] + type: 'date-picker', + dataIndex: 'val2', + label: '鑷�', + defaultValue: '', }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - } ], // 鏍戞暟鎹� treeDataList: [], @@ -327,25 +183,25 @@ tenantId: null, userName: null, userPhone: null, - status: 1 + states: null, }, // 瀵煎叆 importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null + dialogTitle: '瀵煎叆', + dialogShow: false, + fileSettings: { + data: {}, + uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃 + accept: '.xls', // 鏍煎紡 + type: 'text', // 鍥炴樉褰㈠紡 + loading: false, // 瀵煎叆鏁堟灉 + }, + /* 妯℃澘涓嬭浇 */ + templateSettings: { + templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О + templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃 + }, + onSuccess: null, }, editSetting: { title: '', @@ -353,105 +209,121 @@ orgId: '', show: false, }, - } + pageNum: 1, + pageSize: 10, + total: 0, + }; }, computed: { - clientHeight () { - return document.documentElement.clientHeight + clientHeight() { + return document.documentElement.clientHeight; + }, + }, + filters: { + formatTime(time) { + if (!time) return; + return DateFormatter.LongToDateTime(time); }, }, created() { + this.fetchData(); }, methods: { - handleSizeChange(){}, - handleCurrentChange(){}, + fetchData() { + this.loading = true; + procureList({ + pageNum: this.pageNum, + pageSize: this.pageSize, + ...this.filterFrom, + }).then((res) => { + this.list = res.datas; + this.total = res.totalRows; + this.loading = false; + console.log(this.list); + }); + }, //瀵煎叆 importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() + this.importSetting.dialogShow = true; + this.importSetting.onSuccess = (response, callBack) => { + if (response.code === 1) { + this.$message.success(response.msg); + this.search(1); + } else { + this.$message.warning(response.msg); } + callBack(); + }; }, - - addtable() { - this.adddialog = true + // 瀵煎嚭 + handleExport() {}, + // 鏂板 + handleAdd() { + this.editSetting.id = null; + this.editSetting.info = null; + this.editSetting.title = '鏂板'; + this.editSetting.show = true; + }, + // 缂栬緫 + handleEdit(row) { + this.editSetting.id = row.id; + this.editSetting.info = null; + this.editSetting.title = '缂栬緫'; + this.editSetting.show = true; + }, + // 璇︽儏 + handleDetail(row) { + this.$refs.detailRef.open(row.id); + }, + // 璋冩嫧 + handleIncome(row) { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 璋冩嫧鍚�?`, '璋冩嫧璋冩嫧') + .then(function () { + procureIncome({ id: row.id }).then((res) => { + this.$message.success('璋冩嫧鎴愬姛锛�'); + this.search(); + }); + }) + .catch(() => {}); + }, + del(row) { + this.$modal + .confirm('鏄惁纭鍒犻櫎璋冩嫧鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�') + .then(function () { + procureDel({ id: row.id }).then((res) => {}); + }) + .then((res) => { + this.$message.success('鍒犻櫎鎴愬姛锛�'); + this.search(); + }) + .catch(() => {}); + }, + // 鍒嗛〉 + handleSizeChange(pageSize) { + this.pageSize = pageSize; + this.search({ pageNum: 1 }); + }, + handleCurrentChange(pageNum) { + this.myTable.paging.page.pageNum = pageNum; + this.search({ pageNum: pageNum }); }, // 鏌ヨtable鍒楄〃 search(pageNum) { - if (pageNum != undefined) { - // this.$refs.myTable.search(pageNum) - } else { - // this.$refs.myTable.search() - } + this.fetchData(); + }, + refreshData() { + this.pageNum = 1; + this.pageSize = 10; + this.search(); }, fifterForm(params) { - console.log(params,'555'); - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + this.search(1); + }, + }, +}; </script> -<style scoped> -.card { - display: flex; - flex-wrap: wrap; - margin: 0px !important; - .cm-item { - width: 100%; - } - .cm-item /deep/ .el-card__body { - padding: 10px; - } -} -.card-data{ - position: relative; - margin-top: 8px; - .card-container{ - display: inline-block; - width: 70%; - .hed-one{ - color: #2298EE; - font-size: 18px; - } - .one-hed{ - margin-top: 5px; - .box{ - display: inline-block; - margin-right: 20px; - margin-top: 10px; - } - } - .span-two{ - color: #83919e; - font-size: 14px; - } - .card-end{ - font-size: 14px; - color: #3d3d3d; - margin-top: 15px; - display: flex; - flex-wrap: wrap; - .two-end{ - width: calc(33.33% - 20px); - margin-bottom: 15px; - } - } - - } - .card-but{ - position: absolute; - right: 20px; - top: 40%; - } - -} - +<style scoped lang="scss"> +@import url(../../index.scss); </style> diff --git a/admin-web/src/views/stock/transfer/transferissue/detail.vue b/admin-web/src/views/stock/transfer/transferissue/detail.vue new file mode 100644 index 0000000..f126f45 --- /dev/null +++ b/admin-web/src/views/stock/transfer/transferissue/detail.vue @@ -0,0 +1,128 @@ +<template> + <el-dialog + title="璇︽儏" + width="60%" + :modal="true" + :visible.sync="visible" + :top="'15vh'" + :close-on-click-modal="false" + :append-to-body="true" + :destroy-on-close="true" + @close="close" + class="stock-detail" + > + <el-row :gutter="20"> + <el-col :span="8"> + <span>璋冩嫧鍗曞彿锛�</span> + <span>{{ detail.businessFormCode }}</span> + </el-col> + <el-col :span="8"> + <span>璋冩嫧浠撳簱锛�</span> + <span>{{ detail.warehouseName }}</span> + </el-col> + <el-col :span="8"> + <span>鎵�灞炴満鏋勶細</span> + <span>{{ detail.agencyId }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col :span="8"> + <span>鐘舵�侊細</span> + <span>{{ detail.states == 1 ? '寰呰皟鎷�' : '宸茶皟鎷�' }}</span> + </el-col> + <el-col :span="8"> + <span>鍒涘缓浜猴細</span> + <span>{{ detail.buyerName }}</span> + </el-col> + <el-col :span="8"> + <span>璋冩嫧鏃堕棿锛�</span> + <span>{{ detail.incomeTime | formatTime }}</span> + </el-col> + </el-row> + <el-row :gutter="20" style="margin-top: 20px"> + <el-col class="img-row" :span="24"> + <span>璋冩嫧鎵嬬画鐓х墖锛�</span> + <div class="img-box"></div> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex"> + <el-row :gutter="20"> + <el-col :span="8"> + <span>鐗╁搧鍒嗙被锛�</span> + <span>{{ goodsItem.baseCategoryId }}</span> + </el-col> + <el-col :span="8"> + <span>鐗╁搧鍚嶇О锛�</span> + <span>{{ goodsItem.goodsTemplateName }}</span> + </el-col> + <el-col :span="8"> + <span>渚涜揣鍟嗭細</span> + <span>{{ goodsItem.supplier }}</span> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px"> + <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ scope.row.baseGoodsModelsName }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鐜版湁搴撳瓨" align="center"> + <template slot-scope="scope"> + {{ scope.row.price }} + </template> + </el-table-column> + <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center"> + <template slot-scope="scope"> + {{ scope.row.counts }} + </template> + </el-table-column> + </el-table> + </div> + </el-dialog> +</template> +<script> +import { procureDetail } from '@/api/stock/procure/purchaseOrder'; +import * as DateFormatter from '@/utils/DateFormatter'; + +export default { + data() { + return { + visible: false, + detail: { + businessFormCode: '', + goodsTemplateName: '', + agencyId: '', + states: '', + createName: '', + time: '', + procureGoods: [{}, {}], + }, + }; + }, + filters:{ + formatTime(time) { + if(!time) return + return DateFormatter.LongToDateTime(time) + } + }, + methods: { + open(id) { + this.visible = true; + procureDetail({ id }).then((res) => { + this.detail = res; + }); + }, + close() { + this.visible = false; + }, + }, +}; +</script> +<style lang="scss" scoped> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/transfer/transferissue/edit.vue b/admin-web/src/views/stock/transfer/transferissue/edit.vue new file mode 100644 index 0000000..40ccc04 --- /dev/null +++ b/admin-web/src/views/stock/transfer/transferissue/edit.vue @@ -0,0 +1,495 @@ +<template> + <win-md class="stock-edit" :title="`${setting.title}璋冩嫧璋冩嫧`" @close="close" :width="'800px'"> + <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> + <div class="main-w"> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="璋冩嫧浠撳簱" prop="warehouseId"> + <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in warehouses" :key="item.id" :label="item.warehouseName" :value="item.id" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="璋冩嫧鏃堕棿" prop="procureTime"> + <el-date-picker + v-model="formData.procureTime" + type="datetime" + value="yyyy-MM-dd HH:mm:ss" + value-format="yyyyMMddHHmmss" + placeholder="璇烽�夋嫨鏃ユ湡" + style="width: 100%" + > + </el-date-picker> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24" class="headerHeight"> + <el-col :span="12"> + <el-form-item label="璋冩嫧鎵嬬画" prop="procureDoc"> + <upload :settings="uploadSettings" @on-change="uploadChange"></upload> + </el-form-item> + </el-col> + </el-row> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex"> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍒嗙被" + :prop="`procureGoods[${goodsIndex}].baseCategoryIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-cascader + v-model="goodsItem.baseCategoryIds" + :options="categoryOptions" + :props="{ value: 'id' }" + @change="categoryChange($event, goodsIndex)" + style="width: 100%" + ></el-cascader> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item + label="鐗╁搧鍚嶇О" + :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.baseGoodsTemplateId" + placeholder="璇峰厛鎷╃墿鍝佸垎绫�" + filterable + :disabled="!goodsItem.baseCategoryId" + style="width: 100%" + @change="goodsTemplateChange($event, goodsIndex)" + > + <el-option + v-for="item in goodsItem.goodsOptions" + :key="item.id" + :label="item.goodsName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="24"> + <el-col :span="12"> + <el-form-item + label="瑙勬牸鍨嬪彿" + :prop="`procureGoods[${goodsIndex}].modelsIds`" + :rules="{ + required: true, + message: '璇烽�夋嫨', + trigger: 'change', + }" + > + <el-select + v-model="goodsItem.modelsIds" + multiple + placeholder="璇峰厛鎷╃墿鍝佸悕绉�" + :disabled="!goodsItem.baseCategoryId" + @change="modelChange($event, goodsIndex)" + @remove-tag="modelRemoveTag($event, goodsIndex)" + style="width: 100%" + > + <el-option + v-for="item in goodsItem.modelsOptions" + :key="item.id" + :label="item.modelName" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-table :data="goodsItem.models" :stripe="true"> + <el-table-column prop="baseGoodsModelsId" label="瑙勬牸鍨嬪彿" align="center"> + <template slot-scope="scope"> + {{ getGoodsModelsName(scope.row.baseGoodsModelsId) }} + </template> + </el-table-column> + <el-table-column label="鍗曚綅" align="center"> + <template slot-scope="scope"> + {{ scope.row.unit }} + </template> + </el-table-column> + <el-table-column prop="price" label="鍗曚环锛堝厓锛�" align="center"> + <template slot-scope="scope"> + <el-input type="number" v-model="scope.row.price"></el-input> + </template> + </el-table-column> + <el-table-column prop="counts" label="璋冩嫧鏁伴噺" align="center"> + <template slot-scope="scope"> + <el-input type="number" v-model="scope.row.counts"></el-input> + </template> + </el-table-column> + </el-table> + <div class="btn-group"> + <el-button + v-if="formData.procureGoods.length > 1" + name="绉婚櫎" + type="danger" + plain + size="mini" + @click="removeGoods(goodsIndex)" + >绉婚櫎</el-button + > + <el-button + v-if="formData.procureGoods.length - 1 == goodsIndex" + name="鏂板鐗╁搧" + type="primary" + plain + size="mini" + @click="addGoods" + >鏂板鐗╁搧</el-button + > + </div> + </div> + </div> + </el-form> + <div slot="footer" align="center" class="dialog-footer"> + <my-button name="鍙栨秷" site="form" @click="close"/> + <my-button name="淇濆瓨" site="form" @click="handleSubmit"/> + </div> + </win-md> +</template> +<script> +import { + goodsTemplate, + procureAdd, + procureEdit, + selectTenantWarehouse, + goodsModel, + procureDetail, +} from '@/api/stock/procure/purchaseOrder'; +import { getTree } from '@/api/foudation/classification'; +import MyButton from '@/components/myButton/myButton'; +import winMd from '@/components/win/win-md'; +import upload from '@/components/upload/index'; +import { getUploadUrl } from '@/utils/base'; + +import SettingIplatform from '../../../../../public/static/config'; + +export default { + components: { MyButton, winMd, upload }, + props: { + setting: { + type: Object, + default: () => { + } + } + }, + data() { + return { + visible: false, + loading: false, + buyTypeOptions:[{ + label:'闆嗛噰', + value: '1' + },{ + label:'鑷噰', + value: '2' + }], + warehouses: [], // 璋冩嫧浠撳簱鍒楄〃 + categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 + modelList: [], //鍨嬪彿鍒楄〃 + formData: { + warehouseId: '', // 璋冩嫧浠撳簱id + procureTime: '', // 璋冩嫧鏃堕棿 + buyType: '2', // 璋冩嫧鏂瑰紡锛�1锛氶泦閲囷紱2=鑷噰锛� + procureGoods: [], + }, + goodsItem: { + whFormProcureId: '', // 璋冩嫧鍗旾D + baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 + baseCategoryId: '', // 鍒嗙被缂栧彿 + baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿 + goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О + supplier: '', // 渚涘簲鍟� + sort: '', // 鏄剧ず椤哄簭 + goodsOptions: [], // 鐗╁搧鍒楄〃select + modelsOptions: [], //瑙勬牸鍨嬪彿select + models: [], // 鐗╁搧鍚嶇О + modelsIds: [], //瑙勬牸鍨嬪彿 + }, + modelsItem: { + baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿 + price: 0, // 鍗曚环(璋冩嫧闇�瑕侊紝璋冩嫧涓嶉渶瑕�) + counts: 0, // 鎿嶄綔鏁伴噺 + supplier: '', // 渚涘簲鍟� + unit: null, //鍗曚綅 + }, + rules: { + warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + + // procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], + baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + baseGoodsTemplateId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + }, + + uploadSettings: { + title: '涓婁紶', + max: 20, // 鏈�澶уぇ灏忥紝鍗曚綅M + num: 2, // 鏀寔涓婁紶鍥剧墖涓暟 + accept: '.jpg,.png', // 闄愬埗鏍煎紡 + tip: '', // 鎻愮ず 榛樿锛歚鍙兘涓婁紶${this.defaultSettings.num}涓�${this.defaultSettings.accept}鏂囦欢锛屼笖涓嶈秴杩�${this.defaultSettings.max}kb` + uploadUrl: getUploadUrl(), // 涓婁紶璺緞 + multiple: true, // 鏄惁鏀寔鎵归噺涓婁紶 + disabled: false, // 鏄惁绂佺敤 + type: 'text', // text/picture + }, + }; + }, + created() { + this.init() + }, + methods: { + async init() { + this.getWarehouseList(); + this.getgoodsTemplate() + this.getgoodsModel(); + // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 + const treeRes = await getTree(); + this.categoryOptions = this.removeEmptyChildren(treeRes); + if (this.setting.id) { + const detail = await procureDetail({ id:this.setting.id }); + this.formData = Object.assign(this.formData, detail); + this.$set(this.formData,'buyType',this.formData.buyType.toString()) + this.formData.procureTime = this.formData.procureTime.toString(); + this.formData.procureGoods.map((item, index) => { + // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃 + let pIds = this.findParentIds(this.categoryOptions, item.baseCategoryId); + pIds = pIds.reverse(); + item.baseCategoryIds = [...pIds, item.baseCategoryId]; + this.$set(this.formData.procureGoods[index],'modelsIds',item.models.map((v) => v.baseGoodsModelsId)) + this.getgoodsTemplate(item.baseCategoryId, index); + this.getgoodsModel(item.baseGoodsTemplateId, index); + return item + }); + } else { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + } + this.visible = true; + }, + + // 鑾峰彇璋冩嫧浠撳簱鍒楄〃 + getWarehouseList() { + selectTenantWarehouse() + .then((res) => { + this.warehouses = res; + if (this.warehouses.length && !this.formData.warehouseId) { + // 榛樿閫変腑绗竴涓粨搴� + this.formData.warehouseId = this.warehouses[0].id; + } + }) + .catch((err) => { + console.log('err', err); + }); + }, + + removeEmptyChildren(arr) { + arr.forEach((item) => { + if (!item.children || !item.children.length) { + delete item.children; + } else { + this.removeEmptyChildren(item.children); + } + }); + return arr; + }, + + // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 + getgoodsTemplate(id, index) { + goodsTemplate({ categoryId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'goodsOptions', res); + }else { + this.goodsTemplatelAll = res; + } + }); + }, + + // 瑙勬牸鍨嬪彿 + getgoodsModel(id, index) { + goodsModel({ goodsTemplatesId: id || '' }).then((res) => { + if (index || index == 0) { + this.$set(this.formData.procureGoods[index], 'modelsOptions', res); + } else { + this.goodsModelAll = res; + } + }); + }, + + // 鏍规嵁鐗╁搧鍚嶇Оid鑾峰彇鍚嶅瓧 + getGoodsTemplateName(id) { + let item = this.goodsTemplatelAll.find((v) => v.id == id); + if (item) { + return item.goodsName; + } + return; + }, + + // 鏍规嵁瑙勬牸鍨嬪彿id鑾峰彇鍚嶅瓧 + getGoodsModelsName(id) { + let item = this.goodsModelAll.find((v) => v.id == id); + if (item) { + return item.modelName; + } + return; + }, + + // 鐗╁搧鍒嗙被閫夋嫨 + categoryChange(e, index) { + this.formData.procureGoods[index].goodsOptions = [] + this.formData.procureGoods[index].baseGoodsTemplateId = '' + this.formData.procureGoods[index].goodsTemplateName = '' + this.formData.procureGoods[index].modelsOptions = [] + this.formData.procureGoods[index].modelsIds = [] + this.formData.procureGoods[index].models = [] + + this.formData.procureGoods[index].baseCategoryId = e[e.length - 1]; + // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 + this.getgoodsTemplate(e[e.length - 1], index); + }, + + // 鐗╁搧鍚嶇О鍒楄〃 + goodsTemplateChange(e, index) { + this.formData.procureGoods[index].modelsOptions = [] + this.formData.procureGoods[index].modelsIds = [] + this.formData.procureGoods[index].models = [] + + this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e) + // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 + this.getgoodsModel(e, index); + }, + + // 瑙勬牸鍨嬪彿閫夋嫨 + modelChange(e, index) { + let arr = [...this.formData.procureGoods[index].models]; + let str = JSON.stringify(arr); + e.forEach((item) => { + if (str.indexOf(item) == -1) { + let temp = this.goodsModelAll.find((v) => v.id == item); + arr.push({ ...this.modelsItem, baseGoodsModelsId: item, unit: temp.unit }); + } + }); + this.formData.procureGoods[index].models = arr; + }, + + // 瑙勬牸鍨嬪彿绉婚櫎 + modelRemoveTag(e, index) { + let arr = this.formData.procureGoods[index].models; + let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e); + this.formData.procureGoods[index].models.splice(delIndex, 1); + }, + + // 涓婁紶 + uploadChange(e) { + console.log('uploadChange', e); + }, + + // 鐐瑰嚮鏂板鐗╁搧 + addGoods() { + this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + }, + + // 鐐瑰嚮绉婚櫎 + removeGoods(index) { + this.formData.procureGoods.splice(index, 1); + }, + + // 鎻愪氦 + handleSubmit() { + this.$refs['ruleForm'].validate((valid) => { + if (valid) { + console.log('this.formData', this.formData); + if (this.setting.id) { + procureAdd(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('create err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } else { + procureEdit(this.formData) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('edit err', err); + this.$message.error('淇濆瓨澶辫触'); + }); + } + } else { + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); + } + }); + }, + + close() { + this.formData ={ + warehouseId: '', // 璋冩嫧浠撳簱id + procureTime: '', // 璋冩嫧鏃堕棿 + procureGoods: [], + } + this.$emit('close') + }, + + // 閫氳繃瀛愰泦id鏌ュ埌鎵�浠ョ浉鍏崇埗绾d骞惰繑鍥炴暟缁� + findParentIds(dataSource, nodeId) { + const parentIds = []; // 鐢ㄤ簬瀛樺偍鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + + // 瀹氫箟涓�涓�掑綊鍑芥暟锛岀敤浜庨亶鍘嗘暣妫垫爲骞舵煡鎵惧瓙鑺傜偣鐨勬墍鏈夌埗鑺傜偣 + function traverse(node, nodeId) { + if (node.id === nodeId) { + // 濡傛灉褰撳墠鑺傜偣鐨処D绛変簬瀛愯妭鐐圭殑ID锛屽垯琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣锛屽彲浠ュ紑濮嬪悜涓婃煡鎵剧埗鑺傜偣 + return true; // 杩斿洖true琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + } + + if (node.children) { + // 濡傛灉褰撳墠鑺傜偣鏈夊瓙鑺傜偣锛屽垯缁х画閬嶅巻瀛愯妭鐐� + for (const childNode of node.children) { + if (traverse(childNode, nodeId)) { + // 濡傛灉鍦ㄥ瓙鑺傜偣涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欏皢褰撳墠鑺傜偣鐨処D娣诲姞鍒扮埗鑺傜偣ID鏁扮粍涓紝骞惰繑鍥瀟rue琛ㄧず宸茬粡鎵惧埌浜嗗瓙鑺傜偣 + parentIds.push(node.id); + return true; + } + } + } + + return false; // 濡傛灉褰撳墠鑺傜偣涓嶆槸瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欒繑鍥瀎alse + } + + // 浠庢牴鑺傜偣寮�濮嬮亶鍘嗘暣妫垫爲锛屽苟璋冪敤閫掑綊鍑芥暟鏌ユ壘瀛愯妭鐐圭殑鎵�鏈夌埗鑺傜偣 + for (const node of dataSource) { + if (traverse(node, nodeId)) { + // 濡傛灉鍦ㄥ綋鍓嶈妭鐐圭殑瀛愭爲涓壘鍒颁簡瀛愯妭鐐圭殑鐖惰妭鐐癸紝鍒欑洿鎺ラ��鍑哄惊鐜� + break; + } + } + + return parentIds; // 杩斿洖鎵�鏈夌埗鑺傜偣ID鐨勬暟缁� + }, + }, +}; +</script> +<style scoped lang="scss"> +@import url(../../index.scss); +</style> diff --git a/admin-web/src/views/stock/transfer/transferissue/index.vue b/admin-web/src/views/stock/transfer/transferissue/index.vue index 77df32b..0c0d7c4 100644 --- a/admin-web/src/views/stock/transfer/transferissue/index.vue +++ b/admin-web/src/views/stock/transfer/transferissue/index.vue @@ -1,125 +1,84 @@ <template> - <div class="app-container"> + <div class="app-container stock-container"> <el-container> - <el-container> - <el-card class="box-card" style="width: 100%" shadow="never"> - <!--鎼滅储鏉′欢--> - <div class="filter-container"> - <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> - </div> - <el-row style="margin-top: 15px"> - <el-col> - <!--鍒楄〃--> - <my-button name="鏂板" @click="addtable" site="form" /> - <div :style="{'overflow-y': 'auto', height:`${clientHeight - 320}px`}"> - <el-row class="card" - :gutter="5"> - <el-col v-for="(item, index) in proData" :key="index" class="cm-item"> - <el-card class="card-data"> - <div class="card-container"> - <div class="hed-one"> <span>璋冩嫧鍗曞彿锛歿{ item.order_no }}</span><span style="margin-left: 20px;"><el-button type="warning" plain size="mini">寰呮帴鏀�</el-button></span></div> - <div class="one-hed"> - <div class="box"><span class="span-two">鎺ュ彈鏈烘瀯锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎺ユ敹鏃堕棿锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎺ュ彈浜猴細</span>{{ item.customer_name }}</div> - <div class="box"><span class="span-two">鎺ュ彈鏃堕棿锛�</span>{{ item.customer_name }}</div> - </div> - <div class="card-end"> - <div v-for="(just, index) in item.data" class="two-end"> - <div class="item"><span>{{ just.order_no }}锛�</span>{{ just.customer_name }}</div> - </div> - </div> + <el-card class="box-card" style="width: 100%" shadow="never"> + <!--鎼滅储鏉′欢--> + <div class="filter-container"> + <my-search ref="searchBar" :items="items" @search="fifterForm"></my-search> + </div> + <el-row style="margin-top: 15px"> + <el-col> + <!--鍒楄〃--> + <div :style="{ 'overflow-y': 'auto', height: `${clientHeight - 320}px` }" v-loading="loading"> + <el-row class="card" :gutter="5"> + <el-col v-for="(item, index) in list" :key="index" class="cm-item"> + <el-card class="card-data"> + <div class="card-container"> + <div class="card-header"> + <div class="card-header-left"> + <span>璋冩嫧鍗曞彿锛�</span> + <span class="value">{{ item.businessFormCode }}</span> + </div> + <div class="card-header-right"> + <el-button site="form" type="success" size="mini" @click="handleExport(item)" + >瀵煎嚭璋冩嫧鍗�</el-button + > + <el-button name="鏌ョ湅璇︽儏" site="form" type="info" size="mini" @click="handleDetail(item)" + >鏌ョ湅璇︽儏</el-button + > + </div> + </div> + <div class="one-hed"> + <div class="box"><span class="span-two">鎺ユ敹鏈烘瀯锛�</span>{{ item.agencyId }}</div> + <div class="box"><span class="span-two">鐢宠浜猴細</span>{{ item.buyerName }}</div> + <div class="box"> + <span class="span-two">鐢宠璋冩嫧鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + </div> + <div class="box"> + <span class="span-two">鎺ユ敹鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + </div> + </div> + <div class="one-hed"> + <div class="box"><span class="span-two">璋冩嫧鏈烘瀯锛�</span>{{ item.agencyId }}</div> + <div class="box"><span class="span-two">璋冩嫧浜猴細</span>{{ item.buyerName }}</div> + <div class="box"> + <span class="span-two">璋冩嫧鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + </div> + </div> + <div class="card-end"> + <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item"> + <div class="name">{{ just.goodsTemplateName }}</div> + <div class="value-box"> + <div class="value-box-item"> + <span class="label">鏁伴噺锛�</span> + <span class="value">{{ just.count }}</span> + <span class="unit">{{ just.unit }}</span> </div> - <div class="card-but"> - <div style="margin-top: 10px;"> - <my-button style="width: 120px;" name="鍒犻櫎" site="form" /> - <my-button style="width: 120px;" name="鏌ョ湅璇︽儏" site="form" /> - </div> - </div> - - </el-card> - </el-col> - </el-row> - </div> - <el-pagination - :small="false" - :current-page="1" - :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" - :page-size="10" - layout="total, sizes, prev, pager, next, jumper" - :total="0" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </el-col> - </el-row> - <!--娣诲姞/缂栬緫寮圭獥--> - <el-dialog title="鏂板鍑哄簱" :close-on-click-modal="false" :visible.sync="adddialog" width="60%" > - <el-form ref="ruleForm" :model="formData" class="demo-ruleForm" label-width="100px"> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class="headerHeight"> - <el-col :span="24"> - <el-form-item label="鍑哄簱鎵嬬画" prop="name"> - 浠呭厑璁稿鍏ls銆亁lsx鏍煎紡鏂囦欢 - </el-form-item> - </el-col> - </el-row> - <div style="position: relative;"> - <div style="background-color: #F9F9F9;width: 90%;"> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="24" class=""> - <el-col :span="12"> - <el-form-item label="浠撳簱鍚嶇О" prop="name"> - <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> - </el-form-item> - </el-col> - </el-row> - <el-table :data="formData.tableData" height="100%" :stripe="true"> - <el-table-column prop="projectName" label="瑙勬牸鍨嬪彿" align="center"> </el-table-column> - <el-table-column prop="time1" label="鍗曚綅" align="center"> </el-table-column> - <el-table-column prop="unit" label="鐜版湁搴撳瓨" align="center"> </el-table-column> - <el-table-column prop="time2" label="鍑哄簱鏁伴噺" align="center"> </el-table-column> - </el-table> - </div> - <div style="position: absolute;right: 0;top: 152px;"> - <my-button style="display: block;margin-left: 10px;margin-bottom: 5px;" name="绉婚櫎" site="form"/> - <my-button name="鏂板鐗╁搧" site="form"/> - </div> - </div> - </el-form> - <div slot="footer" align="center" class="dialog-footer"> - <my-button name="纭畾" site="form" /> - <my-button name="鍙栨秷" site="form" @click="adddialog = false"/> + </div> + </div> + </div> + </div> + </el-card> + </el-col> + </el-row> </div> - </el-dialog> - </el-card> - </el-container> + <el-pagination + :small="false" + :current-page="pageNum" + :page-sizes="[5, 10, 20, 50, 100, 200, 300, 400, 500]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </el-col> + </el-row> + </el-card> </el-container> + <!--娣诲姞/缂栬緫寮圭獥--> + <edit v-if="editSetting.show" :setting="editSetting" ref="editRef" @close="editSetting.show=false" @search="refreshData"></edit> + <detail ref="detailRef"></detail> <my-import :import-setting="importSetting" :dialog-show="importSetting.dialogShow" @@ -129,196 +88,87 @@ </template> <script> -import MyButton from "@/components/myButton/myButton"; +import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import myImport from '@/views/components/myImport'; +import edit from './edit'; +import detail from './detail'; +import { getBaseUrl } from '@/utils/base'; +import * as DateFormatter from '@/utils/DateFormatter'; export default { - name: "index", - components: {MyButton, myImport}, + name: 'index', + components: { MyButton, myImport, edit, detail }, data() { return { - + loading: false, adddialog: false, - formData:{ - tableData:[ - { - projectName:'555' - }, - { - projectName:'444' - } - ], - }, + list: [], // 鎼滅储妗� items: [ { type: 'text', - dataIndex: 'name', - label: '鍑哄簱鍗曞彿', + dataIndex: 'businessFormCode', + label: '璋冩嫧鍗曞彿', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', }, { type: 'text', - dataIndex: 'name', + dataIndex: 'goodsTemplateName', label: '鐗╁搧鍚嶇О', placeholder: '鍙ā绯婃悳绱�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'select', + dataIndex: 'name', + label: '鏈烘瀯', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [], }, { type: 'text', - dataIndex: 'name', + dataIndex: 'buyerName', label: '鍒涘缓浜�', placeholder: '璇疯緭鍏�', - defaultValue: '' + defaultValue: '', + }, + { + type: 'select', + dataIndex: 'states', + label: '鐘舵��', + placeholder: '璇烽�夋嫨', + defaultValue: '', + options: [ + { + label: '鍏ㄩ儴', + value: '', + }, + { + label: '寰呰皟鎷�', + value: '1', + }, + { + label: '宸茶皟鎷�', + value: '2', + }, + ], }, { type: 'date-picker', dataIndex: 'val1', - label: '鍑哄簱鏃堕棿', - defaultValue: '' + label: '璋冩嫧鏃堕棿', + defaultValue: '', }, { type: 'date-picker', dataIndex: 'val2', label: '鑷�', - defaultValue: '' + defaultValue: '', }, - // { - // type: 'select', - // dataIndex: 'status', - // label: '鐘舵��', - // placeholder: '璇烽�夋嫨', - // defaultValue: '1', - // options: [ - // { - // label: '鍚敤', - // value: '1' - // }, - // { - // label: '绂佺敤', - // value: '0' - // } - // ] - // } - ], - proData: [ - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃' - }, - ] - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - }, - { - order_no:'55555', - customer_name:'閮戝窞甯傞偖鏀垮垎鍏徃', - data:[ - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'20浠�' - }, - { - order_no:'鐭冲嫆鑺鑹茬⒊绮�', - customer_name:'666' - }, - ] - - } ], // 鏍戞暟鎹� treeDataList: [], @@ -327,25 +177,25 @@ tenantId: null, userName: null, userPhone: null, - status: 1 + states: null, }, // 瀵煎叆 importSetting: { - dialogTitle: '瀵煎叆', - dialogShow: false, - fileSettings: { - data: {}, - uploadUrl: getBaseUrl()+"/pc/fin/sys/tenant/import", // 涓婁紶鍦板潃 - accept: '.xls', // 鏍煎紡 - type: 'text', // 鍥炴樉褰㈠紡 - loading: false // 瀵煎叆鏁堟灉 - }, - /* 妯℃澘涓嬭浇 */ - templateSettings: { - templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О - templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate' // 涓嬭浇鍦板潃 - }, - onSuccess: null + dialogTitle: '瀵煎叆', + dialogShow: false, + fileSettings: { + data: {}, + uploadUrl: getBaseUrl() + '/pc/fin/sys/tenant/import', // 涓婁紶鍦板潃 + accept: '.xls', // 鏍煎紡 + type: 'text', // 鍥炴樉褰㈠紡 + loading: false, // 瀵煎叆鏁堟灉 + }, + /* 妯℃澘涓嬭浇 */ + templateSettings: { + templateName: '瀵煎叆妯℃澘.xls', // 鍚嶇О + templateUrl: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/getImportTemplate', // 涓嬭浇鍦板潃 + }, + onSuccess: null, }, editSetting: { title: '', @@ -353,105 +203,121 @@ orgId: '', show: false, }, - } + pageNum: 1, + pageSize: 10, + total: 0, + }; }, computed: { - clientHeight () { - return document.documentElement.clientHeight + clientHeight() { + return document.documentElement.clientHeight; + }, + }, + filters: { + formatTime(time) { + if (!time) return; + return DateFormatter.LongToDateTime(time); }, }, created() { + this.fetchData(); }, methods: { - handleSizeChange(){}, - handleCurrentChange(){}, + fetchData() { + this.loading = true; + procureList({ + pageNum: this.pageNum, + pageSize: this.pageSize, + ...this.filterFrom, + }).then((res) => { + this.list = res.datas; + this.total = res.totalRows; + this.loading = false; + console.log(this.list); + }); + }, //瀵煎叆 importOrg() { - this.importSetting.dialogShow = true - this.importSetting.onSuccess = (response, callBack) => { - if (response.code===1){ - this.$message.success(response.msg) - this.search(1) - }else{ - this.$message.warning(response.msg) - } - callBack() + this.importSetting.dialogShow = true; + this.importSetting.onSuccess = (response, callBack) => { + if (response.code === 1) { + this.$message.success(response.msg); + this.search(1); + } else { + this.$message.warning(response.msg); } + callBack(); + }; }, - - addtable() { - this.adddialog = true + // 瀵煎嚭 + handleExport() {}, + // 鏂板 + handleAdd() { + this.editSetting.id = null; + this.editSetting.info = null; + this.editSetting.title = '鏂板'; + this.editSetting.show = true; + }, + // 缂栬緫 + handleEdit(row) { + this.editSetting.id = row.id; + this.editSetting.info = null; + this.editSetting.title = '缂栬緫'; + this.editSetting.show = true; + }, + // 璇︽儏 + handleDetail(row) { + this.$refs.detailRef.open(row.id); + }, + // 璋冩嫧 + handleIncome(row) { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 璋冩嫧鍚�?`, '璋冩嫧璋冩嫧') + .then(function () { + procureIncome({ id: row.id }).then((res) => { + this.$message.success('璋冩嫧鎴愬姛锛�'); + this.search(); + }); + }) + .catch(() => {}); + }, + del(row) { + this.$modal + .confirm('鏄惁纭鍒犻櫎璋冩嫧鍗曞彿涓�"' + row.businessFormCode + '"鐨勬暟鎹悧锛�') + .then(function () { + procureDel({ id: row.id }).then((res) => {}); + }) + .then((res) => { + this.$message.success('鍒犻櫎鎴愬姛锛�'); + this.search(); + }) + .catch(() => {}); + }, + // 鍒嗛〉 + handleSizeChange(pageSize) { + this.pageSize = pageSize; + this.search({ pageNum: 1 }); + }, + handleCurrentChange(pageNum) { + this.myTable.paging.page.pageNum = pageNum; + this.search({ pageNum: pageNum }); }, // 鏌ヨtable鍒楄〃 search(pageNum) { - if (pageNum != undefined) { - // this.$refs.myTable.search(pageNum) - } else { - // this.$refs.myTable.search() - } + this.fetchData(); + }, + refreshData() { + this.pageNum = 1; + this.pageSize = 10; + this.search(); }, fifterForm(params) { - console.log(params,'555'); - this.filterFrom = Object.assign(this.filterFrom, params) - this.search(1) - } - } -} + this.filterFrom = Object.assign(this.filterFrom, params); + this.search(1); + }, + }, +}; </script> -<style scoped> -.card { - display: flex; - flex-wrap: wrap; - margin: 0px !important; - .cm-item { - width: 100%; - } - .cm-item /deep/ .el-card__body { - padding: 10px; - } -} -.card-data{ - position: relative; - margin-top: 8px; - .card-container{ - display: inline-block; - width: 70%; - .hed-one{ - color: #2298EE; - font-size: 18px; - } - .one-hed{ - margin-top: 5px; - .box{ - display: inline-block; - margin-right: 20px; - margin-top: 10px; - } - } - .span-two{ - color: #83919e; - font-size: 14px; - } - .card-end{ - font-size: 14px; - color: #3d3d3d; - margin-top: 15px; - display: flex; - flex-wrap: wrap; - .two-end{ - width: calc(33.33% - 20px); - margin-bottom: 15px; - } - } - - } - .card-but{ - position: absolute; - right: 20px; - top: 40%; - } - -} - +<style scoped lang="scss"> +@import url(../../index.scss); </style> -- Gitblit v1.9.1