| | |
| | | import {computed, onMounted, reactive, ref, watch} from "vue" |
| | | import {filterChanged} from "@/hook" |
| | | import {useI18n} from "vue-i18n" |
| | | import {ElMessage} from "element-plus"; |
| | | import {ElMessage, ElMessageBox,} from "element-plus" |
| | | import request from "@/utils/request" |
| | | import {useRouter,useRoute} from "vue-router" |
| | | const { t } = useI18n() |
| | | const router = useRouter() |
| | | const route = useRoute() |
| | | let rowClickIndex = ref(null) |
| | | const xGrid = ref() |
| | | const gridOptions = reactive({ |
| | |
| | | },//表头参数 |
| | | columns:[ |
| | | // {field: 'buildingNumber',width:120, title: '楼号',editRender: { name: 'input'},filters:[{ data: '' }],slots: { filter: 'num1_filter'}, sortable: true,filterMethod:filterChanged}, |
| | | {field: 'alias', title:'其他加工',editRender: { name: 'input'},minWith:'130'}, |
| | | {field: 'alias', title:'其他加工',minWith:'130'}, |
| | | {field: 'price', title:'单价',editRender: { name: 'input'}}, |
| | | {field: 'quantity', title:'数量' }, |
| | | {field: 'money', slots:{default:'default'}, title:'金额'} |
| | |
| | | if ($grid) { |
| | | switch (code) { |
| | | case 'add': { |
| | | if ($grid.getTableData().tableData.length >=240){ |
| | | ElMessage.error(t('order.msg.tableLengthMax')) |
| | | return |
| | | } |
| | | $grid.insert({}) |
| | | addColumn() |
| | | break |
| | | } |
| | | case 'delete': { |
| | |
| | | ElMessage.warning('请先单击选择行') |
| | | return |
| | | } |
| | | $grid.remove(rowClickIndex.value) |
| | | deleteColum(rowClickIndex.value.id) |
| | | rowClickIndex.value = null |
| | | break |
| | | } |
| | |
| | | validate |
| | | }) |
| | | |
| | | |
| | | const addColumn = () => { |
| | | ElMessageBox.prompt( '新增列名:', { |
| | | confirmButtonText: '新增', |
| | | cancelButtonText: '取消', |
| | | inputPattern:/^.{1,20}$/, |
| | | inputErrorMessage: '请输入20个字符以内的且不为空的字符', |
| | | }) |
| | | .then(({ value }) => { |
| | | request.post('/basicOtherMoney/save',{alias:value}).then(res=>{ |
| | | if (res.code==='200' && res.data!==false){ |
| | | ElMessage.success('新增成功') |
| | | setTimeout(()=>{ |
| | | window.location.reload() |
| | | },1500) |
| | | |
| | | }else{ |
| | | ElMessage.error('新增失败,不能重复添加或超过100条列') |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | } |
| | | |
| | | const deleteColum = (id) => { |
| | | ElMessageBox.confirm( |
| | | '确认删除此列名?', |
| | | 'Warning', |
| | | { |
| | | confirmButtonText: '删除', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | } |
| | | ) |
| | | .then(() => { |
| | | request.post(`/basicOtherMoney/deleteById/${id}`,).then(res=>{ |
| | | if (res.code==='200' && res.data!==false){ |
| | | ElMessage.success('删除成功') |
| | | setTimeout(()=>{ |
| | | window.location.reload() |
| | | },1500) |
| | | }else{ |
| | | ElMessage.error('删除失败') |
| | | } |
| | | }) |
| | | }) |
| | | |
| | | } |
| | | |
| | | </script> |
| | | |
| | | <template> |
| | |
| | | <span>{{ countAmount(row) }} </span> |
| | | </template> |
| | | </vxe-grid> |
| | | |
| | | </div> |
| | | |
| | | |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import { useI18n } from 'vue-i18n' |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import {changeFilterEvent, filterChanged} from "@/hook" |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import useUserInfoStore from "@/stores/userInfo"; |
| | | import { useI18n } from 'vue-i18n' |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | import { useI18n } from 'vue-i18n' |
| | | //语言获取 |
| | |
| | | |
| | | const gridOptions = reactive({ |
| | | loading:false, |
| | | showHeaderOverflow: false, |
| | | showFooterOverflow: false, |
| | | border: "full",//表格加边框 |
| | | keepSource: true,//保持源数据 |
| | | align: 'center',//文字居中 |
| | |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | ], |
| | | }, |
| | | toolbarConfig: { |
| | | buttons: [ |
| | |
| | | otherMoney.value = titleSelectJson.value.orderOtherMoney[0] |
| | | //let columns = [] |
| | | otherMoney.value.forEach(item => { |
| | | let column = {field: `otherColumns.${item.column}`,width:50, title: item.alias,editRender: { name: 'input'}} |
| | | let column = { |
| | | field: `otherColumns.${item.column}`, |
| | | width:50, title: item.alias, |
| | | editRender: { |
| | | name: 'input', |
| | | } |
| | | } |
| | | gridOptions.editRules[`otherColumns.${item.column}`] = [ |
| | | { |
| | | validator ({ cellValue }) { |
| | | const regex = /^(0|[1-9][0-9]{0,4}([.][0-9]{1,2})?)$/ |
| | | if (cellValue && !regex.test(cellValue)) { |
| | | return new Error(t('basicData.msg.range99999Dec2')) |
| | | } |
| | | } |
| | | } |
| | | ] |
| | | |
| | | //columns.push(column) |
| | | gridOptions.columns.push(column) |
| | | |
| | | }) |
| | | |
| | | //进入页面下拉框设置默认值 |
| | |
| | | import GlassType from "@/components/sd/product/GlassType.vue" |
| | | import {useRouter} from 'vue-router' |
| | | import Sortable from 'sortablejs' |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import {VXETable} from "vxe-table"; |
| | | let productGlassTypeStore = useProductGlassTypeStore() |
| | | let router=useRouter() |
| | |
| | | <script setup> |
| | | import BasicTable from '@/components/basic/BasicTable.vue' |
| | | import BasicTable from '@/components/sd/product/BasicTable.vue' |
| | | import request from "@/utils/request" |
| | | import deepClone from "@/utils/deepClone"; |
| | | import {ElMessage} from "element-plus"; |
| | |
| | | } |
| | | }, |
| | | server: { |
| | | port: 80,//端口号 |
| | | port: 5173,//端口号 |
| | | host: true,//ip地址 或 '0.0.0.0' 或 "loaclhost" |
| | | open: false, //启动后是否自动打开浏览器 |
| | | https: false, // 是否开启 https |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.util.Map; |
| | | |
| | | @RestController |
| | | @RequestMapping("/basicOtherMoney") |
| | | public class BasicOtherMoneyController { |
| | |
| | | } |
| | | |
| | | @PostMapping("save") |
| | | public Result save(String alias){ |
| | | return Result.seccess(basicOtherMoneyService.save(alias)); |
| | | public Result save(@RequestBody Map<String,String> alias){ |
| | | return Result.seccess(basicOtherMoneyService.save(alias.get("alias"))); |
| | | } |
| | | |
| | | } |
| | |
| | | package com.example.erp.service.sd; |
| | | |
| | | import com.baomidou.dynamic.datasource.annotation.DS; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.example.erp.entity.sd.BasicOtherMoney; |
| | | import com.example.erp.mapper.sd.BasicOtherMoneyMapper; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | return basicOtherMoneyMapper.deleteById(id); |
| | | } |
| | | |
| | | public int save(String alias) { |
| | | BasicOtherMoney basicOtherMoney = new BasicOtherMoney(); |
| | | basicOtherMoney.setAlias(alias); |
| | | return basicOtherMoneyMapper.insert(basicOtherMoney); |
| | | public boolean save(String alias) { |
| | | //判断是否已经存在 |
| | | QueryWrapper<BasicOtherMoney> queryWrapperByName = new QueryWrapper<>(); |
| | | queryWrapperByName.eq("alias", alias); |
| | | int count = Math.toIntExact(basicOtherMoneyMapper.selectCount(queryWrapperByName)); |
| | | if(count>0){ |
| | | return false; |
| | | } |
| | | |
| | | //查询最大的列名 |
| | | QueryWrapper<BasicOtherMoney> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.orderByDesc("id"); |
| | | List<BasicOtherMoney> basicOtherMoneyList = basicOtherMoneyMapper.selectList(queryWrapper); |
| | | //超过100条不执行 |
| | | if(basicOtherMoneyList.size()==100){ |
| | | return false; |
| | | } |
| | | |
| | | BasicOtherMoney basicOtherMoney = basicOtherMoneyList.get(0); |
| | | String getColumn = basicOtherMoney.getColumn()==null?"0":basicOtherMoney.getColumn().replace("M",""); |
| | | int columnNum = Integer.parseInt(getColumn)+1; |
| | | BasicOtherMoney newBasicOtherMoney = new BasicOtherMoney(); |
| | | newBasicOtherMoney.setColumn("M"+String.format("%02d", columnNum)); |
| | | newBasicOtherMoney.setAlias(alias); |
| | | basicOtherMoneyMapper.insert(newBasicOtherMoney); |
| | | return true; |
| | | } |
| | | } |
| | |
| | | <mapper namespace="com.example.erp.mapper.sd.OrderOtherMoneyMapper"> |
| | | <select id="findById"> |
| | | select |
| | | a.*, |
| | | b.alias |
| | | a.order_id, |
| | | a.`column`, |
| | | a.quantity, |
| | | a.price, |
| | | a.money, |
| | | a.create_time, |
| | | b.alias, |
| | | b.id |
| | | from order_other_money as a |
| | | left join basic_other_money as b |
| | | on a.`column` = b.`column` |
| | |
| | | <mapper namespace="com.example.erp.mapper.sd.OrderOtherMoneyMapper"> |
| | | <select id="findById"> |
| | | select |
| | | a.*, |
| | | b.alias |
| | | a.order_id, |
| | | a.`column`, |
| | | a.quantity, |
| | | a.price, |
| | | a.money, |
| | | a.create_time, |
| | | b.alias, |
| | | b.id |
| | | from order_other_money as a |
| | | left join basic_other_money as b |
| | | on a.`column` = b.`column` |