From 9a0cf79fa57427d7a38d55ad8b33622c1dcc18aa Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期五, 26 一月 2024 16:06:31 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10101/r/ERP_override
---
north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue | 332 +++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 287 insertions(+), 45 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue b/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
index 545b2f5..cb2a9b7 100644
--- a/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
+++ b/north-glass-erp/northglass-erp/src/views/sd/order/CreateOrder.vue
@@ -1,9 +1,12 @@
-<script setup>
+<script lang="ts" setup>
import {reactive, ref} from "vue"
-import {VXETable} from "vxe-table"
import {useRouter} from "vue-router"
-const router = useRouter()
+import * as XLXS from "xlsx"
+import {ElMessage} from "element-plus"
+import request from "@/utils/request"
+import deepClone from "@/utils/deepClone"
+const router = useRouter()
const xGrid = ref()
const gridOptions = reactive({
border: "full",//琛ㄦ牸鍔犺竟妗�
@@ -18,6 +21,15 @@
exportConfig: {},
scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
showOverflow:true,
+ menuConfig: {
+ body: {
+ options: [
+ [
+ { code: 'addRow', name: '娣诲姞', prefixIcon: 'vxe-icon-square-plus', visible: true, disabled: false }
+ ]
+ ]
+ }
+ },
columnConfig: {
resizable: true,
useKey: true
@@ -30,45 +42,103 @@
},
editConfig: {
trigger: 'click',
- mode: 'row',
+ mode: 'cell',
showStatus: true
},//琛ㄥご鍙傛暟
columns:[
+ // {title: '鎿嶄綔', width: 110,fixed:"left",slots: { default: 'openProductList' }},
{type: 'seq',fixed:"left", title: '鑷簭', width: 80 },
- {field: 'orderID',width:120, title: '妤煎彿',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '浜у搧',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '瀹�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '楂�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '鏁伴噺',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '鍗曚环',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '褰㈢姸',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '鍗曠墖闈㈢Н',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '缁撶畻鍗曠墖闈㈢Н',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '缁撶畻鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '纾ㄨ竟绫诲瀷',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '鍔犲伐瑕佹眰',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '澶囨敞',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
- {field: 'orderID',width:120, title: '澶栬喘',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
+ {field: 'buildingNumber',width:120, title: '妤煎彿',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'productId',width:140, title: '浜у搧ID',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'productName',width:120, title: '浜у搧',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'price',width:140, title: '鍗曚环',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'quantity',width:120, title: '鏁伴噺',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'grossAmount',width:120, title: '鎬婚噾棰�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'width',width:120, title: '瀹�',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'height',width:120, title: '楂�',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'area',width:150, title: '瀹為檯鍗曠墖闈㈢Н',filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true},
+ {field: 'grossArea',width:140, title: '瀹為檯鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true},
+ {field: 'computeArea',width:180, title: '缁撶畻鍗曠墖闈㈢Н',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'computeGrossArea',width:140, title: '缁撶畻鎬婚潰绉�',filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'shape',width:120, title: '褰㈢姸',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'bendRadius',width:140, title: '寮挗寮у害',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'edgingType',width:140, title: '纾ㄨ竟绫诲瀷',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'processingNote',width:140, title: '鍔犲伐瑕佹眰',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true},
+ {field: 'remarks',width:120, title: '澶囨敞',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter' }, sortable: true}
-
- ],//琛ㄥご鎸夐挳
+ ],
+ //琛ㄥ崟楠岃瘉
+ editRules: {
+ buildingNumber: [
+ { required: false},
+ { min: 0, max: 255, message: '鍚嶇О闀垮害鍦� 0 鍒� 255 涓瓧绗�' }
+ ],
+ productId: [
+ { required: true, message: '璇烽�夋嫨浜у搧' }
+ ],
+ price: [
+ {
+ validator ({ cellValue }) {
+ const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+ if (cellValue && !regex.test(cellValue)) {
+ return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+ }
+ }
+ }
+ ],
+ computeArea: [
+ {
+ validator ({ cellValue }) {
+ const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+ if (cellValue && !regex.test(cellValue)) {
+ return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+ }
+ }
+ }
+ ],
+ quantity: [
+ { type: 'number', min: 0, message: '璇疯緭鍏ュぇ浜庣瓑浜�0鐨勬暟鍊�' }
+ ],
+ width:[
+ {
+ validator ({ cellValue }) {
+ const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+ if (cellValue && !regex.test(cellValue)) {
+ return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+ }
+ }
+ }
+ ],
+ height:[
+ {
+ validator ({ cellValue }) {
+ const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/
+ if (cellValue && !regex.test(cellValue)) {
+ return new Error('杈撳叆0.00~99999.99鐨勬暟瀛�')
+ }
+ }
+ }
+ ]
+ },
toolbarConfig: {
buttons: [
{'code': 'remarks', 'name': '鍔犲伐瑕佹眰'},
{'code': 'Craft', 'name': '宸ヨ壓',status: 'primary'},
{'code': 'add', 'name': '瀹℃牳',status: 'primary',disabled: true},
- {'code': 'add', 'name': '淇濆瓨',status: 'primary',icon: 'vxe-icon-save'}
+ {'code': 'saveOrder', 'name': '淇濆瓨',status: 'primary',icon: 'vxe-icon-save'}
],
- import: false,
- export: true,
- print: true,
+ slots: {
+ tools: 'toolbar_buttons'
+ },
+ // import: false,
+ // export: true,
+ // print: true,
zoom: true,
custom: true
- },
- data: [
- ],//table body瀹為檯鏁版嵁
+ }
+ ,
+ //table body瀹為檯鏁版嵁
footerMethod ({ columns, data }) {//椤佃剼鍑芥暟
return[
columns.map((column, columnIndex) => {
@@ -84,26 +154,172 @@
}
})
-
const gridEvents = {
- toolbarButtonClick ({ code }) {
+ async toolbarButtonClick({code}) {
const $grid = xGrid.value
if ($grid) {
switch (code) {
case 'Craft': {
- router.push({path: '/main/order/updateOrderCraft', query: { orderID: 12123 }})
+ await router.push({path: '/main/order/updateOrderCraft', query: {orderID: 12123}})
+ break
+ }
+ case 'saveOrder': {
+ if ($grid.getTableData().tableData.length === 0){
+ ElMessage.error('娌℃湁琛ㄦ牸鏁版嵁锛�')
+ return
+ }
+ console.log($grid.getTableData().tableData)
+ if ($grid) {
+ const errMap = await $grid.validate(true)
+ if (errMap) {
+ ElMessage.error(`鏍¢獙涓嶉�氳繃锛乣)
+ return
+ }
+ let order ={
+ title:titleUploadData.value,
+ detail:$grid.getTableData().tableData
+ }
+ saveOrder(order)
+ }
break
}
}
}
+ },//澶撮儴鎸夐挳浜嬩欢
+ menuClick ({ menu, row, column }) {
+ const $grid = xGrid.value
+ if ($grid) {
+ switch (menu.code) {
+ case 'deleteList': {
+ $grid.removeCheckboxRow()
+ break
+ }
+ case 'addRow': {
+ if ($grid.getTableData().tableData.length >=240){
+ ElMessage.error('琛ㄦ牸鏁版嵁宸茶揪鍒版渶澶у�硷紒')
+ return
+ }
+ $grid.insert({})
+ //console.log($grid.getRecordset().insertRecords)
+ break
+ }
+ }
+ }
+ },
+ cellDblclick (params) {//琛ㄦ牸鍐呭鍙屽嚮鎵撳紑浜у搧鐣岄潰
+ const { row } = params
+ //alert("鎴戞墦寮�浜嗕骇鍝佺晫闈�")
}
}
+// 瀹氫箟琛ㄥご涓婁紶鏁版嵁
+const titleUploadData = ref({
+ orderType:'',
+ alType:'',
+ icon:'',
+ orderClassify:'',
+ packType:'',
+ deliveryDate:''
+})
+
+//瀹氫箟鎺ユ敹鍔犺浇琛ㄥご涓嬫媺鏁版嵁
+const titleSelectJson = ref({
+ orderType:[],
+ alType:[],
+ icon:[],
+ orderClassify:[],
+ packType:[],
+})
+//椤甸潰绗竴娆″姞杞芥墽琛�
+request.get(`/basicData/orderBasicData`).then((res) => {
+ if(res.code==200){
+ titleSelectJson.value=deepClone(res.data)
+ titleUploadData.value.orderType = titleSelectJson.value.orderType[0].id
+ titleUploadData.value.orderClassify = titleSelectJson.value.orderClassify[0].id
+ titleUploadData.value.icon = titleSelectJson.value.icon[0].id
+ titleUploadData.value.packType = titleSelectJson.value.packType[0].id
+ titleUploadData.value.alType = titleSelectJson.value.alType[0].id
+ const today = new Date
+ today.setTime(today.getTime() + (15 * 24 * 60 * 60 * 1000))
+ titleUploadData.value.deliveryDate = today.getFullYear() +
+ '-' + ("0" + (today.getMonth() + 1)).slice(-2)
+ + '-' + ("0" + today.getDate()).slice(-2)
+ }else{
+ ElMessage.warning(res.msg)
+ }
+})
+
+const saveOrder = (order) => {
+ request.post(`/order/saveOrder`,order).then((res) => {
+ if(res.code==200){
+ ElMessage.success('淇濆瓨鎴愬姛')
+ }else {
+ ElMessage.warning(res.msg)
+ }
+ })
+}
+
+
+
+
+const countAmount = (row) => {
+ return
+}
+const area = (row) => {
+ return parseFloat((row.width * row.height/1000000).toFixed(2))
+}
+const countArea = (row) => {
+ return parseFloat((row.width * row.height/1000000).toFixed(2))*row.quantity
+}
+
+
+//瀵煎叆鍔熻兘
+const impotEvent = async () => {
+ const $grid = xGrid.value
+ const { files } = await $grid.readFile({
+ types: ['xls', 'xlsx']
+ })
+ const fileReader = new FileReader()
+ fileReader.onload = (event) => {
+ const data = event.target ? event.target.result : ''
+ const workbook = XLXS.read(data, { type: 'binary' })
+ let jsonData = XLXS.utils.sheet_to_json(workbook.Sheets.Sheet1).slice(1)
+ if(jsonData.length>240){
+ ElMessage.error('瀵煎叆鏁版嵁涓嶈兘瓒呰繃240鏉�,璇峰垎璁㈠崟瀵煎叆')
+ return
+ }
+ jsonData.forEach((item,index) => {
+ //item.computeArea
+ //console.log()
+ if(item.computeArea === undefined){
+ item.computeArea = area(item)
+ }
+ item.computeGrossArea = parseFloat((item.computeArea*item.quantity).toString())
+ })
+
+ xGrid.value.loadData(jsonData)
+ }
+ fileReader.readAsBinaryString(files[0])
+}
+
+//琛屽崟鍏冩牸淇敼淇敼瑙﹀彂姝や簨浠�
+const editClosedEvent = ({ row, column }) => {
+ //鍒ゆ柇淇敼鐩稿簲鐨勬暟鍊间慨鏀归潰绉笌閲戦
+ if (['width', 'height', 'quantity', 'price'].includes(column.property)) {
+ row.area = area(row)
+ row.grossArea = countArea(row)
+ row.computeArea = row.area
+ row.computeGrossArea = row.grossArea
+ row.grossAmount=row.price * row.computeGrossArea
+ }else if(column.property === 'computeArea'){
+ row.computeGrossArea=parseFloat((row.computeArea*row.quantity).toString())
+ row.grossAmount=row.price * row.computeGrossArea
+ }
+}
</script>
<template>
<div class="main-div">
-
<div class="order-primary" style="background-color: white">
<el-row>
<el-col :span="2"><el-text>*椤圭洰鍚嶇О锛�</el-text></el-col>
@@ -116,26 +332,42 @@
</el-col>
<el-col :span="2"><el-text>*璁㈠崟绫诲瀷锛�</el-text></el-col>
<el-col :span="2">
- <el-select clearable placeholder=" " >
- <el-option />
+ <el-select v-model="titleUploadData.orderType" clearable placeholder="" >
+ <el-option
+ v-for="item in titleSelectJson['orderType']"
+ :key="item.id"
+ :label="item.basicName"
+ :value="item.id"
+ />
</el-select>
</el-col>
<el-col :span="2"><el-text>璁㈠崟鍒嗙被锛�</el-text></el-col>
<el-col :span="2">
- <el-select clearable placeholder=" " >
- <el-option/>
+ <el-select v-model="titleUploadData.orderClassify" clearable placeholder=" " >
+ <el-option
+ v-for="item in titleSelectJson['orderClassify']"
+ :key="item.id"
+ :label="item.basicName"
+ :value="item.id"
+ />
</el-select>
</el-col>
<el-col :span="2"><el-text>鍟嗘爣閫夐」锛�</el-text></el-col>
<el-col :span="2">
- <el-select clearable placeholder=" " >
- <el-option/>
+ <el-select v-model="titleUploadData.icon" clearable placeholder=" " >
+ <el-option v-for="item in titleSelectJson['icon']"
+ :key="item.id"
+ :label="item.basicName"
+ :value="item.id"/>
</el-select>
</el-col>
<el-col :span="2"><el-text>鍖呰鏂瑰紡锛�</el-text></el-col>
<el-col :span="2">
- <el-select clearable placeholder=" " >
- <el-option/>
+ <el-select v-model="titleUploadData.packType" clearable placeholder=" " >
+ <el-option v-for="item in titleSelectJson['packType']"
+ :key="item.id"
+ :label="item.basicName"
+ :value="item.id"/>
</el-select>
</el-col>
<!-- <el-col :span="2"><el-text /></el-col>-->
@@ -146,9 +378,10 @@
<el-col :span="2"><el-text>浜よ揣鏃ユ湡锛�</el-text></el-col>
<el-col :span="2">
<el-date-picker
- type="week"
- format="[Week] ww"
- placeholder="閫夋嫨鏃ユ湡"/>
+ v-model="titleUploadData.deliveryDate"
+ type="date"
+ placeholder="Pick a day"
+ />
</el-col>
<el-col :span="2"><el-text>鎵规锛�</el-text></el-col>
<el-col :span="2"><el-input/></el-col>
@@ -166,8 +399,11 @@
</el-col>
<el-col :span="2"><el-text>閾濇潯鏂瑰紡锛�</el-text></el-col>
<el-col :span="2">
- <el-select clearable placeholder=" " >
- <el-option/>
+ <el-select v-model="titleUploadData.alType" clearable placeholder=" " >
+ <el-option v-for="item in titleSelectJson['alType']"
+ :key="item.id"
+ :label="item.basicName"
+ :value="item.id"/>
</el-select>
</el-col>
</el-row>
@@ -201,6 +437,7 @@
ref="xGrid"
v-bind="gridOptions"
v-on="gridEvents"
+ @edit-closed="editClosedEvent"
>
<template #num1_filter="{ column, $panel }">
<div>
@@ -209,6 +446,11 @@
</div>
</div>
</template>
+ <template #toolbar_buttons>
+ <vxe-button @click="impotEvent">瀵煎叆</vxe-button>
+ </template>
+
+
</vxe-grid>
</div>
</div>
--
Gitblit v1.8.0