From 8f24fea6ef79a68bbda4991bd9bd7a60402ad033 Mon Sep 17 00:00:00 2001 From: haoyahui <2032914783@qq.com> Date: 星期四, 09 十一月 2023 18:16:03 +0800 Subject: [PATCH] 采购单,物品分类 --- admin-web/src/views/foundation/classification/edit.vue | 174 ++-- admin-web/src/api/stock/procure/purchaseOrder.js | 81 ++ admin-web/src/views/stock/procure/purchaseOrder/edit.vue | 511 +++++++++++++++ admin-web/src/api/baseSetting/finsystenant.js | 4 admin-web/src/views/stock/procure/purchaseOrder/index.vue | 691 ++++++++++----------- admin-web/src/views/foundation/classification/index.vue | 244 ++++--- admin-web/src/views/stock/procure/purchaseOrder/detail.vue | 147 ++++ admin-web/src/api/foudation/classification.js | 13 admin-web/src/views/foundation/classification/items.js | 15 admin-web/src/views/systemManger/server/user/edit.vue | 1 10 files changed, 1,317 insertions(+), 564 deletions(-) diff --git a/admin-web/src/api/baseSetting/finsystenant.js b/admin-web/src/api/baseSetting/finsystenant.js index 264985e..6c943c6 100644 --- a/admin-web/src/api/baseSetting/finsystenant.js +++ b/admin-web/src/api/baseSetting/finsystenant.js @@ -9,9 +9,7 @@ export function getTree(parameter) { return request.get(SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/tree_fin_tenant', {params: parameter}) } -// export function getTree(parameter) { -// return request.get(SettingIplatform.apiBaseURL + '/pc/base/category/select/tree', {params: parameter}) -// } + /** * @Description 鏍规嵁棣栧瓧姣嶆煡璇㈠尯鍒掑垪琛� diff --git a/admin-web/src/api/foudation/classification.js b/admin-web/src/api/foudation/classification.js new file mode 100644 index 0000000..b2465c1 --- /dev/null +++ b/admin-web/src/api/foudation/classification.js @@ -0,0 +1,13 @@ +import request from '@/utils/request' +import SettingIplatform from '@/utils/settingIplatform'; + +export function getTree(parameter) { + return request.get(SettingIplatform.apiBaseURL + '/pc/base/category/select/tree', {params: parameter}) +} +export function getCategoryDetail(params) { + return request({ + url: '/pc/base/category/detail', + method: 'get', + params + }) +} \ No newline at end of file diff --git a/admin-web/src/api/stock/procure/purchaseOrder.js b/admin-web/src/api/stock/procure/purchaseOrder.js new file mode 100644 index 0000000..7199f73 --- /dev/null +++ b/admin-web/src/api/stock/procure/purchaseOrder.js @@ -0,0 +1,81 @@ +import request from '@/utils/request'; + +// 浠撳簱閫夋嫨鍒楄〃 +export function selectTenantWarehouse(params) { + return request({ + url: '/pc/base/warehouse/select/tenant_warehouse', + method: 'get', + params, + }); +} + +// 鐗╁搧鍒嗙被鍒楄〃 +export function getCategoryDetail(params) { + return request({ + url: '/pc/base/category/detail', + method: 'get', + params, + }); +} + +// 鐗╁搧鍒楄〃 +export function goodsTemplate(params) { + return request({ + url: '/pc/base/goods/template/query/goodsTemplate', + method: 'get', + params, + }); +} +// 瑙勬牸鍨嬪彿 +export function goodsModel(params) { + return request({ + url: '/pc/base/goods/models/query/goodsModel', + method: 'get', + params, + }); +} + +// 閲囪喘鍗� +export function procureAdd(data) { + return request({ + url: '/pc/whForm/procure/add', + method: 'post', + data, + }); +} +export function procureEdit(data) { + return request({ + url: '/pc/whForm/procure/edit', + method: 'post', + data, + }); +} +export function procureList(params) { + return request({ + url: '/pc/whForm/procure/list', + method: 'get', + params, + }); +} +export function procureDetail(params) { + return request({ + url: '/pc/whForm/procure/detail', + method: 'get', + params, + }); +} +export function procureDel(data) { + return request({ + url: '/pc/whForm/procure/del', + method: 'delete', + data, + }); +} +// 鍏ュ簱 +export function procureIncome(data) { + return request({ + url: '/pc/whForm/procure/income', + method: 'post', + data, + }); +} \ 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 f0f9077..808e3f7 100644 --- a/admin-web/src/views/foundation/classification/edit.vue +++ b/admin-web/src/views/foundation/classification/edit.vue @@ -1,25 +1,34 @@ <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="fatherCategoryId"> - <el-input v-model="formData.fatherCategoryId" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-form-item label="涓婄骇鍒嗙被" prop="fatherCategoryName" :key="key"> + <el-input + v-model="formData.fatherCategoryName" + clearable + maxlength="20" + show-word-limit + style="width: 100%" + disabled + /> </el-form-item> <el-form-item label="鍒嗙被鍚嶇О" prop="categoryName"> - <el-input v-model="formData.categoryName" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-input v-model="formData.categoryName" clearable maxlength="20" show-word-limit style="width: 100%" /> </el-form-item> - <el-form-item label="绫诲埆" prop="classification"> - <!-- <el-input v-model="formData.name" clearable maxlength="20" show-word-limit style="width: 100%"/> --> + <!-- 鍙湁绗笁绾у垎绫讳俊鎭淮鎶ゆ椂闇�瑕侀�夌被鍒� --> + <el-form-item label="绫诲埆" prop="classification" v-if="plevels==2"> <el-select v-model="formData.classification" placeholder="" clearable style="width: 100%"> - <el-option - v-for="item in options" - :key="item.code" - :label="item.label" - :value="item.code"> - </el-option> + <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option> </el-select> </el-form-item> <el-form-item label="椤哄簭" prop="orderNumber"> - <el-input v-model="formData.orderNumber" clearable maxlength="20" show-word-limit style="width: 100%"/> + <el-input + type="number" + v-model="formData.orderNumber" + 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"> @@ -29,105 +38,108 @@ </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'; +import { getDicts } from '@/api/system/dict/data'; +import { getCategoryDetail } from '@/api/foudation/classification'; export default { - components: {winSm, myButton}, + components: { winSm, myButton }, props: { setting: { type: Object, - default: () => { - } - } + default: () => {}, + }, }, data() { return { checkAll: false, checkedList: [], - options:[ - { - code: 'A', - label:'A' - }, - { - code: "B", - label:'B' - }, - { - code: 'c', - label:'C' - } - ], + options: [], // 绫诲埆鍒楄〃 formData: { - code: '', - name: '', - states: '', - summary: '', - planTypeCode:'' + fatherCategoryId: '', // 涓婄骇鍒嗙被 + fatherCategoryName: '', + categoryName: '', //鍒嗙被鍚嶇О + classification: '', //绫诲埆 + orderNumber: '', // 椤哄簭 + states: 1, // 鐘舵�� }, rules: { - fatherCategoryId: [ - {required: true, message: '璇疯緭鍏�', trigger: 'blur'} - ], - categoryName: [ - {required: true, message: '璇疯緭鍏�', trigger: 'blur'} - ] - } - } + fatherCategoryName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + categoryName: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + classification: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + orderNumber: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + }, + key: Math.random(), + plevels:1 + }; }, created() { - if(this.setting.info){ - this.formData = Object.assign({},JSON.parse(this.setting.info)) + if (this.setting.title == '缂栬緫') { + this.formData = Object.assign({}, JSON.parse(this.setting.info)); + } else { + this.formData.fatherCategoryId = this.setting.pid; } + this.getCategoryName(); + getDicts('GOODS_PRICE').then((res) => { + this.options = res.map((v) => { + v.label = v.dict_label; + v.value = v.dict_value; + return v; + }); + }); }, methods: { - getEditInfo(id){ - + getEditInfo(id) {}, + // 鍒嗙被鍚嶇О鑾峰彇 + getCategoryName() { + getCategoryDetail({ id: this.formData.fatherCategoryId }).then((res) => { + this.formData.fatherCategoryName = res.categoryName; + this.key = Math.random(); + this.plevels = res.levels + }); }, 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) { + debugger; // 缂栬緫鎺ュ彛 - finsystenant.edit(params).then(res => { - if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') - } else { - this.$message.error('淇濆瓨澶辫触') - } - }) - }else{ - params.orgId = this.setting.orgId - finsystenant.add(params).then(res => { - if (res) { - this.$message.success('淇濆瓨鎴愬姛锛�') - this.close() - this.$emit('search') - } else { - this.$message.error('淇濆瓨澶辫触') - } - }) + finsystenant.edit(params).then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }); + } else { + params.orgId = this.setting.orgId; + console.log(params); + finsystenant + .add(params) + .then((res) => { + this.$message.success('淇濆瓨鎴愬姛锛�'); + this.close(); + this.$emit('search'); + }) + .catch((err) => { + console.log('err', err); + }); } } else { - this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��') + this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); } - }) - } - } -} + }); + }, + }, +}; </script> diff --git a/admin-web/src/views/foundation/classification/index.vue b/admin-web/src/views/foundation/classification/index.vue index 785bf7a..6913db5 100644 --- a/admin-web/src/views/foundation/classification/index.vue +++ b/admin-web/src/views/foundation/classification/index.vue @@ -1,7 +1,7 @@ <template> <div class="app-container"> <el-container> - <el-card shadow="never" style="width: 240px;margin-right: 15px"> + <el-card shadow="never" style="width: 240px; margin-right: 15px"> <my-tree ref="searchTree" :tree-list="treeDataList" @setNode="nodeClick" @search="search"></my-tree> </el-card> <el-container> @@ -13,11 +13,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"/> + <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="refreshData" /> </el-card> </el-container> </el-container> @@ -30,19 +30,22 @@ </template> <script> -import myTree from '@/components/myTree/index' -import MyTableV2 from "@/components/myTable/myTableV2"; -import MyButton from "@/components/myButton/myButton"; +import myTree from '@/components/myTree/index'; +import MyTableV2 from '@/components/myTable/myTableV2'; +import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; -import items from './items' -import edit from './edit' -import * as finsystenant from '@/api/baseSetting/finsystenant' -import myImport from '@/views/components/myImport' -import {getBaseUrl} from '@/utils/base'; +import items from './items'; +import edit from './edit'; +import * as finsystenant from '@/api/baseSetting/finsystenant'; +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' export default { - name: "index", - components: {MyButton, MyTableV2, edit, myTree, myImport}, + name: 'index', + components: { MyButton, MyTableV2, edit, myTree, myImport }, data() { return { // 鎼滅储妗� @@ -54,25 +57,25 @@ tenantId: null, userName: null, userPhone: null, - states: 1 + states: 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: '', @@ -87,11 +90,13 @@ url: SettingIplatform.apiBaseURL + '/pc/base/category/list', // 璇锋眰鍦板潃 // 宸ュ叿鏉� tools: { - columnsCtrl: {// 鍒楁帶鍒舵寜閽� - show: false + columnsCtrl: { + // 鍒楁帶鍒舵寜閽� + show: false, }, - generalExport: {// 閫氱敤瀵煎嚭鎸夐挳 - show: false + generalExport: { + // 閫氱敤瀵煎嚭鎸夐挳 + show: false, }, // 鑷畾涔夊伐鍏锋潯鎸夐挳 custom: [ @@ -101,40 +106,41 @@ this.showAdd(null); }, }, - ] + ], }, // 鍒椾俊鎭� columns: [ - {title: '鍒嗙被鍚嶇О', field: 'categoryName', align: 'center'}, - {title: '绫诲埆', field: 'classification', align: 'left'}, - {title: '鏄剧ず椤哄簭', field: 'orderNumber', align: 'center', width: '80px'}, + { title: '鍒嗙被鍚嶇О', field: 'categoryName', align: 'center' }, + { title: '绫诲埆', field: 'classification', align: 'left' }, + { title: '鏄剧ず椤哄簭', field: 'orderNumber', align: 'center', width: '80px' }, { field: 'states', title: '鐘舵��', align: 'center', width: 100, - switch: row => { - const result = {} + switch: (row) => { + const result = {}; if (row.states == 1) { Object.assign(result, { value: true, // 寮� label: '鏄�', // 寮�鐨勬弿杩� - click: () => { // 鐐瑰嚮浜嬩欢 - this.updState(row) - } - }) + click: () => { + // 鐐瑰嚮浜嬩欢 + this.updState(row); + }, + }); } else { Object.assign(result, { value: false, // 鍏� label: '鍚�', // 鍏崇殑鎻忚堪 click: () => { - this.updState(row) - } - }) + this.updState(row); + }, + }); } - return result - } - } + return result; + }, + }, ], // 鎿嶄綔淇℃伅 operation: { @@ -152,7 +158,7 @@ events: (row) => { this.del(row); }, - } + }, ], }, paging: { @@ -162,81 +168,88 @@ small: false, pageNum: 1, pageSize: 10, - total: 0 - } - } + total: 0, + }, + }, }, - } + }; }, created() { // 鑾峰彇鏈烘瀯鏍� - this.initTreeData() + 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 + }) + }) }, 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 => { + getTree().then((res) => { console.log(res, 'restree'); - console.log(this.importSetting,'this.importSetting'); - const content = res || [] + console.log(this.importSetting, 'this.importSetting'); + const content = res || []; // this.treeDataList.splice(0, this.treeDataList.length) - this.treeDataList = content + this.treeDataList = content; // if (content.length > 0) { // this.importSetting.fileSettings.data = {pid: content[0].id} // } - }) + }); }, updState(row) { - let vm = this - let text = row.states == 0 ? "鍚敤" : "绂佺敤"; + let vm = this; + let text = row.states == 0 ? '鍚敤' : '绂佺敤'; vm.$modal.confirm('纭瑕�' + text + '"' + row.categoryName + '"鍚楋紵').then(function () { - let params = Object.assign({}, row) - params.states = row.states == 1 ? 0 : 1 - finsystenant.edit(params).then(res => { + let params = Object.assign({}, row); + params.states = row.states == 1 ? 0 : 1; + finsystenant.edit(params).then((res) => { if (res) { - row.states = row.states === 1 ? 0 : 1 - vm.$modal.msgSuccess(text + "鎴愬姛"); - vm.search() + row.states = row.states === 1 ? 0 : 1; + vm.$modal.msgSuccess(text + '鎴愬姛'); + vm.search(); } - }) - }) + }); + }); }, del(row) { this.$modal .confirm('鏄惁纭鍒犻櫎鍚嶇О涓�"' + row.categoryName + '"鐨勬満鏋勫悧锛�') .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; - // } + if (!this.editSetting.orgId) { + this.$message.warning('璇峰厛閫夋嫨宸︿晶鏈烘瀯') + } else { + 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; @@ -246,37 +259,42 @@ }, nodeClick(param) { console.log(param, '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.fatherCategoryId = this.p.id; + this.editSetting.orgId = this.p.id; } else { - this.filterFrom.tenantId = null - this.editSetting.orgId = null + this.filterFrom.fatherCategoryId = 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(); } }, + refreshData() { + this.initTreeData() + this.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/foundation/classification/items.js b/admin-web/src/views/foundation/classification/items.js index 6537de7..b40b94c 100644 --- a/admin-web/src/views/foundation/classification/items.js +++ b/admin-web/src/views/foundation/classification/items.js @@ -12,20 +12,7 @@ label: '绫诲埆', placeholder: '璇烽�夋嫨', defaultValue: '', - options: [ - { - label: 'A', - value: 'A' - }, - { - label: 'B', - value: 'B' - }, - { - label: 'C', - value: 'C' - } - ] + options: [] }, { type: 'select', diff --git a/admin-web/src/views/stock/procure/purchaseOrder/detail.vue b/admin-web/src/views/stock/procure/purchaseOrder/detail.vue new file mode 100644 index 0000000..35f7d41 --- /dev/null +++ b/admin-web/src/views/stock/procure/purchaseOrder/detail.vue @@ -0,0 +1,147 @@ +<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" + > + <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> +.img-row { + display: flex; + align-content: center; +} +.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; + } +} +</style> diff --git a/admin-web/src/views/stock/procure/purchaseOrder/edit.vue b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue new file mode 100644 index 0000000..93e1c42 --- /dev/null +++ b/admin-web/src/views/stock/procure/purchaseOrder/edit.vue @@ -0,0 +1,511 @@ +<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" + > + <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].baseCategoryId = '' + + 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 = [] + + // 鏍规嵁閫変腑鐗╁搧鍚嶇О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"> +.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; + } + } +} +</style> diff --git a/admin-web/src/views/stock/procure/purchaseOrder/index.vue b/admin-web/src/views/stock/procure/purchaseOrder/index.vue index e5f7a65..826f06f 100644 --- a/admin-web/src/views/stock/procure/purchaseOrder/index.vue +++ b/admin-web/src/views/stock/procure/purchaseOrder/index.vue @@ -1,126 +1,92 @@ <template> <div class="app-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> - <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> + <!--鍒楄〃--> + <my-button name="鏂板" @click="addtable" site="tools" size="medium" /> + <my-button name="瀵煎叆" @click="importSetting.dialogShow = true" site="tools" size="medium" /> + <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-income'">{{ item.states == 1 ? '寰呭叆搴�' : '宸插叆搴�' }}</div> + </div> + <div class="card-header-right"> + <template v-if="item.states == 1"> + <el-button name="缂栬緫" site="form" type="success" size="mini" @click="handleEdit(item)" + >缂栬緫</el-button + > + <el-button name="鍏ュ簱" site="form" type="primary" size="mini" @click="handleIncome(item)" + >鍏ュ簱</el-button + > + <el-button name="鍒犻櫎" site="form" type="danger" size="mini" @click="del(item)" + >鍒犻櫎</el-button + > + </template> + <template v-if="item.states != 1"> + <el-button site="form" type="success" size="mini" @click="handleExport(item)" + >瀵煎嚭鍏ュ簱鍗�</el-button + > + </template> + <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> + <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> </div> - <div class="card-but"> - <div> - <my-button style="width: 120px;" name="缂栬緫" site="form" /> - <my-button style="width: 120px;" name="鍏ュ簱" site="form" /> - </div> - <div style="margin-top: 10px;"> - <my-button style="width: 120px;" name="鍒犻櫎" site="form" /> - <my-button style="width: 120px;" name="鏌ョ湅璇︽儏" site="form" /> - </div> + <div class="value-box-item"> + <span class="label">閲戦锛�</span> + <span class="value">{{ just.price }}</span> </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" @@ -130,196 +96,96 @@ </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:[ + list: [], + formData: { + tableData: [ { - projectName:'555' + projectName: '555', }, { - projectName:'444' - } + projectName: '444', + }, ], }, // 鎼滅储妗� 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: [], @@ -328,25 +194,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: '', @@ -354,104 +220,223 @@ 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; - } +<style scoped lang="scss"> +.ml-20 { + margin-left: 20px; } -.card-data{ +.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{ - display: inline-block; - width: 70%; - .hed-one{ - color: #2298EE; - font-size: 18px; + .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; } - .one-hed{ - margin-top: 15px; - .box{ - display: inline-block; - margin-right: 20px; + .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; } } - .span-two{ - color: #83919e; - font-size: 14px; + .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{ + .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; + 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; + } + } + } } } - } - .card-but{ - position: absolute; - right: 20px; - top: 40%; - } - } - </style> diff --git a/admin-web/src/views/systemManger/server/user/edit.vue b/admin-web/src/views/systemManger/server/user/edit.vue index b5646fc..840efc6 100644 --- a/admin-web/src/views/systemManger/server/user/edit.vue +++ b/admin-web/src/views/systemManger/server/user/edit.vue @@ -138,6 +138,7 @@ // 鑾峰彇鎵�鏈夎鑹� getAllRole() { const user = this.$store.getters.userInfo + this.data_scope = 1 if (user.lv == 1) { this.data_scope = 1 } -- Gitblit v1.9.1