页面优化

main
wangmeng 2 months ago
parent 6703dd0dc4
commit 4b8c37a9b7
  1. 2
      src/App.vue
  2. 2
      src/api/approval/approvalDetails.js
  3. 6
      src/background.js
  4. 4
      src/option/system/user.js
  5. 1
      src/option/user/info.js
  6. 3
      src/store/modules/order.js
  7. 2
      src/styles/element-ui.scss
  8. 40
      src/views/approval/approvalDetails.vue
  9. 4
      src/views/authority/role.vue
  10. 8
      src/views/customer/index.vue
  11. 63
      src/views/order/AddtoTemplate.vue
  12. 62
      src/views/order/ProjectProductEdit.vue
  13. 8
      src/views/order/addRemittanceRecord.vue
  14. 10
      src/views/order/bankReceiptDetail.vue
  15. 11
      src/views/order/category.vue
  16. 5
      src/views/order/month.vue
  17. 49
      src/views/order/orderAddEdit.vue
  18. 4
      src/views/order/orderChangeLog.vue
  19. 217
      src/views/order/orderList.vue
  20. 6
      src/views/order/orderListFinance.vue
  21. 8
      src/views/order/remittanceRecord.vue
  22. 9
      src/views/order/subcategory.vue
  23. 4
      src/views/order/year.vue
  24. 8
      src/views/product/add/add.vue
  25. 8
      src/views/product/add/category.vue
  26. 8
      src/views/product/add/edit.vue
  27. 12
      src/views/product/add/exchangeRate.vue
  28. 50
      src/views/product/add/productCostPrice.vue
  29. 8
      src/views/product/add/subcategory.vue
  30. 1
      src/views/system/userinfo.vue
  31. 8
      src/views/wel/index.vue

@ -122,4 +122,6 @@ export default {
background-color: #3176FD !important;
}
</style>

@ -41,4 +41,4 @@ export const getExchangeRateList = (params) => {
method: 'get',
params: params
})
}
}

@ -17,7 +17,9 @@ protocol.registerSchemesAsPrivileged([
let mainWindow = null;
ipcMain.on('window-minimize', () => {
mainWindow.minimize();
if (mainWindow) {
mainWindow.minimize();
}
});
ipcMain.on('window-maximize', () => {
@ -47,6 +49,8 @@ async function createWindow() {
}
})
mainWindow = win;
// 移除菜单栏(关键代码)
Menu.setApplicationMenu(null)

@ -31,6 +31,7 @@ export const userOption = (safe) => {
viewBtn: true,
dialogType: 'drawer',
dialogClickModal: false,
searchLabelWidth: 110,
column: [
{
label: '登录账号',
@ -95,6 +96,7 @@ export const userOption = (safe) => {
label: '基础信息',
prop: 'baseInfo',
icon: 'el-icon-user-solid',
labelWidth: 120,
column: [
{
label: '所属租户',
@ -170,6 +172,7 @@ export const userOption = (safe) => {
label: '详细信息',
prop: 'detailInfo',
icon: 'el-icon-s-order',
labelWidth: 120,
column: [
{
label: '用户简称',
@ -251,6 +254,7 @@ export const userOption = (safe) => {
label: '职责信息',
prop: 'dutyInfo',
icon: 'el-icon-s-custom',
labelWidth: 120,
column: [
{
label: '用户编号',

@ -47,6 +47,7 @@ export default {
{
label: '修改密码',
prop: 'password',
labelWidth: 150,
column: [{
label: '原密码',
span: 12,

@ -30,6 +30,7 @@ const order = {
selectedSubcategoryIds: [],
leftTableData: [],
rightTableData: [],
allProductData:[]
}
},
getters: {
@ -154,7 +155,7 @@ const order = {
subcategoryId: '',
selectedSubcategoryIds: [],
leftTableData: [],
rightTableData: []
rightTableData: [],
};
},
// 设置临时离开标记

@ -221,7 +221,7 @@ font-size: 1.458vw;
/* 弹窗内容区样式 */
.el-message-box__content {
padding: 1.04vw 0 !important;
padding: 1.04vw 1.04vw !important;
}

@ -17,11 +17,11 @@
<el-col :span="12">
<div class="info-item">
<span class="label">订单编号:</span>
<span class="value">{{ orderData.code || "" }}</span>
<span class="value">{{ orderData.code || "-" }}</span>
</div>
<div class="info-item">
<span class="label">订单名称:</span>
<span class="value">{{ orderData.name || "" }}</span>
<span class="value">{{ orderData.name || "-" }}</span>
</div>
<div class="info-item">
<span class="label">客户公司名称:</span>
@ -54,17 +54,23 @@
<el-col :span="12">
<div class="info-item">
<span class="label">公司指导价:</span>
<span class="value">{{ formatNumber(orderData.standardPrice) }}</span>
<span class="value">{{ formatNumber(orderData.standardPrice) }}<span style="margin-left: 4px;">
</span></span>
</div>
<div class="info-item">
<span class="label">销售价:</span>
<span class="value">{{ formatNumber(orderData.sellingPrice) }}</span>
<span class="value">{{ formatNumber(orderData.sellingPrice) }}<span style="margin-left: 4px;">
</span></span>
</div>
<!-- 分成金额 -->
<div class="info-item formula">
<span class="label">分成金额:</span>
<span class="value">
<span class="value">{{ formatNumber(orderData.splitPrice) }}</span>
<span class="value">{{ formatNumber(orderData.splitPrice) }}<span style="margin-left: 4px;">
</span></span>
</span>
</div>
<div class="info-item">
@ -73,11 +79,13 @@
<el-input
v-model="orderData.discountAmount"
:disabled="isDisabled"
style="width: 10vw"
style="width: 14vw"
placeholder="请输入"
@focus="handleAmountFocus('discountAmount')"
@blur="formatAmountBlur('discountAmount')"
/>
/><span style="margin-left: 4px;">
</span>
</span>
</div>
<!-- 提成金额 -->
@ -87,11 +95,14 @@
<el-input
v-model="orderData.commissionPrice"
disabled
style="width: 10vw"
style="width: 14vw"
placeholder="请输入"
@blur="formatInput('commissionRate')"
/>
/>
<span style="margin-left: 4px;">
</span>
</span>
</div>
<div class="info-item">
@ -100,11 +111,12 @@
<el-input
v-model="orderData.commissionRate"
placeholder="请输入"
style="width: 10vw"
style="width: 14vw"
:disabled="isDisabled"
@blur="formatRateBlur"
@input="calcCommissionPrice"
/>%
/>
<span style="margin-left: 10px">%</span>
</span>
</div>
<div class="info-item" v-if="orderData.monetaryUnit !=='CNY'">
@ -136,7 +148,7 @@
:key="index"
>
<div class="fee-item">
<span class="label">费用类别</span>
<span class="label">费用类别:</span>
<el-input
v-model="fee.type"
:placeholder="isDisabled ? fee.type : '请输入费用的类目名称'"
@ -145,7 +157,7 @@
/>
</div>
<div class="fee-item">
<span class="label">费用金额</span>
<span class="label">费用金额:</span>
<el-input
v-model="fee.price"
:placeholder="isDisabled ? fee.price : '请输入费用金额'"
@ -465,7 +477,7 @@ formatToTwoDecimal(num) {
formatNumber(num) {
// nullundefined"-"0
if (num === "-" || num === "" || num === null || num === undefined) {
return "0.00"; // 0.00"-"
return "-"; // 0.00"-"
}
// 0
if (num === 0 || num === "0") {

@ -144,8 +144,8 @@ import {validatenull} from "@/util/validate";
index: true,
selection: true,
viewBtn: true,
labelWidth: 120,
searchLabelWidth: 120,
labelWidth: 170,
searchLabelWidth: 170,
menuWidth: 350,
dialogWidth: 600,
dialogClickModal: false,

@ -12,12 +12,12 @@
>
<el-row>
<el-col :span="8" >
<el-form-item style="margin-right:5px;" label="客户名称" prop="name">
<el-form-item style="margin-right:5px;" label="客户名称:" prop="name">
<el-input placeholder="客户名称" v-model="searchForm.companyName" ></el-input>
</el-form-item>
</el-col>
<el-col :span="8" >
<el-form-item style="margin-right:5px;" label="所属国家" prop="name">
<el-form-item style="margin-right:5px;" label="所属国家:" prop="name">
<!-- <el-input placeholder="所属国家" v-model="searchForm.name" ></el-input> -->
<el-select v-model="searchForm.country" placeholder="请选择所属国家">
<el-option v-for="item in countryList" :key="item.id" :value="item.dictKey" :label="item.dictValue"></el-option>
@ -25,14 +25,14 @@
</el-form-item>
</el-col>
<el-col :span="8" >
<el-form-item style="margin-right:5px;" label="客户联系人" prop="contactName">
<el-form-item style="margin-right:5px;" label="客户联系人:" prop="contactName">
<el-input placeholder="客户联系人" v-model="searchForm.contactName" ></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8" >
<el-form-item style="margin-right:5px;" label="创建人" prop="createUserName">
<el-form-item style="margin-right:5px;" label="创建人:" prop="createUserName">
<el-input placeholder="创建人" v-model="searchForm.createUserName" ></el-input>
</el-form-item>
</el-col>

@ -1,5 +1,5 @@
<template>
<div class="container">
<div class="container" v-if="!loading">
<!-- 页面头部信息面包屑 -->
<basic-crumb></basic-crumb>
@ -265,14 +265,16 @@ export default {
remarkCn: item.remarkCn || item.bizRemark || ""
}));
// console.log("", newProductData);
const currentCategoryProductIds = newProductData.map(item => item.id);
const filteredRightData = this.rightTableData.filter(item => {
return currentCategoryProductIds.includes(item.productId || item.id);
});
//
const allSelectedProducts = this.getProductSelectState.allProductData || [];
const filteredRightData = allSelectedProducts.filter(item => {
return item.catalogTwoId === newSubcategoryId;
});
// console.log("rightTableData",this.rightTableData)
// console.log("filteredRightData",filteredRightData)
console.log("filteredRightData",filteredRightData)
if (newProductData.length === 0) {
this.$message.info(`小类ID:${newSubcategoryId} 下暂无产品`);
//
@ -281,19 +283,21 @@ export default {
}
// 2.
const existRightIds = this.rightTableData.map(item => item.id ||item.productId );
const existRightIds = filteredRightData.map(item => item.id ||item.productId );
const uniqueNewProducts = newProductData.filter(item => {
return !existRightIds.includes(item.id || item.productId);
});
console.log("existRightIds",existRightIds)
console.log("this.rightTableData",this.rightTableData)
console.log("uniqueNewProducts左侧",uniqueNewProducts)
// console.log("existRightIds",existRightIds)
// console.log("this.rightTableData",this.rightTableData)
// console.log("uniqueNewProducts",uniqueNewProducts)
// 3
// allProductData
await this.updateProductSelectState({
leftTableData: uniqueNewProducts,
rightTableData: filteredRightData,
subcategoryId: newSubcategoryId,
// allProductData: allSelectedProducts,
selectedSubcategoryIds: [newSubcategoryId]
});
@ -303,6 +307,7 @@ export default {
// 5.
this.resetIndex();
this.loading = false;
// this.$message.success(` ${uniqueNewProducts.length} `);
} catch (error) {
console.error("追加小类产品失败:", error);
@ -360,6 +365,7 @@ export default {
// 1. Vuex
let newLeftData = [...this.leftTableData];
let newRightData = [...this.rightTableData];
const currentAllProductData = [...this.getProductSelectState.allProductData || []];
// 2.
this.leftSelectedRows.forEach((row) => {
@ -456,20 +462,45 @@ export default {
}
});
},
//
mergeAndDeduplicate(arr) {
const idNameMap = new Map();
arr.forEach(item => {
const key = `${String(item.id || item.productId)}_${String(item.nameCn || "")}`;
idNameMap.set(key, item);
});
return Array.from(idNameMap.values());
},
// ID
async handleSave() {
if (this.rightTableData.length === 0) {
this.$message.warning("请至少选择一个产品");
return;
}
// console.log("this.rightTableDataQQQQ", this.rightTableData);
// 2. newList+
const allSelectedProducts = this.getProductSelectState.allProductData || []; //
const currentSubcategoryId = this.getProductSelectState.subcategoryId; // ID
// 1
const filteredOldData = allSelectedProducts.filter(item => {
return String(item.catalogTwoId) !== String(currentSubcategoryId);
});
// 2 +
const newList = [...filteredOldData, ...this.rightTableData];
// 3ID+
const finalList = this.mergeAndDeduplicate(newList);
try {
// ID +
const queryData = {
sort: this.$route.query.sort,
productList: this.rightTableData.map((item) => ({
productList: finalList.map((item) => ({
productId: item.id ||item.productId, //id
catalogId: item.catalogId,
// catalogId: item.catalogId,
catalogOne: item.catalogOne, //
catalogTwo: item.catalogTwo, //
code: item.code, //
@ -479,9 +510,11 @@ export default {
standardPrice: item.standardPrice, //
remarks: item.remarkCn, //
multiple:item.multiple ,//
num: 1, //
num:item.num || 1, //
sellingPrice:item.sellingPrice || "",
splitPrice:item.splitPrice || "",
splitPrice: item.splitPrice || "",
catalogOneId:item.catalogOneId,
catalogTwoId:item.catalogTwoId
})),
};
console.log("queryDataQQQQ", queryData);

@ -54,18 +54,27 @@
'background-color': '#f5f7fa',
}"
>
<el-table-column prop="code" label="产品编号" width="190" />
<el-table-column prop="catalogOne" label="产品大类" />
<el-table-column prop="catalogTwo" label="产品小类" />
<el-table-column prop="name" label="产品名称" />
<el-table-column prop="spec" label="规格说明" width="170" />
<el-table-column width="50" align="center" v-if="!isViewMode">
<template slot-scope="scope">
<div @click="handleDelete(scope.$index)"
style="width:30px;height: 30px;background: #f56c6c;border-radius: 45%;cursor: pointer;display: flex;align-items: center;justify-content: center;">
<i style="color:#fff;font-size: 20px;" class="el-icon-delete"></i>
</div>
</template>
</el-table-column>
<el-table-column prop="code" label="产品编号" width="150" />
<el-table-column prop="catalogOne" label="产品大类" />
<el-table-column prop="catalogTwo" label="产品小类" />
<el-table-column prop="name" label="产品名称" width="140"/>
<el-table-column prop="spec" label="规格说明" width="120" />
<el-table-column prop="unit" label="单位" width="80" />
<el-table-column label="公司指导价" width="180">
<el-table-column label="公司指导价" width="170">
<template slot-scope="scope">
<span>{{ formatPrice(scope.row.standardPrice) }}</span>
<span class="text-right">{{ formatPrice(scope.row.standardPrice) }}</span>
</template>
</el-table-column>
<el-table-column prop="num" label="数量" width="160">
<el-table-column prop="num" label="数量" width="140">
<template slot-scope="scope">
<el-form-item
:prop="`productList[${scope.$index}].num`"
@ -76,13 +85,13 @@
v-model.number="productForm.productList[scope.$index].num"
placeholder="请输入"
:disabled="isViewMode"
style="width: 120px"
style="width: 110px"
@blur="handleQuantityChange(scope.row, scope.$index)"
/>
</el-form-item>
</template>
</el-table-column>
<el-table-column label="销售价" width="200">
<el-table-column label="销售价" width="170">
<template slot-scope="scope">
<el-form-item
:prop="`productList[${scope.$index}].sellingPrice`"
@ -102,7 +111,7 @@
<el-table-column label="分成金额" width="180">
<div class="tip">=(销售价-指导价)/2*数量</div>
<template slot-scope="scope">
<span>{{ formatPrice(scope.row.splitPrice) }}</span>
<span class="text-right">{{ formatPrice(scope.row.splitPrice) }}</span>
</template>
</el-table-column>
<el-table-column prop="remarks" label="备注" />
@ -199,6 +208,31 @@ export default {
"clearOrderProductList",
"setOrderProductEdit"
]),
//
handleDelete(index) {
// if (this.productForm.productList.length <= 1) {
// this.$message.warning("");
// return;
// }
this.$confirm('确定要删除该产品吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 1.
this.productForm.productList.splice(index, 1);
// 2. Vuex
this.vuexProductList = [...this.productForm.productList];
// 3.
this.$nextTick(() => {
if (this.$refs.productForm) {
//
this.$refs.productForm.clearValidate();
}
});
this.$message.success('删除成功');
})
},
// 1
formatPrice(price) {
if (!price || isNaN(Number(price))) {
@ -296,6 +330,7 @@ export default {
const queryData = {
productList: this.productForm.productList,
};
console.log("queryDatawww",queryData)
//
this.$router.push({
@ -515,5 +550,10 @@ export default {
text-align: center;
color: #f56c6c;
}
.text-right {
display: block;
text-align: right;
padding-right: 10px;
}
}
</style>

@ -15,24 +15,24 @@
<el-row :gutter="20">
<!-- 订单编号 - 占12个栅格 -->
<el-col :span="8">
<el-form-item label="订单编号">
<el-form-item label="订单编号:">
<el-input v-model="orderForm.code" disabled style="width:100%"> </el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="订单总金额">
<el-form-item label="订单总金额:">
<el-input :value="formatNumber(orderForm.sellingPrice)" disabled style="width:100%"></el-input>
</el-form-item>
</el-col>
<!-- 已汇金额 - 占4个栅格 -->
<el-col :span="8">
<el-form-item label="已汇金额">
<el-form-item label="已汇金额:">
<el-input :value="formatNumber(orderForm.remittedAmount)" disabled style="width:100%"></el-input>
</el-form-item>
</el-col>
<!-- 待汇金额 - 占4个栅格 -->
<el-col :span="8">
<el-form-item label="待汇金额">
<el-form-item label="待汇金额:">
<el-input :value="formatNumber(orderForm.unremittedAmount)" disabled style="width:100%"></el-input>
</el-form-item>
</el-col>

@ -35,7 +35,7 @@
<div>
<el-image
:src="item.url"
style="width: 200px; height: 160px; object-fit: cover"
style="width: 13vw; height: 10.42vw; object-fit: cover"
:alt="`${item.name}水单`"
@click="openFloatImage(item.url, item.name)"
>
@ -111,7 +111,7 @@ export default {
//
const userRoles = this.userInfo.role_name.split(',').map(role => role.trim())
//
const allowedRoles = ['administrator', 'jinchao',]
const allowedRoles = ['administrator', 'jinchao','sale']
//
return userRoles.some(role => allowedRoles.includes(role))
},
@ -193,7 +193,7 @@ export default {
try {
await this.$confirm(
"确定要删除此水单吗?删除后将无法恢复!",
"删除确认",
"提示",
{
type: "warning",
confirmButtonText: "确认",
@ -205,13 +205,11 @@ export default {
if (res.data.code === 200) {
this.$message.success("水单删除成功");
this.getReceiptList();
} else {
this.$message.error("删除失败:" + (res.data.msg || "接口返回异常"));
}
} catch (err) {
if (err !== "cancel") {
console.error("删除水单失败:", err);
this.$message.error("删除水单异常,请重试");
// this.$message.error("");
}
}
},

@ -14,10 +14,10 @@
</div>
<el-dialog append-to-body :title="dialogTitle" :visible.sync="formDialog" width="550px">
<el-form ref="addForm" :model="formData" label-width="5vw" :rules="formRules">
<el-form-item label="大类" prop="name">
<el-form-item label="大类:" prop="name">
<el-input placeholder="请输入大类名称" v-model="formData.name"></el-input>
</el-form-item>
<el-form-item label="简称" prop="shortName">
<el-form-item label="简称:" prop="shortName">
<el-input placeholder="请输入简称" v-model="formData.shortName"></el-input>
</el-form-item>
</el-form>
@ -84,7 +84,7 @@ export default {
console.log("routeDataN",routeDataN)
let arr = [
...routeDataN,
]
this.$store.commit('SET_ROUTE_DATA', arr)
@ -322,12 +322,15 @@ export default {
align-items: center;
justify-content: center;
color: #fff;
font-size: 2.5vw;
font-size: 2.4vw;
text-align: center;
cursor: pointer;
&:hover {
background: #ecb76c;
}
padding: 0.41vw;
box-sizing: border-box !important;
}
} //
.context-menu {

@ -227,12 +227,15 @@ export default {
align-items: center;
justify-content: center;
color: #fff;
font-size: 2.5vw;
font-size: 2.4vw;
text-align: center;
cursor: pointer;
&:hover {
background: #ecb76c;
}
box-sizing: border-box !important;
padding: 0.41vw;
}
}
//

@ -46,13 +46,13 @@
<el-row :gutter="20">
<!-- 订单编号 -->
<el-col :span="8">
<el-form-item label="订单编号" label-width="11vw">
<el-form-item label="订单编号:" label-width="11vw">
<el-input v-model="vuexTemp.form.code" disabled style="width: 100%" />
</el-form-item>
</el-col>
<!-- 订单名称 -->
<el-col :span="8">
<el-form-item label="订单名称" label-width="11vw" prop="name">
<el-form-item label="订单名称:" label-width="11vw" prop="name">
<el-input
:disabled="isViewMode"
v-model="orderName"
@ -64,7 +64,7 @@
<!-- 客户公司名称 -->
<el-col :span="8">
<el-form-item
label="客户公司名称"
label="客户公司名称:"
label-width="11vw"
prop="customerCode"
>
@ -89,7 +89,7 @@
<!-- 交货日期 -->
<el-col :span="8">
<el-form-item
label="交货日期"
label="交货日期:"
label-width="11vw"
prop="deliveryDate"
>
@ -107,7 +107,7 @@
<!-- 货币单位 -->
<el-col :span="8">
<el-form-item
label="货币单位"
label="货币单位:"
label-width="11vw"
prop="monetaryUnit"
>
@ -127,7 +127,7 @@
</el-col>
<!-- 订单指导价 -->
<el-col :span="8">
<el-form-item label="订单指导价" label-width="11vw">
<el-form-item label="订单指导价:" label-width="11vw">
<el-input
:value="formatPrice(vuexTemp.form.standardPrice)"
disabled
@ -142,7 +142,7 @@
<!-- 订单销售价 -->
<el-col :span="8">
<el-form-item
label="订单销售价"
label="订单销售价:"
label-width="11vw"
prop="sellingPrice"
>
@ -157,7 +157,7 @@
<!-- 订单分成价 -->
<el-col :span="8">
<el-form-item
label="订单分成价"
label="订单分成价:"
label-width="11vw"
prop="splitPrice"
>
@ -171,7 +171,7 @@
</el-col>
<!-- 申请优惠金额 -->
<el-col :span="8">
<el-form-item label="申请优惠金额" label-width="11vw" prop="discountAmount">
<el-form-item label="申请优惠金额:" label-width="11vw" prop="discountAmount">
<el-input
v-model="discountAmount"
placeholder="请输入优惠金额"
@ -237,17 +237,17 @@
</el-table-column>
<el-table-column label="项目指导价" align="center">
<template slot-scope="scope">
<span>{{ formatPrice(scope.row.standardPrice) }}</span>
<span class="text-right">{{ formatPrice(scope.row.standardPrice) }}</span>
</template>
</el-table-column>
<el-table-column label="项目销售价" align="center">
<template slot-scope="scope">
<span>{{ formatPrice(scope.row.sellingPrice) }}</span>
<span class="text-right">{{ formatPrice(scope.row.sellingPrice) }}</span>
</template>
</el-table-column>
<el-table-column label="项目分成价" align="center">
<template slot-scope="scope">
<span>{{ formatPrice(scope.row.splitPrice) }}</span>
<span class="text-right">{{ formatPrice(scope.row.splitPrice) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300" align="center" fixed="right">
@ -294,11 +294,11 @@
size="small"
>
<!-- 项目名称 -->
<el-form-item label="项目名称" prop="name">
<el-form-item label="项目名称:" prop="name">
<el-input v-model="itemForm.name" placeholder="请输入项目名称" />
</el-form-item>
<!-- 项目数量 -->
<el-form-item label="项目数量" prop="num">
<el-form-item label="项目数量:" prop="num">
<el-input
v-model.number="itemForm.num"
type="number"
@ -307,7 +307,7 @@
/>
</el-form-item>
<!-- 单位 -->
<el-form-item label="单位" prop="unit">
<el-form-item label="单位:" prop="unit">
<el-input v-model="itemForm.unit" placeholder="请输入单位" />
</el-form-item>
</el-form>
@ -838,7 +838,7 @@ calculateTotalStandardPrice() {
},
// Vuex
handleCancel() {
this.$confirm("确定放弃编辑并返回吗?未保存内容将丢失", "提示")
this.$confirm("您确定要取消编辑吗?所有未保存的更改将会丢失。", "提示" ,{ type: "warning" })
.then(() => {
this.clearTempOrderInfo(); // Vuex
this.$router.push("/order");
@ -942,19 +942,24 @@ calculateTotalStandardPrice() {
remarkCn: item.remarks, //
standardPrice: item.standardPrice, //
multiple: item.multiple, //
categoryId: item.categoryId, // ID
// categoryId: item.categoryId, // ID
catalogOne: item.catalogOne, //
catalogTwo: item.catalogTwo, //
code: item.code, //
sellingPrice:item.sellingPrice || "",
splitPrice:item.splitPrice || ""
splitPrice: item.splitPrice || "",
catalogOneId:item.catalogOneId,
catalogTwoId: item.catalogTwoId,
num:item.num
}));
// 2. VuexproductSelectStaterightTableData
this.updateProductSelectState({
customerId: this.vuexTemp.form.customerCode, // ID
rightTableData: JSON.parse(JSON.stringify(formattedProducts)), //
rightTableData: [],
allProductData: JSON.parse(JSON.stringify(formattedProducts)), //
subcategoryId: '',
selectedSubcategoryIds: [],
leftTableData: []
@ -1208,7 +1213,11 @@ calculateTotalStandardPrice() {
text-align: center;
}
}
.text-right {
display: block;
text-align: right;
padding-right: 10px;
}
.top-buttons {
text-align: right;
margin-bottom: 15px;

@ -203,7 +203,7 @@
:data="system.productInfoCompare"
style="width: 100%"
:header-cell-style="{ background: '#f5f7fa','text-align': 'center', }"
border
:cell-style="{ 'text-align': 'center' }"
height="300px"
>
@ -775,7 +775,7 @@ compareProducts(beforeProducts = [], afterProducts = []) {
//
.value {
color: #303133;
// color: #303133;
// changed
&.changed {

@ -7,7 +7,7 @@
<el-form :model="searchForm" class="search-form" @submit.prevent>
<el-row gutter="15">
<el-col :span="6">
<el-form-item label="订单编号" label-width="140px" prop="code">
<el-form-item label="订单编号:" label-width="140px" prop="code">
<el-input
v-model="searchForm.code"
placeholder="请输入"
@ -16,7 +16,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="订单名称" label-width="140px" prop="name">
<el-form-item label="订单名称:" label-width="140px" prop="name">
<el-input
v-model="searchForm.name"
placeholder="请输入"
@ -26,7 +26,7 @@
</el-col>
<el-col :span="6">
<el-form-item
label="客户名称"
label="客户名称:"
label-width="140px"
prop="customerName"
>
@ -46,7 +46,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="状态" label-width="140px" prop="status">
<el-form-item label="状态:" label-width="140px" prop="status">
<el-select
v-model="searchForm.status"
placeholder="请选择"
@ -67,7 +67,7 @@
<el-row :gutter="15">
<el-col :span="6">
<el-form-item
label="交货日期"
label="交货日期:"
label-width="140px"
prop="deliveryDate"
>
@ -148,33 +148,43 @@
<el-table-column label="客户公司名称" prop="customerName" width="220" />
<el-table-column label="交货日期" prop="deliveryDate" width="160" />
<!-- 销售价千位分隔符格式化 -->
<el-table-column label="销售价(元)" width="200">
<el-table-column label="销售价(元)" width="220">
<template #default="scope">
{{ formatPrice(scope.row.sellingPrice) }}
<span class="text-right">
{{ formatPrice(scope.row.sellingPrice) }}
</span>
</template>
</el-table-column>
<!-- 分成金额千位分隔符格式化 -->
<el-table-column label="分成金额(元)" width="220">
<template #default="scope">
{{ formatPrice(scope.row.splitPrice) }}
<span class="text-right">
{{ formatPrice(scope.row.splitPrice) }}
</span>
</template>
</el-table-column>
<!-- 合同价千位分隔符格式化 -->
<el-table-column label="合同价" width="150">
<el-table-column label="合同价" width="220">
<template #default="scope">
{{ formatPrice(scope.row.contractPrice) }}
<span class="text-right">
{{ formatPrice(scope.row.contractPrice) }}
</span>
</template>
</el-table-column>
<!-- 已汇金额千位分隔符格式化 -->
<el-table-column label="已汇金额" width="150">
<el-table-column label="已汇金额" width="220">
<template #default="scope">
{{ formatPrice(scope.row.remittedAmount) }}
<span class="text-right">
{{ formatPrice(scope.row.remittedAmount) }}
</span>
</template>
</el-table-column>
<!-- 待汇金额千位分隔符格式化 -->
<el-table-column label="待汇金额" width="150">
<el-table-column label="待汇金额" width="220">
<template #default="scope">
{{ formatPrice(scope.row.unremittedAmount) }}
<span class="text-right">
{{ formatPrice(scope.row.unremittedAmount) }}
</span>
</template>
</el-table-column>
<el-table-column label="货币单位" width="160">
@ -306,12 +316,15 @@
:visible.sync="uploadDialogVisible"
width="500px"
append-to-body
class="water-bill-upload-dialog"
>
<avue-form
ref="uploadFormRef"
:option="uploadFormOption"
v-model="uploadForm"
@submit="handleUploadSubmit"
:upload-before="uploadBefore"
:upload-error="uploadError"
></avue-form>
<div slot="footer" class="dialog-footer">
@ -400,7 +413,6 @@ export default {
},
monetaryUnitList: [],
uploadFormOption: {
// Avue
submitBtn: false,
emptyBtn: false,
labelWidth: 140,
@ -421,33 +433,34 @@ export default {
{
label: '上传文件',
type: 'upload',
listType: 'picture-img',
listType: 'picture-img',
accept: 'image/png, image/jpeg',
propsHttp: {
res: 'data',
url: 'link',
},
canvasOption: {
text: ' ',
ratio: 0.1
},
// canvasOption: {
// text: ' ',
// ratio: 0.1
// },
action: '/api/blade-resource/oss/endpoint/put-file-attach',
tip: '只能上传jpg/png图片,且不超过500kb',
span: 24,
tip: '只能上传jpg/png图片,且不超过3M',
fileSize: 3072,
// fileType: 'img',
// loadText: '',
span: 24,
limit: 1,
row: true,
prop: 'url',
rules: [
{ required: true, message: "请上传文件", trigger: "blur" },
{ validator: (rule, value, callback) => this.validateFile(value, callback), trigger: "change" }
]
}
]
},
// Avue Form
uploadForm: {
name: "",
url: ""
}
};
},
created() {},
@ -475,6 +488,9 @@ export default {
},
methods: {
// 🌟 +
formatPrice(price) {
// 0
@ -622,13 +638,71 @@ export default {
this.resetUpload();
},
//
handleExceed(files, fileList) {
// this.$message.warning(`1`);
},
uploadBefore(file, done, loading, column) {
console.log("上传前校验文件:", "done", done, "loading:",loading);
if (!file) {
this.$message.error("未选择文件");
done(false);
return false;
}
//
const isJPG = file.type === 'image/jpeg';
const isPNG = file.type === 'image/png';
if (!isJPG && !isPNG) {
this.$message.error('只能上传 JPG 或 PNG 图片!');
this.uploadForm.url = ''
done(false);
return false;
}
// 3MB
const isLt3M = file.size / 1024 / 1024 < 3;
console.log("文件大小(字节):", file.size, "是否小于3M:", isLt3M);
if (!isLt3M) {
this.$message.error('图片大小不能超过 3MB!');
done(false);
return false;
}
//
done();
},
uploadError(error, column) {
console.error('上传失败详情:', error);
this.uploadForm.url = ''
//
if (error === 'size') {
this.$message.error('图片大小不能超过3MB!');
} else if (error === 'type') {
this.$message.error('仅支持上传JPG/PNG格式图片!');
} else if (error && error.message) {
this.$message.error('上传失败:' + error.message);
} else {
this.$message.error('上传失败,请重试');
}
},
// uploadRemove(file, column) {
// console.log("", file);
// this.uploadForm.url = '';
// this.$message.success('');
// },
// uploadExceed(limit, files, fileList, column) {
// this.$message.warning(` ${limit} `);
// },
//
validateFile(value, callback) {
if (!value) {
callback(new Error('请上传文件'));
} else {
callback();
}
},
//
resetUpload() {
@ -944,67 +1018,28 @@ export default {
// color: #ccc;
border-radius: 4px;
}
.text-right {
display: block;
text-align: right;
padding-right: 10px;
}
::v-deep .avue-form .el-form-item .el-upload__tip {
font-size: 16px !important;
// font-weight: 500; //
}
}
</style>
<style lang="scss">
//
.avatar-uploader-wrap {
width: 178px;
height: 178px;
}
.avatar-uploader .el-upload {
width: 178px;
height: 178px;
border: 1px dashed #d9d9d9;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
background: #fbfdff;
}
.avatar-uploader .el-upload:hover {
border-color: #409eff;
}
.upload-icon-container {
width: 178px;
height: 178px;
display: flex;
align-items: center;
justify-content: center;
}
.avatar-uploader-icon {
font-size: 28px;
color: #8c939d;
}
.avatar-container {
width: 178px;
height: 178px;
position: relative; //
}
.avatar {
width: 100%;
height: 100%;
display: block;
// object-fit: cover; //
}
//
.avatar-delete {
position: absolute;
top: 0;
right: 0;
width: 30px;
height: 30px;
line-height: 30px;
text-align: center;
background: rgba(0, 0, 0, 0.5);
color: #fff;
cursor: pointer;
display: none; //
border-radius: 0 6px 0 0;
}
.avatar-container:hover .avatar-delete {
display: block; //
}
.water-bill-upload-dialog {
.el-dialog__body {
padding: 15px 20px !important;
}
//
.el-upload__tip {
font-size: 1vw !important;
}
}
</style>

@ -10,7 +10,7 @@
<el-row :gutter="5">
<!-- 业务员 - 占8列 -->
<el-col :span="7">
<el-form-item label="业务员" label-width="100px">
<el-form-item label="业务员:" label-width="100px">
<el-select
v-model="searchForm.createUserName"
placeholder="请选择"
@ -28,7 +28,7 @@
<!-- 客户公司名称 - 占8列 -->
<el-col :span="8">
<el-form-item label="客户公司名称" label-width="180px">
<el-form-item label="客户公司名称:" label-width="180px">
<el-input
v-model="searchForm.customerName"
placeholder="请输入"
@ -39,7 +39,7 @@
<!-- 状态 - 占8列 -->
<el-col :span="7">
<el-form-item label="状态" label-width="100px">
<el-form-item label="状态:" label-width="100px">
<el-select
v-model="searchForm.settleStatus"
placeholder="请选择"

@ -7,24 +7,24 @@
<el-form ref="searchForm" :model="searchForm" label-width="9vw">
<el-row>
<el-col :span="7">
<el-form-item label="订单编号">
<el-form-item label="订单编号:">
<el-input
v-model="searchForm.code"
></el-input>
</el-form-item>
</el-col>
<el-col :span="5">
<el-form-item label="订单总金额">
<el-form-item label="订单总金额:">
<el-input :value="formatNumber(searchForm.sellingPrice)" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="已汇金额">
<el-form-item label="已汇金额:">
<el-input :value="formatNumber(searchForm.remittedAmount)" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="待汇金额">
<el-form-item label="待汇金额:">
<el-input :value="formatNumber(searchForm.unremittedAmount)" disabled></el-input>
</el-form-item>
</el-col>

@ -32,13 +32,13 @@
label-width="5vw"
:rules="formRules"
>
<el-form-item label="小类" prop="name">
<el-form-item label="小类:" prop="name">
<el-input
placeholder="请输入小类名称"
v-model="addForm.name"
></el-input>
</el-form-item>
<el-form-item label="简称" prop="shortName">
<el-form-item label="简称:" prop="shortName">
<el-input placeholder="请输入简称" v-model="addForm.shortName"></el-input>
</el-form-item>
</el-form>
@ -317,12 +317,15 @@ export default {
justify-content: center;
color: #fff;
margin: 1.67vw;
font-size: 2.5vw;
font-size: 2.4vw;
text-align: center;
cursor: pointer;
&:hover {
background: #ecb76c;
}
box-sizing: border-box !important;
padding: 0.41vw;
}
}
//

@ -152,12 +152,14 @@ export default {
align-items: center;
justify-content: center;
color: #fff;
font-size: 2.5vw;
font-size: 2.4vw;
text-align: center;
cursor: pointer;
&:hover {
background: #ecb76c;
}
box-sizing: border-box !important;
padding: 0.41vw;
}
}
}

@ -9,12 +9,12 @@
<el-form ref="searchForm" :model="searchForm" label-width="160px" :rules="formRules">
<el-row>
<el-col :span="8">
<el-form-item style="margin-right:5px;" label="产品名称" prop="nameCn">
<el-form-item style="margin-right:5px;" label="产品名称:" prop="nameCn">
<el-input placeholder="产品名称" v-model="searchForm.nameCn"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item style="margin-right:5px;" label="备注" prop="bizRemark">
<el-form-item style="margin-right:5px;" label="备注:" prop="bizRemark">
<el-input placeholder="备注" v-model="searchForm.bizRemark"></el-input>
</el-form-item>
</el-col>
@ -140,12 +140,12 @@
</div>
<el-dialog append-to-body title="指定业务员" :visible.sync="addDialog" width="550px">
<el-form ref="addForm" :model="addForm" label-width="120px" :rules="formRules">
<el-form-item label="业务员" prop="saleUserId">
<el-form-item label="业务员:" prop="saleUserId">
<el-select v-model="addForm.saleUserId" placeholder="请选择业务员" @change="changeSale">
<el-option v-for="item in saleData" :key="item.id" :value="item.id" :label="item.realName"></el-option>
</el-select>
</el-form-item>
<el-form-item label="客户" prop="customerId">
<el-form-item label="客户:" prop="customerId">
<el-select v-model="addForm.customerId" placeholder="请选择客户">
<el-option v-for="item in customerData" :key="item.id" :value="item.id"
:label="item.companyName"></el-option>

@ -14,10 +14,10 @@
</div>
<el-dialog append-to-body :title="dialogTitle" :visible.sync="formDialog" width="600px">
<el-form ref="addForm" :model="formData" label-width="5vw" :rules="formRules">
<el-form-item label="大类" prop="name">
<el-form-item label="大类:" prop="name">
<el-input placeholder="请输入大类名称" v-model="formData.name"></el-input>
</el-form-item>
<el-form-item label="简称" prop="shortName">
<el-form-item label="简称:" prop="shortName">
<el-input placeholder="请输入简称" v-model="formData.shortName"></el-input>
</el-form-item>
</el-form>
@ -300,9 +300,11 @@ export default {
align-items: center;
justify-content: center;
color: #fff;
font-size: 2.5vw;
font-size: 2.4vw;
text-align: center;
cursor: pointer;
padding: 0.41vw;
box-sizing: border-box !important;
&:hover {
background: #ecb76c;
}

@ -20,24 +20,24 @@
>
<el-row>
<el-col :span="12">
<el-form-item label="英文名称" prop="nameEn">
<el-form-item label="英文名称:" prop="nameEn">
<el-input placeholder="请输入英文名称" v-model="addForm.nameEn" ></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="英文规格" prop="specEn">
<el-form-item label="英文规格:" prop="specEn">
<el-input placeholder="请输入英文规格" v-model="addForm.specEn" ></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="英文单位" prop="unitEn">
<el-form-item label="英文单位:" prop="unitEn">
<el-input placeholder="请输入英文单位" v-model="addForm.unitEn" ></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="英文备注" prop="remarkEn">
<el-form-item label="英文备注:" prop="remarkEn">
<el-input placeholder="请输入英文备注" v-model="addForm.remarkEn" ></el-input>
</el-form-item>
</el-col>

@ -7,7 +7,7 @@
<el-form ref="searchForm" :model="searchForm" label-width="140px">
<el-row>
<el-col :span="8">
<el-form-item label="基础货币">
<el-form-item label="基础货币:">
<!-- 基础货币下拉选择器 -->
<el-select
v-model="searchForm.baseCurrency"
@ -23,7 +23,7 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="目标货币">
<el-form-item label="目标货币:">
<!-- 目标货币下拉选择器 -->
<el-select
v-model="searchForm.targetCurrency"
@ -134,7 +134,7 @@
append-to-body
>
<el-form :model="form" label-width="9.357vw" :rules="rules" ref="formRef">
<el-form-item label="基础货币" prop="baseCurrency">
<el-form-item label="基础货币:" prop="baseCurrency">
<el-select v-model="form.baseCurrency" placeholder="请选择" :disabled="isEdit">
<el-option
v-for="item in currencyList"
@ -144,7 +144,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="目标货币" prop="targetCurrency">
<el-form-item label="目标货币:" prop="targetCurrency">
<el-select v-model="form.targetCurrency" placeholder="请选择" :disabled="isEdit">
<el-option
v-for="item in currencyList"
@ -154,7 +154,7 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item label="汇率" prop="rate">
<el-form-item label="汇率:" prop="rate">
<el-input
v-model="form.rate"
placeholder="请输入汇率"
@ -162,7 +162,7 @@
style="width: 200px"
></el-input>
</el-form-item>
<el-form-item label="备注" prop="remarks">
<el-form-item label="备注:" prop="remarks">
<el-input
v-model="form.remarks"
placeholder="请输入备注"

@ -7,7 +7,7 @@
<el-form ref="searchForm" :model="searchForm" label-width="130px">
<el-row>
<el-col :span="6">
<el-form-item style="margin-right: 5px" label="产品编号">
<el-form-item style="margin-right: 5px" label="产品编号:">
<el-input
placeholder="请输入"
v-model="searchForm.code"
@ -15,7 +15,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item style="margin-right: 5px" label="产品名称">
<el-form-item style="margin-right: 5px" label="产品名称:">
<el-input
placeholder="请输入"
v-model="searchForm.nameCn"
@ -23,7 +23,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item style="margin-right: 5px" label="产品规格">
<el-form-item style="margin-right: 5px" label="产品规格:">
<el-input
placeholder="请输入"
v-model="searchForm.specCn"
@ -31,7 +31,7 @@
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item style="margin-right: 5px" label="更新时间">
<el-form-item style="margin-right: 5px" label="更新时间:">
<el-date-picker
v-model="searchForm.updateTime"
type="datetimerange"
@ -46,10 +46,10 @@
</el-row>
<el-row>
<el-col :span="6">
<el-form-item style="margin-right: 5px" label="产品大类">
<el-form-item style="margin-right: 5px" label="产品大类:">
<el-select
v-model="searchForm.catalogOne"
placeholder="请选择产品大类"
placeholder="请选择"
@change="handleCatalogOneChange"
clearable
style="width: 100%"
@ -65,10 +65,10 @@
</el-col>
<!-- 产品小类 -->
<el-col :span="6">
<el-form-item style="margin-right: 5px" label="产品小类">
<el-form-item style="margin-right: 5px" label="产品小类:">
<el-select
v-model="searchForm.catalogTwo"
placeholder="请选择产品大类"
placeholder="请选择"
clearable
style="width: 100%"
>
@ -112,30 +112,34 @@
<el-table-column
label="产品大类"
prop="catalogOne"
width="240"
width="220"
></el-table-column>
<el-table-column
label="产品小类"
prop="catalogTwo"
width="240"
width="220"
></el-table-column>
<el-table-column
label="产品名称"
prop="nameCn"
width="260"
width="220"
></el-table-column>
<el-table-column
label="产品规格"
prop="specCn"
width="240"
width="220"
></el-table-column>
<el-table-column label="当前成本价" width="260">
<template #default="scope"> {{ formatPrice(scope.row.costPrice) }} </template>
<el-table-column label="当前成本价" width="220">
<template #default="scope">
<span class="text-right">
{{ formatPrice(scope.row.costPrice) }}
</span>
</template>
</el-table-column>
<el-table-column
@ -143,7 +147,7 @@
prop="updateTime"
width="280"
></el-table-column>
<el-table-column label="操作" width="270" fixed="right">
<el-table-column label="操作" width="240" fixed="right">
<template slot-scope="scope">
<div style="display: flex; justify-content: center">
<el-link type="primary" @click="openEditDialog(scope.row)"
@ -226,11 +230,14 @@
:style="{ minHeight: '300px',overflowY: 'auto' ,maxHeight: '720px',width:'100%'}"
fit
>
<el-table-column label="修改前价格" prop="costPriceOld" width="180">
<template #default="scope">¥ {{ formatPrice(scope.row.costPriceOld) }}</template>
<el-table-column label="修改前价格" prop="costPriceOld" width="200">
<template #default="scope"><span style="display: block; width: 100%; text-align: right; padding-right: 10px;">
¥ {{ formatPrice(scope.row.costPriceOld) }}
</span></template>
</el-table-column>
<el-table-column label="修改后价格" prop="costPrice" width="180">
<template #default="scope">¥ {{ formatPrice(scope.row.costPrice) }}</template>
<el-table-column label="修改后价格" prop="costPrice" width="200">
<template #default="scope"><span style="display: block; width: 100%; text-align: right; padding-right: 10px;">¥ {{ formatPrice(scope.row.costPrice) }}</span></template>
</el-table-column>
<el-table-column
label="修改人"
@ -644,6 +651,11 @@ export default {
margin-right: 8px;
font-size: 23px;
}
::v-deep .text-right {
display: block;
text-align: right;
padding-right: 10px;
}
}

@ -33,13 +33,13 @@
label-width="5vw"
:rules="formRules"
>
<el-form-item label="小类" prop="name">
<el-form-item label="小类:" prop="name">
<el-input
placeholder="请输入小类名称"
v-model="addForm.name"
></el-input>
</el-form-item>
<el-form-item label="简称" prop="shortName">
<el-form-item label="简称:" prop="shortName">
<el-input placeholder="请输入简称" v-model="addForm.shortName"></el-input>
</el-form-item>
</el-form>
@ -325,7 +325,9 @@ export default {
align-items: center;
justify-content: center;
color: #fff;
font-size: 2.5vw;
font-size: 2.4vw;
padding: 0.41vw;
box-sizing: border-box !important;
text-align: center;
cursor: pointer;
&:hover {

@ -3,6 +3,7 @@
<basic-container>
<basic-crumb></basic-crumb>
<avue-form :option="option"
class="user-info-form"
v-model="form"
@tab-click="handleTabClick"
@submit="handleSubmit"></avue-form>

@ -242,6 +242,9 @@ import { getToken } from '@/util/auth';
flex-direction: column;
align-items: center;
// padding-bottom: 3.13vw !important;
box-sizing: border-box !important;
.top_box{
width: 89%;
@ -333,14 +336,15 @@ import { getToken } from '@/util/auth';
display: flex;
align-items: center;
justify-content: center;
font-size: 2.5vw;
font-size: 2.3vw;
color: #fff;
// margin: 1.6vw 2.2vw;
cursor: pointer;
// padding:15px 15px !important;
text-align: center;
word-break: break-all;
// margin: ;
box-sizing: border-box !important;
padding: 0.41vw;
}
}
}

Loading…
Cancel
Save