+
{{ order.storeName }}
-
+
- 订单详情
+ 订单详情
取消订单
去支付
- 确认收货
+ 确认收货
申请售后
@@ -92,12 +90,18 @@
-
-
+
+
- {{item.reason}}
+ {{ item.reason }}
+
+
+ 取消
+ 确定
+
+
@@ -302,7 +306,9 @@ export default {
.wrapper {
margin-bottom: 40px;
}
-.box {
+.order-search-bar {
+ margin-top: 16px;
+ margin-bottom: 16px;
overflow: hidden;
}
.page-size {
@@ -373,10 +379,30 @@ export default {
}
}
- > div:nth-child(3) {
- width: 100px;
+ .order-actions {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ min-width: 100px;
+
.el-button {
- margin-bottom: 10px;
+ margin: 0;
+ min-width: 88px;
+ }
+
+ :deep(.confirm-receipt-btn) {
+ background-color: #ff9900 !important;
+ border-color: #ff9900 !important;
+ color: #fff !important;
+
+ &:hover,
+ &:focus {
+ background-color: #e68a00 !important;
+ border-color: #e68a00 !important;
+ color: #fff !important;
+ }
}
}
}
diff --git a/buyer/src/pages/home/orderCenter/OrderDetail.vue b/buyer/src/pages/home/orderCenter/OrderDetail.vue
index 8dcdb022..a273ab65 100644
--- a/buyer/src/pages/home/orderCenter/OrderDetail.vue
+++ b/buyer/src/pages/home/orderCenter/OrderDetail.vue
@@ -173,16 +173,16 @@
{{refundPriceList(goods.isRefund)}} |
{{ $filters.unitPrice(goods.refundPrice, "¥") }} |
{{ $filters.unitPrice((goods.goodsPrice * goods.num), "¥") }} |
-
+ |
申请售后
评价
投诉
@@ -239,19 +239,20 @@
{{ item.reason }}
+
+
+ 取消
+ 确定
+
+
@@ -594,6 +595,10 @@ table {
height: 40px;
background: #eee;
}
+ th {
+ font-size: 12px;
+ font-weight: normal;
+ }
td {
padding: 5px;
text-align: center;
@@ -613,6 +618,16 @@ table {
}
}
}
+
+.order-item-actions {
+ vertical-align: middle;
+
+ .order-item-action-btn {
+ display: block;
+ margin: 0 auto 5px;
+ min-width: 88px;
+ }
+}
/** 订单价格 */
.order-price {
text-align: right;
diff --git a/buyer/src/pages/home/userCenter/Coupons.vue b/buyer/src/pages/home/userCenter/Coupons.vue
index 97031ca6..758cf56c 100644
--- a/buyer/src/pages/home/userCenter/Coupons.vue
+++ b/buyer/src/pages/home/userCenter/Coupons.vue
@@ -133,21 +133,73 @@ export default {
diff --git a/buyer/src/pages/payment/PayMent.vue b/buyer/src/pages/payment/PayMent.vue
index 5187340f..79668b9f 100644
--- a/buyer/src/pages/payment/PayMent.vue
+++ b/buyer/src/pages/payment/PayMent.vue
@@ -100,7 +100,7 @@ export default {
if (way === 'WALLET') {
this.$Modal.confirm({
title: '支付确认',
- content: '确认使用余额支付吗? ',
+ content: '确认使用余额支付吗?',
onOk: () => {
pay(params).then(res => {
if (res.success) {
diff --git a/buyer/src/pages/promotion/PointMall.vue b/buyer/src/pages/promotion/PointMall.vue
index bbc14e0b..1e976159 100644
--- a/buyer/src/pages/promotion/PointMall.vue
+++ b/buyer/src/pages/promotion/PointMall.vue
@@ -18,7 +18,7 @@
@click="goGoodsDetail(item.id)"
>
- ![]()
+
diff --git a/buyer/src/pages/shopEntry/FirstApply.vue b/buyer/src/pages/shopEntry/FirstApply.vue
index 33e12ba0..05bfb525 100644
--- a/buyer/src/pages/shopEntry/FirstApply.vue
+++ b/buyer/src/pages/shopEntry/FirstApply.vue
@@ -1,6 +1,14 @@
-
+
基础信息
{
this.loading = false;
- if (res.success) this.$emit('change', 1);
+ if (res.success) {
+ sessionStorage.removeItem(FIRST_APPLY_DRAFT_KEY);
+ this.$emit('change', 1);
+ }
})
.catch(() => {
this.loading = false;
@@ -337,18 +365,57 @@ export default {
// 删除图片
handleRemove (index, listName) {
this.form[listName].splice(index, 1);
+ },
+ initFormFromContent(content) {
+ if (!content || !Object.keys(content).length) return;
+ this.form = JSON.parse(JSON.stringify(content));
+ this.form.legalPhoto = content.legalPhoto
+ ? String(content.legalPhoto).split(',').filter(Boolean)
+ : [];
+ this.form.licencePhoto = content.licencePhoto
+ ? String(content.licencePhoto).split(',').filter(Boolean)
+ : [];
+ this.contentInitialized = true;
+ },
+ restoreDraft() {
+ const draft = sessionStorage.getItem(FIRST_APPLY_DRAFT_KEY);
+ if (!draft) return;
+ try {
+ const parsed = JSON.parse(draft);
+ this.form = {
+ legalPhoto: [],
+ licencePhoto: [],
+ ...parsed,
+ };
+ this.form.legalPhoto = Array.isArray(parsed.legalPhoto) ? parsed.legalPhoto : [];
+ this.form.licencePhoto = Array.isArray(parsed.licencePhoto) ? parsed.licencePhoto : [];
+ } catch (e) {
+ sessionStorage.removeItem(FIRST_APPLY_DRAFT_KEY);
+ }
+ },
+ saveDraft() {
+ sessionStorage.setItem(FIRST_APPLY_DRAFT_KEY, JSON.stringify(this.form));
+ }
+ },
+ watch: {
+ content: {
+ immediate: true,
+ handler(val) {
+ if (this.contentInitialized || !val || !Object.keys(val).length) return;
+ this.initFormFromContent(val);
+ }
}
},
mounted () {
this.accessToken.accessToken = storage.getItem('accessToken');
- if (Object.keys(this.content).length) { // 处理回显数据
- this.form = JSON.parse(JSON.stringify(this.content));
- if (this.form.licencePhoto) {
- this.form.legalPhoto = this.content.legalPhoto.split(',');
- this.form.licencePhoto = this.content.licencePhoto.split(',');
-
- }
+ if (Object.keys(this.content).length) {
+ this.initFormFromContent(this.content);
+ } else {
+ this.restoreDraft();
}
+ },
+ beforeUnmount() {
+ this.saveDraft();
}
};
diff --git a/buyer/src/pages/shopEntry/SecondApply.vue b/buyer/src/pages/shopEntry/SecondApply.vue
index aa4bdb5e..3d1512e5 100644
--- a/buyer/src/pages/shopEntry/SecondApply.vue
+++ b/buyer/src/pages/shopEntry/SecondApply.vue
@@ -90,11 +90,9 @@ export default {
}
},
mounted () {
- if (this.content != {}) {
+ if (this.content && Object.keys(this.content).length) {
this.form = JSON.parse(JSON.stringify(this.content));
- this.$forceUpdate();
}
- this.$refs.secondForm.resetFields()
}
};
diff --git a/buyer/src/pages/shopEntry/ShopEntry.vue b/buyer/src/pages/shopEntry/ShopEntry.vue
index 3cfbd159..ae75bb48 100644
--- a/buyer/src/pages/shopEntry/ShopEntry.vue
+++ b/buyer/src/pages/shopEntry/ShopEntry.vue
@@ -3,17 +3,32 @@
店铺入驻
-
+
-
+
+
+
-
+
-
+
+
入驻申请提交成功,等待平台审核
@@ -28,15 +43,15 @@
-
+
我已同意以上协议
- 同意协议填写资质信息
+ 同意协议填写资质信息
@@ -63,101 +78,114 @@ export default {
secondData: {}, // 第二步数据
thirdData: {}, // 第三步数据
storeDisable: "", // APPLY OPEN 开店中 CLOSED 关闭 REFUSED 拒绝 APPLYING 申请中,审核
- dataReview: true, // 根据接口返回判断是否可展示数据
+ initLoading: true,
+ agreementAccepted: false, // 是否已同意入驻协议
};
},
methods: {
+ confirmAgreement() {
+ this.agreementAccepted = true;
+ this.showAgreement = false;
+ sessionStorage.setItem("shopEntryAgreementAccepted", "1");
+ },
+ assignApplyData(data) {
+ const first = [
+ "companyAddressPath",
+ "companyAddress",
+ "companyAddressIdPath",
+ "companyEmail",
+ "companyName",
+ "employeeNum",
+ "companyPhone",
+ "legalId",
+ "legalName",
+ "licencePhoto",
+ "legalPhoto",
+ "licenseNum",
+ "linkName",
+ "linkPhone",
+ "registeredCapital",
+ "scope",
+ ];
+ const second = [
+ "settlementBankAccountName",
+ "settlementBankAccountNum",
+ "settlementBankBranchName",
+ "settlementBankJointName",
+ ];
+ const third = [
+ "goodsManagementCategory",
+ "storeCenter",
+ "storeDesc",
+ "storeLogo",
+ "storeName",
+ "storeAddressIdPath",
+ "storeAddressPath",
+ "storeAddressDetail",
+ ];
+
+ this.storeDisable = data.storeDisable || "";
+ Object.assign(this.firstData, Object.fromEntries(first.map((key) => [key, data[key]])));
+ Object.assign(this.secondData, Object.fromEntries(second.map((key) => [key, data[key]])));
+ Object.assign(this.thirdData, Object.fromEntries(third.map((key) => [key, data[key]])));
+ },
getArticle() {
// 入驻协议
agreement().then((res) => {
this.agreementCon = res.result.content;
});
- },
- handleReachBottom(){
-
},
getData(status) {
- // 获取已填写店铺信息
applyStatus().then((res) => {
- if (res.success) {
- if (!res.result) {
+ if (!res.success) {
+ return;
+ }
+ if (!res.result) {
+ if (status === "init" && !this.agreementAccepted) {
this.showAgreement = true;
- } else {
- this.dataReview = false;
- let data = res.result;
- let first = [
- "companyAddressPath",
- "companyAddress",
- "companyAddressIdPath",
- "companyEmail",
- "companyName",
- "employeeNum",
- "companyPhone",
- "legalId",
- "legalName",
- "licencePhoto",
- "legalPhoto",
- "licenseNum",
- "linkName",
- "linkPhone",
- "registeredCapital",
- "scope",
- ];
- let second = [
- "settlementBankAccountName",
- "settlementBankAccountNum",
- "settlementBankBranchName",
- "settlementBankJointName",
- ];
- let third = [
- "goodsManagementCategory",
- "storeCenter",
- "storeDesc",
- "storeLogo",
- "storeName",
- "storeAddressIdPath",
- "storeAddressPath",
- "storeAddressDetail",
- ];
-
- this.storeDisable = data.storeDisable;
-
- first.forEach((e) => {
- this.firstData[e] = data[e];
- });
- second.forEach((e) => {
- this.secondData[e] = data[e];
- });
- third.forEach((e) => {
- this.thirdData[e] = data[e];
- });
- if (status === "init") {
- if (this.storeDisable === "APPLY") {
- this.currentIndex = 0;
- } else {
- this.currentIndex = 3;
- }
- }
- this.$nextTick(() => {
- this.dataReview = true;
- this.$forceUpdate();
- });
}
+ return;
+ }
+
+ this.assignApplyData(res.result);
+ if (status === "init") {
+ this.agreementAccepted = true;
+ sessionStorage.setItem("shopEntryAgreementAccepted", "1");
+ if (this.storeDisable === "APPLY") {
+ this.currentIndex = 0;
+ } else {
+ this.currentIndex = 3;
+ }
+ }
+ }).finally(() => {
+ if (status === "init") {
+ this.initLoading = false;
+ }
+ });
+ },
+ refreshApplyData() {
+ applyStatus().then((res) => {
+ if (res.success && res.result) {
+ this.assignApplyData(res.result);
}
});
},
// 下一步
nextPage(step) {
this.currentIndex = step;
- this.getData("next");
+ if (step > 0 && step < 3) {
+ this.refreshApplyData();
+ } else if (step === 3) {
+ this.refreshApplyData();
+ }
},
},
+ created() {
+ this.agreementAccepted = sessionStorage.getItem("shopEntryAgreementAccepted") === "1";
+ },
mounted() {
-
- this.getData("init");
- this.getArticle();
-
-
+ this.getData("init");
+ this.getArticle();
},
};
@@ -187,6 +215,13 @@ export default {
}
}
+.agreement-scroll {
+ max-height: 500px;
+ overflow-y: auto;
+}
+.step-loading {
+ min-height: 320px;
+}
.success-page {
height: 500px;
width: 100%;
diff --git a/buyer/src/pages/shopEntry/ThirdApply.vue b/buyer/src/pages/shopEntry/ThirdApply.vue
index 9b9c7839..7df9f7a9 100644
--- a/buyer/src/pages/shopEntry/ThirdApply.vue
+++ b/buyer/src/pages/shopEntry/ThirdApply.vue
@@ -148,7 +148,7 @@ export default {
.then((res) => {
this.loading = false;
if (res.success) this.$emit('change', 3);
- this.$parent.getData()
+ this.$parent.getData('next');
})
.catch(() => {
this.loading = false;
@@ -228,19 +228,17 @@ export default {
mounted () {
this.accessToken.accessToken = storage.getItem('accessToken');
this.getCategoryList();
- if (this.content != {}) {
+ if (this.content && Object.keys(this.content).length) {
this.form = JSON.parse(JSON.stringify(this.content));
if (this.form.storeLogo) {
- this.form.storeLogo = this.content.storeLogo.split(',');
- this.form.goodsManagementCategory = this.content.goodsManagementCategory.split(
- ','
- );
+ this.form.storeLogo = String(this.content.storeLogo).split(',').filter(Boolean);
+ this.form.goodsManagementCategory = String(this.content.goodsManagementCategory || '')
+ .split(',')
+ .filter(Boolean);
} else {
this.form.storeLogo = [];
}
- this.$forceUpdate();
}
- this.$refs.thirdForm.resetFields()
}
};
diff --git a/buyer/src/plugins/storage.js b/buyer/src/plugins/storage.js
index 164d4d9f..100ac781 100644
--- a/buyer/src/plugins/storage.js
+++ b/buyer/src/plugins/storage.js
@@ -1,27 +1,26 @@
import Cookies from "js-cookie";
const psl = require("psl");
+const isClient = typeof window !== "undefined";
+
+function withCookieDomain(options = {}) {
+ if (!isClient) {
+ return options;
+ }
+ const pPsl = psl.parse(document.domain);
+ let domain = pPsl.domain;
+ if (/\d+\.\d+\.\d+\.\d+/.test(pPsl.input)) domain = pPsl.input;
+ return { domain, ...options };
+}
+
export default {
setItem: (key, value, options = {}) => {
- if (process.client) {
- console.log(process.client);
- const pPsl = psl.parse(document.domain);
- let domain = pPsl.domain;
- if (/\d+\.\d+\.\d+\.\d+/.test(pPsl.input)) domain = pPsl.input;
- options = { domain, ...options };
- }
- Cookies.set(key, value, options);
+ Cookies.set(key, value, withCookieDomain(options));
},
getItem: key => {
return Cookies.get(key);
},
removeItem: (key, options = {}) => {
- if (process.client) {
- const pPsl = psl.parse(document.domain);
- let domain = pPsl.domain;
- if (/\d+\.\d+\.\d+\.\d+/.test(pPsl.input)) domain = pPsl.input;
- options = { domain, ...options };
- }
- Cookies.remove(key, options);
+ Cookies.remove(key, withCookieDomain(options));
}
};
diff --git a/buyer/src/utils/message.js b/buyer/src/utils/message.js
index e50eb54d..71a75982 100644
--- a/buyer/src/utils/message.js
+++ b/buyer/src/utils/message.js
@@ -1,4 +1,30 @@
-import { ElMessage, ElMessageBox } from "element-plus";
+import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
+
+let loadingInstance = null;
+
+export const Spin = {
+ show(options = {}) {
+ Spin.hide();
+ const config =
+ typeof options === "string"
+ ? { text: options }
+ : options && typeof options === "object"
+ ? options
+ : {};
+ loadingInstance = ElLoading.service({
+ lock: true,
+ text: config.text || "加载中...",
+ background: config.background || "rgba(255, 255, 255, 0.7)",
+ ...config,
+ });
+ },
+ hide() {
+ if (loadingInstance) {
+ loadingInstance.close();
+ loadingInstance = null;
+ }
+ },
+};
export const Message = {
success(content) {
@@ -53,6 +79,17 @@ export const Modal = {
}
});
},
+ warning(options = {}) {
+ const content = options.content || options.title || "";
+ return ElMessageBox.alert(content, options.title || "提示", {
+ confirmButtonText: options.okText || "确定",
+ type: "warning",
+ }).then(() => {
+ if (typeof options.onOk === "function") {
+ return options.onOk();
+ }
+ });
+ },
remove() {
ElMessageBox.close();
},
@@ -68,4 +105,5 @@ export function setupLegacyMessage(app) {
app.config.globalProperties.$Message = Message;
app.config.globalProperties.$Modal = Modal;
app.config.globalProperties.$Notice = Notice;
+ app.config.globalProperties.$Spin = Spin;
}
diff --git a/manager/src/components/editor/upload-image.vue b/manager/src/components/editor/upload-image.vue
index 719a91ec..d2a3ca13 100644
--- a/manager/src/components/editor/upload-image.vue
+++ b/manager/src/components/editor/upload-image.vue
@@ -4,28 +4,31 @@
从资源库中导入
-
-
- ![image]()
-
-
-
-
-
-
-
-
+
+
+
+ ![image]()
+
-
+
{ selectedImage = list }"
- @callback="handleCallback"
+ @selected="handleOssSelected"
/>
- 取消
+ 取消
确定
@@ -114,6 +116,9 @@ export default {
};
},
methods: {
+ draggableItemKey(item) {
+ return item?.url || item;
+ },
handleClickUploadImage() {
this.show = true;
},
@@ -153,13 +158,39 @@ export default {
this.$Message.error(err?.message || String(err));
},
confirmUrls() {
+ this.applySelectedImages();
this.showOssManager = false;
},
- handleCallback(val) {
- this.$Message.success("导入成功");
- this.images.push({ url: val.url });
+ cancelOssImport() {
+ this.selectedImage = [];
+ this.showOssManager = false;
+ },
+ resetOssSelection() {
+ this.selectedImage = [];
+ },
+ handleOssSelected(list) {
+ this.selectedImage = Array.isArray(list) ? list : [];
+ },
+ parseOssSelectionUrl(item) {
+ if (!item) {
+ return "";
+ }
+ if (typeof item === "string") {
+ const index = item.indexOf(",");
+ return index >= 0 ? item.slice(index + 1) : item;
+ }
+ return item.url || "";
+ },
+ applySelectedImages() {
+ (this.selectedImage || []).forEach((item) => {
+ const url = this.parseOssSelectionUrl(item);
+ if (url) {
+ this.images.push({ url });
+ }
+ });
},
importOSS() {
+ this.selectedImage = [];
this.showOssManager = true;
this.$nextTick(() => {
if (this.$refs.ossManage) {
diff --git a/manager/src/components/hotzone/components/Zone.vue b/manager/src/components/hotzone/components/Zone.vue
index 9706b0ac..53a824bd 100644
--- a/manager/src/components/hotzone/components/Zone.vue
+++ b/manager/src/components/hotzone/components/Zone.vue
@@ -159,8 +159,12 @@ export default {
},
// 选择图片
handleSelectImg() {
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
// 选择图片回调
callbackSelected(item) {
diff --git a/manager/src/components/lili/upload-pic-input.vue b/manager/src/components/lili/upload-pic-input.vue
index c417f07b..e08d1413 100644
--- a/manager/src/components/lili/upload-pic-input.vue
+++ b/manager/src/components/lili/upload-pic-input.vue
@@ -112,10 +112,14 @@ export default {
},
methods: {
handleCLickImg(val, index) {
- this.$refs.ossManage.selectImage = true;
this.picModalFlag = true;
this.selectedFormBtnName = val;
this.picIndex = index;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
callbackSelected(val) {
this.picModalFlag = false;
diff --git a/manager/src/utils/message.js b/manager/src/utils/message.js
index 6b29d2cb..de0f513d 100644
--- a/manager/src/utils/message.js
+++ b/manager/src/utils/message.js
@@ -40,24 +40,48 @@ export const Notice = {
export const Modal = {
confirm(options = {}) {
const content = options.content || options.title || "确认操作?";
- return ElMessageBox.confirm(content, options.title || "提示", {
+ const title = options.title || "提示";
+ return ElMessageBox.confirm(content, title, {
confirmButtonText: options.okText || "确定",
cancelButtonText: options.cancelText || "取消",
type: options.type || "warning",
- })
- .then(() => {
- if (typeof options.onOk === "function") {
- return options.onOk();
+ beforeClose: (action, instance, done) => {
+ if (action !== "confirm") {
+ done();
+ if (typeof options.onCancel === "function") {
+ options.onCancel();
+ }
+ return;
}
- })
- .catch(() => {
- if (typeof options.onCancel === "function") {
- options.onCancel();
+ if (typeof options.onOk !== "function") {
+ done();
+ return;
}
- });
+ const result = options.onOk();
+ if (result && typeof result.then === "function") {
+ instance.confirmButtonLoading = true;
+ result
+ .then(() => done())
+ .catch(() => {})
+ .finally(() => {
+ instance.confirmButtonLoading = false;
+ });
+ return;
+ }
+ done();
+ },
+ }).catch(() => {
+ if (typeof options.onCancel === "function") {
+ options.onCancel();
+ }
+ });
},
remove() {
- ElMessageBox.close();
+ try {
+ ElMessageBox.close();
+ } catch (_) {
+ // MessageBox 已关闭时忽略,避免操作已销毁 DOM 触发 parentNode 报错
+ }
},
};
diff --git a/manager/src/views/goods/goods-info/goods.vue b/manager/src/views/goods/goods-info/goods.vue
index 06dff7a9..f5c31575 100644
--- a/manager/src/views/goods/goods-info/goods.vue
+++ b/manager/src/views/goods/goods-info/goods.vue
@@ -81,8 +81,8 @@
@@ -126,6 +126,7 @@
-
+
@@ -234,7 +241,7 @@
取消
- 提交审核
+ 提交审核
@@ -243,6 +250,7 @@
title="批量商品审核"
width="500px"
:close-on-click-modal="false"
+ destroy-on-close
>
@@ -251,7 +259,7 @@
审核拒绝
-
+
@@ -262,7 +270,7 @@
取消
- 提交审核
+ 提交审核
@@ -321,6 +329,7 @@ export default {
auth_flag: 1,
},
auditModalVisible: false, // 审核弹框显示状态
+ auditSubmitLoading: false,
currentAuditGoods: null, // 当前审核的商品
submitLoading: false, // 添加或编辑提交状态
data: [], // 表单数据
@@ -330,6 +339,7 @@ export default {
selectedRows: [], // 选中的行数据
selectAll: false, // 全选状态
batchAuditModalVisible: false, // 批量审核弹框显示状态
+ batchAuditSubmitLoading: false,
batchAuditForm: {
auth_flag: 1,
reason: ''
@@ -361,7 +371,8 @@ export default {
this.$refs.table?.clearSelection?.();
},
onStatusTabClick(tab) {
- this.goodsStatusClick(tab.paneName);
+ const status = tab.paneName ?? tab.props?.name;
+ this.goodsStatusClick(status);
},
salesModelText(v) {
if (v === "RETAIL") return "零售";
@@ -532,35 +543,28 @@ export default {
this.currentAuditGoods = goods;
this.goodsAuditForm.auth_flag = 1;
this.goodsAuditForm.reason = '';
+ this.auditSubmitLoading = false;
this.auditModalVisible = true;
},
- // 确认审核(二次确认)
- confirmAudit() {
- const auditText = this.goodsAuditForm.auth_flag === 1 ? '通过' : '拒绝';
- this.$Modal.confirm({
- title: '确认审核',
- content: `您确认要审核${auditText} "${this.currentAuditGoods.goodsName}" 吗?`,
- loading: true,
- onOk: () => {
- this.submitAudit();
- },
- });
- },
-
// 提交审核
submitAudit() {
- let formData = new FormData();
+ if (!this.currentAuditGoods) {
+ return;
+ }
+ this.auditSubmitLoading = true;
+ const formData = new FormData();
formData.append('goodsIds', this.currentAuditGoods.id);
formData.append('authFlag', this.goodsAuditForm.auth_flag === 1 ? 'PASS' : 'REFUSE');
authGoods(formData).then((res) => {
- this.$Modal.remove();
if (res.success) {
this.$Message.success('审核成功');
this.auditModalVisible = false;
this.getDataList();
this.getNumberData();
}
+ }).finally(() => {
+ this.auditSubmitLoading = false;
});
},
@@ -668,36 +672,27 @@ export default {
}
const actionText = this.batchAuditForm.auth_flag === 1 ? '通过' : '拒绝';
- const goodsNames = this.selectedRows.map(item => item.goodsName).join('、');
+ const goodsIds = this.selectedRows.map(item => item.id);
+ const formData = new FormData();
+ formData.append('goodsIds', goodsIds.join(','));
+ formData.append('authFlag', this.batchAuditForm.auth_flag === 1 ? 'PASS' : 'REFUSE');
+ if (this.batchAuditForm.reason) {
+ formData.append('reason', this.batchAuditForm.reason);
+ }
- this.$Modal.confirm({
- title: `确认批量审核${actionText}`,
- content: `您确认要${actionText}以下商品的审核吗?\n${goodsNames}`,
- loading: true,
- onOk: () => {
- // 提取所有选中商品的ID
- const goodsIds = this.selectedRows.map(item => item.id);
-
- let formData = new FormData();
- formData.append('goodsId', goodsIds);
- formData.append('authFlag', this.batchAuditForm.auth_flag === 1 ? 'PASS' : 'REFUSE');
- formData.append('reason', this.batchAuditForm.reason || '');
-
- // 修正:直接调用authGoods,不传递'batch'参数
- authGoods(formData).then((res) => {
- this.$Modal.remove();
- if (res.success) {
- this.$Message.success(`批量审核${actionText}成功`);
- this.selectedRows = [];
- this.selectAll = false;
- this.batchAuditModalVisible = false;
- this.getDataList();
- this.getNumberData();
- }
- }).catch(() => {
- this.$Modal.remove();
- });
+ this.batchAuditSubmitLoading = true;
+ authGoods(formData).then((res) => {
+ if (res.success) {
+ this.$Message.success(`批量审核${actionText}成功`);
+ this.selectedRows = [];
+ this.selectAll = false;
+ this.batchAuditModalVisible = false;
+ this.clearTableSelection();
+ this.getDataList();
+ this.getNumberData();
}
+ }).finally(() => {
+ this.batchAuditSubmitLoading = false;
});
},
loadGoodsGroupList() {
diff --git a/manager/src/views/goods/goods-info/goodsApply.vue b/manager/src/views/goods/goods-info/goodsApply.vue
index 7e184bfe..f1f60122 100644
--- a/manager/src/views/goods/goods-info/goodsApply.vue
+++ b/manager/src/views/goods/goods-info/goodsApply.vue
@@ -166,13 +166,11 @@ export default {
this.$Modal.confirm({
title: "确认审核",
content: `您确认要审核${examine} ${v.goodsName} ?`,
- loading: true,
onOk: () => {
const formData = new FormData();
formData.append("goodsIds", v.id);
formData.append("authFlag", this.goodsAuditForm.authFlag);
- authGoods(formData).then((res) => {
- this.$Modal.remove();
+ return authGoods(formData).then((res) => {
if (res.success) {
this.$Message.success("审核成功");
this.getDataList();
diff --git a/manager/src/views/goods/goods-info/goodsDetail.vue b/manager/src/views/goods/goods-info/goodsDetail.vue
index d5d73355..656dfd61 100644
--- a/manager/src/views/goods/goods-info/goodsDetail.vue
+++ b/manager/src/views/goods/goods-info/goodsDetail.vue
@@ -107,11 +107,11 @@
商品详情描述
@@ -179,6 +179,30 @@ div.base-info-item {
.form-item-view {
padding-left: 80px;
}
+
+ .goods-desc-item {
+ align-items: flex-start;
+ }
+
+ .goods-desc-item .el-form-item__label {
+ line-height: 24px;
+ padding-top: 0;
+ }
+
+ .goods-desc-item .el-form-item__content {
+ align-items: flex-start;
+ line-height: 24px;
+ }
+
+ .goods-desc-content {
+ line-height: 24px;
+ text-align: left;
+ word-break: break-word;
+ }
+
+ .goods-desc-content > :first-child {
+ margin-top: 0;
+ }
}
.demo-upload-list {
diff --git a/manager/src/views/goods/goods-manage/brand.vue b/manager/src/views/goods/goods-manage/brand.vue
index 76143d13..c2c536ab 100644
--- a/manager/src/views/goods/goods-manage/brand.vue
+++ b/manager/src/views/goods/goods-manage/brand.vue
@@ -203,8 +203,12 @@ export default {
},
methods: {
openLogoPicker() {
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
callbackSelected(val) {
this.picModelFlag = false;
diff --git a/manager/src/views/goods/goods-manage/category.vue b/manager/src/views/goods/goods-manage/category.vue
index bd8715c5..a50711cc 100644
--- a/manager/src/views/goods/goods-manage/category.vue
+++ b/manager/src/views/goods/goods-manage/category.vue
@@ -62,7 +62,7 @@
:close-on-click-modal="false"
destroy-on-close
>
-
+
{{ parentTitle }}
@@ -79,7 +79,8 @@
-
+
+ 佣金比例(%)
@@ -451,4 +452,7 @@ export default {
.mb_10 {
margin-bottom: 10px;
}
+.commission-rate-item :deep(.el-form-item__label) {
+ white-space: nowrap;
+}
diff --git a/manager/src/views/goods/goods-review/index.vue b/manager/src/views/goods/goods-review/index.vue
index c54b34a0..34a4ab8a 100644
--- a/manager/src/views/goods/goods-review/index.vue
+++ b/manager/src/views/goods/goods-review/index.vue
@@ -90,7 +90,7 @@
-
+
@@ -99,6 +99,7 @@
{
- this.$Message.success("修改成功!");
- this.init();
+ changeSwitchView(status) {
+ if (!this.detailStatusReady || !this.currentReviewId) {
+ return;
+ }
+ API_Member.updateMemberReview(this.currentReviewId, { status }).then((res) => {
+ if (res.success) {
+ this.$Message.success("修改成功!");
+ this.getDataList();
+ }
});
},
init() {
@@ -227,10 +234,14 @@ export default {
this.searchForm.pageSize = 20;
this.getDataList();
},
- changeSwitch(v) {
- const status = v.status;
- API_Member.updateMemberReview(v.id, { status }).then(() => {
- this.init();
+ changeSwitch(row) {
+ if (!row || !row.id) {
+ return;
+ }
+ API_Member.updateMemberReview(row.id, { status: row.status }).then((res) => {
+ if (res.success) {
+ this.getDataList();
+ }
});
},
updateTop(v) {
@@ -264,14 +275,25 @@ export default {
this.loading = false;
},
info(v) {
+ this.currentReviewId = v.id;
+ this.detailStatusReady = false;
+ this.infoData = {};
this.infoFlag = true;
this.infoTitle = `用户${v.memberName}的评价详情`;
API_Member.getMemberInfoReview(v.id).then((res) => {
if (res.result) {
this.infoData = res.result;
+ this.$nextTick(() => {
+ this.detailStatusReady = true;
+ });
}
});
},
+ onInfoDialogClosed() {
+ this.detailStatusReady = false;
+ this.currentReviewId = "";
+ this.infoData = {};
+ },
remove(v) {
this.$Modal.confirm({
title: "确认删除",
diff --git a/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue b/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue
index 874e383e..f7299dc4 100644
--- a/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue
+++ b/manager/src/views/main-parts/shrinkable-menu/shrinkable-menu.vue
@@ -102,12 +102,25 @@ export default {
height: auto;
min-height: 56px;
white-space: normal;
+ transition: background-color 0.2s ease, color 0.2s ease;
+ }
+
+ :deep(.el-menu-item:not(.is-active):hover),
+ :deep(.el-menu-item:not(.is-active):focus) {
+ background-color: #43444d !important;
+ color: #fff !important;
}
:deep(.el-menu-item.is-active) {
background-color: #fff !important;
color: $theme_color !important;
}
+
+ :deep(.el-menu-item.is-active:hover),
+ :deep(.el-menu-item.is-active:focus) {
+ background-color: #fff !important;
+ color: $theme_color !important;
+ }
}
.sub-menu {
diff --git a/manager/src/views/main.scss b/manager/src/views/main.scss
index c091b3df..a4b3248e 100644
--- a/manager/src/views/main.scss
+++ b/manager/src/views/main.scss
@@ -253,7 +253,7 @@
z-index: 19;
display: flex;
align-items: center;
- padding: 0;
+ padding: 0 16px;
}
.single-page-con {
diff --git a/manager/src/views/member/list/index.vue b/manager/src/views/member/list/index.vue
index 95152386..6382a8e5 100644
--- a/manager/src/views/member/list/index.vue
+++ b/manager/src/views/member/list/index.vue
@@ -187,12 +187,7 @@
type="primary"
link
class="upload"
- @click="
- () => {
- picModelFlag = true;
- $refs.ossManage.selectImage = true;
- }
- "
+ @click="openPicSelector"
>修改
@@ -538,6 +533,14 @@ export default {
}
});
},
+ openPicSelector() {
+ this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
+ },
callbackSelected(val) {
this.picModelFlag = false;
this.form.face = val.url;
diff --git a/manager/src/views/member/list/memberRecycle.vue b/manager/src/views/member/list/memberRecycle.vue
index 54a9c74b..c82111b6 100644
--- a/manager/src/views/member/list/memberRecycle.vue
+++ b/manager/src/views/member/list/memberRecycle.vue
@@ -94,12 +94,7 @@
type="primary"
link
class="upload"
- @click="
- () => {
- picModelFlag = true;
- $refs.ossManage.selectImage = true;
- }
- "
+ @click="openPicSelector"
>修改
@@ -223,6 +218,14 @@ export default {
}
});
},
+ openPicSelector() {
+ this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
+ },
callbackSelected(val) {
this.picModelFlag = false;
this.formValidate.face = val.url;
diff --git a/manager/src/views/page-decoration/modelForm.vue b/manager/src/views/page-decoration/modelForm.vue
index 843c658f..1814a133 100644
--- a/manager/src/views/page-decoration/modelForm.vue
+++ b/manager/src/views/page-decoration/modelForm.vue
@@ -49,11 +49,13 @@
-
+
{
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
callbackSelected(item) {
this.picModelFlag = false;
@@ -234,16 +243,18 @@ export default {
},
handleModelAdd(evt) {
const newIndex = evt.newIndex;
-
- this.data.list[newIndex] = JSON.parse(JSON.stringify(this.data.list[newIndex]));
- const key = Date.parse(new Date()) + "_" + Math.ceil(Math.random() * 99999);
+ const current = this.data.list[newIndex];
+ if (!current || current.key) {
+ return;
+ }
+ const key = Date.now() + "_" + Math.ceil(Math.random() * 99999);
this.data.list[newIndex] = {
- ...this.data.list[newIndex],
+ ...JSON.parse(JSON.stringify(current)),
options: {
- ...this.data.list[newIndex].options,
+ ...current.options,
},
key,
- model: this.data.list[newIndex].type + "_" + key,
+ model: current.type + "_" + key,
};
},
},
diff --git a/manager/src/views/page-decoration/modelFormItem.vue b/manager/src/views/page-decoration/modelFormItem.vue
index 56599790..1eecc551 100644
--- a/manager/src/views/page-decoration/modelFormItem.vue
+++ b/manager/src/views/page-decoration/modelFormItem.vue
@@ -62,41 +62,43 @@
-
-
-
- ![]()
-
-
- 编辑
+
+
+
+
+ ![]()
+
-
-
-
- ![]()
-
-
- 编辑
+
+
+ ![]()
+
@@ -329,8 +331,12 @@ export default {
handleSelectImg() {
// 选择图片
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
// 回显图片
callbackSelected(val) {
@@ -402,15 +408,23 @@ export default {
}
}
/** 折扣广告 */
+.discountAdvert-wrap {
+ width: 1200px;
+ position: relative;
+}
.discountAdvert {
+ width: 1300px;
height: 566px;
+ margin-left: -100px;
+ box-sizing: border-box;
background-repeat: no-repeat;
- margin-left: -97px;
+ background-size: 1300px 566px;
position: relative;
> div {
padding-left: 295px;
display: flex;
flex-wrap: wrap;
+ box-sizing: border-box;
&:nth-child(1) img {
margin: 10px 10px 0 0;
}
diff --git a/manager/src/views/page-decoration/modelList/carousel.vue b/manager/src/views/page-decoration/modelList/carousel.vue
index 65a9522b..c1715fa5 100644
--- a/manager/src/views/page-decoration/modelList/carousel.vue
+++ b/manager/src/views/page-decoration/modelList/carousel.vue
@@ -184,8 +184,12 @@ export default {
// 选择图片
handleSelectImg(item) {
this.selected = item;
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
},
};
diff --git a/manager/src/views/page-decoration/modelList/carousel1.vue b/manager/src/views/page-decoration/modelList/carousel1.vue
index 8fc54f0e..31259acc 100644
--- a/manager/src/views/page-decoration/modelList/carousel1.vue
+++ b/manager/src/views/page-decoration/modelList/carousel1.vue
@@ -145,8 +145,12 @@ export default {
// 打开选择图片modal
handleSelectImg(item) {
this.selected = item;
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
},
};
diff --git a/manager/src/views/page-decoration/modelList/carousel2.vue b/manager/src/views/page-decoration/modelList/carousel2.vue
index 324e3f20..781c9f8d 100644
--- a/manager/src/views/page-decoration/modelList/carousel2.vue
+++ b/manager/src/views/page-decoration/modelList/carousel2.vue
@@ -277,8 +277,12 @@ export default {
// 打开选择图片modal
handleSelectImg(item) {
this.selected = item;
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
},
};
diff --git a/manager/src/views/page-decoration/modelList/firstPageAdvert.vue b/manager/src/views/page-decoration/modelList/firstPageAdvert.vue
index cff6bbe8..5dca3a7c 100644
--- a/manager/src/views/page-decoration/modelList/firstPageAdvert.vue
+++ b/manager/src/views/page-decoration/modelList/firstPageAdvert.vue
@@ -127,8 +127,12 @@ export default {
},
handleSelectImg() {
// 选择图片
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
// 选择图片回调
callbackSelected(val) {
diff --git a/manager/src/views/page-decoration/modelList/forYour.vue b/manager/src/views/page-decoration/modelList/forYour.vue
index 928b5a70..ba220af1 100644
--- a/manager/src/views/page-decoration/modelList/forYour.vue
+++ b/manager/src/views/page-decoration/modelList/forYour.vue
@@ -208,8 +208,12 @@ export default {
this.defaultCallbackImageType = type;
this.goodsIndex = index;
// 选择图片
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
handleSelectGoods(val, index) {
diff --git a/manager/src/views/page-decoration/modelList/mixModel.vue b/manager/src/views/page-decoration/modelList/mixModel.vue
index c5dfca5b..c49bafad 100644
--- a/manager/src/views/page-decoration/modelList/mixModel.vue
+++ b/manager/src/views/page-decoration/modelList/mixModel.vue
@@ -194,8 +194,12 @@ export default {
this.defaultCallbackImageType = type;
this.goodsIndex = index;
// 选择图片
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
handleSelectGoods(val, index) {
diff --git a/manager/src/views/page-decoration/modelList/newGoodsSort.vue b/manager/src/views/page-decoration/modelList/newGoodsSort.vue
index aeba123b..2b71d56c 100644
--- a/manager/src/views/page-decoration/modelList/newGoodsSort.vue
+++ b/manager/src/views/page-decoration/modelList/newGoodsSort.vue
@@ -284,8 +284,12 @@ export default {
},
handleSelectImg() {
// 选择图片
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
// 选择图片回显
callbackSelected(val) {
@@ -300,82 +304,171 @@ export default {
.new-goods {
display: flex;
justify-content: space-between;
+ align-items: stretch;
> div {
width: 393px;
height: 440px;
+ overflow: hidden;
}
.left > .content {
- > div:nth-child(1) {
- height: 240px;
- flex-direction: column;
- border: 1px solid #eee;
- border-top: none;
- border-left: none;
- justify-content: space-between;
- img {
- width: 160px;
- height: 160px;
- }
- .describe {
- margin-top: 10px;
- }
- }
- > div:nth-child(2) {
- border-right: 1px solid #eee;
- }
- > div:nth-child(3),
- > div:nth-child(4) {
- border-bottom: 1px solid #eee;
- }
- }
-
- .middle > .content {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-template-rows: repeat(3, 1fr);
+ flex-direction: unset;
+ overflow: hidden;
> div {
+ width: 100%;
+ height: 100%;
+ min-width: 0;
+ min-height: 0;
+ overflow: hidden;
+ box-sizing: border-box;
+ display: flex;
+ padding: 6px 4px 4px 6px;
border-style: solid;
border-color: #eee;
border-width: 0;
border-bottom-width: 1px;
+ border-right-width: 1px;
+ img {
+ width: 64px;
+ height: 64px;
+ margin-top: 2px;
+ flex-shrink: 0;
+ object-fit: cover;
+ }
+ > div {
+ flex: 1;
+ min-width: 0;
+ p {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ font-size: 12px;
+ line-height: 1.3;
+ }
+ .describe {
+ margin-top: 4px;
+ font-size: 11px;
+ }
+ }
+ }
+ > div:nth-child(1) {
+ grid-row: span 2;
+ flex-direction: column;
+ justify-content: space-between;
+ align-items: center;
+ text-align: center;
+ padding: 8px 6px;
+ img {
+ width: 120px;
+ height: 120px;
+ margin-top: 6px;
+ }
+ > div {
+ flex: unset;
+ width: 100%;
+ p {
+ white-space: normal;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ }
+ .describe {
+ margin-top: 6px;
+ white-space: normal;
+ }
+ }
}
- > div:nth-child(1),
> div:nth-child(2),
- > div:nth-child(3) {
+ > div:nth-child(3),
+ > div:nth-child(5) {
+ border-right-width: 0;
+ }
+ > div:nth-child(4),
+ > div:nth-child(5) {
+ border-bottom-width: 0;
+ }
+ }
+
+ .middle > .content {
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-template-rows: repeat(3, 1fr);
+ flex-direction: unset;
+ > div {
+ width: 100%;
+ height: 100%;
+ min-width: 0;
+ overflow: hidden;
+ box-sizing: border-box;
+ border-style: solid;
+ border-color: #eee;
+ border-width: 0;
+ border-bottom-width: 1px;
border-right-width: 1px;
}
- > div:nth-child(6),
- > div:nth-child(3) {
+ > div:nth-child(2n) {
+ border-right-width: 0;
+ }
+ > div:nth-child(n + 5) {
border-bottom-width: 0;
}
}
.right > .content {
- display: flex;
- flex-wrap: wrap;
- flex-direction: row;
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ grid-template-rows: repeat(2, 1fr);
+ flex-direction: unset;
+ flex-wrap: unset;
font-size: 12px;
+ overflow: hidden;
> div {
position: relative;
- width: 120px;
- padding: 5px 10px 0 10px;
+ width: 100%;
+ height: 100%;
+ min-height: 0;
+ box-sizing: border-box;
+ padding: 4px 4px 2px;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ overflow: hidden;
img {
- width: 100px;
- height: 100px;
+ width: 80px;
+ height: 80px;
+ flex-shrink: 0;
+ display: block;
+ object-fit: cover;
}
border-bottom: 1px solid #eee;
+ border-right: 1px solid #eee;
:nth-child(2) {
- height: 38px;
+ width: 100%;
+ height: auto;
+ max-height: 32px;
+ line-height: 16px;
+ margin-top: 4px;
overflow: hidden;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ text-align: center;
}
:nth-child(3) {
color: $theme_color;
- margin-top: 5px;
+ margin-top: 2px;
+ line-height: 1.2;
+ flex-shrink: 0;
}
.jiaobiao {
position: absolute;
width: 23px;
height: 23px;
- top: 10px;
- right: 16px;
+ top: 6px;
+ right: 6px;
background: url("../../../assets/festival_icon.png");
color: #fff;
text-align: center;
@@ -393,10 +486,11 @@ export default {
background-position: -60px -30px;
}
}
- > div:nth-child(4),
- > div:nth-child(5),
- > div:nth-child(6) {
- border: none;
+ > div:nth-child(3n) {
+ border-right: none;
+ }
+ > div:nth-child(n + 4) {
+ border-bottom: none;
}
}
@@ -421,6 +515,8 @@ export default {
flex-wrap: wrap;
flex-direction: column;
height: 370px;
+ box-sizing: border-box;
+ overflow: hidden;
}
.con-item {
width: 185px;
@@ -434,6 +530,42 @@ export default {
margin-top: 10px;
}
}
+ .middle > .content .con-item {
+ width: 100%;
+ max-width: 100%;
+ height: 100%;
+ min-width: 0;
+ min-height: 0;
+ overflow: hidden;
+ box-sizing: border-box;
+ padding: 6px 4px 4px 6px;
+ img {
+ width: 64px;
+ height: 64px;
+ margin-top: 2px;
+ flex-shrink: 0;
+ }
+ > div {
+ flex: 1;
+ min-width: 0;
+ p {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ font-size: 12px;
+ line-height: 1.3;
+ }
+ .describe {
+ margin-top: 4px;
+ font-size: 11px;
+ }
+ }
+ }
+ .left > .content .con-item {
+ width: 100%;
+ max-width: 100%;
+ height: 100%;
+ }
.describe {
color: #999;
font-size: 12px;
diff --git a/manager/src/views/page-decoration/modelList/oneRowThreeColumns.vue b/manager/src/views/page-decoration/modelList/oneRowThreeColumns.vue
index 8efd635d..43e89f7e 100644
--- a/manager/src/views/page-decoration/modelList/oneRowThreeColumns.vue
+++ b/manager/src/views/page-decoration/modelList/oneRowThreeColumns.vue
@@ -115,9 +115,13 @@ export default {
},
handleSelectImg(index){
// 选择图片
- this.$refs.ossManage.selectImage = true;
- this.picModelFlag = true;
this.current = index;
+ this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
}
}
}
diff --git a/manager/src/views/page-decoration/modelList/recommend.vue b/manager/src/views/page-decoration/modelList/recommend.vue
index 632cbf3f..872fde0d 100644
--- a/manager/src/views/page-decoration/modelList/recommend.vue
+++ b/manager/src/views/page-decoration/modelList/recommend.vue
@@ -77,10 +77,7 @@
:key="index"
class="setup-content"
>
-
+
{{
item.name
@@ -272,8 +269,12 @@ export default {
},
handleSelectImg() {
// 选择图片
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
// 选择图片回调
callbackSelected(val) {
@@ -345,55 +346,78 @@ export default {
.recommend-right {
width: 595px;
- height: 360px;
+
.head-recommend {
background: #a25684;
}
.content-right {
- display: flex;
- flex-wrap: wrap;
- align-items: center;
- justify-content: center;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ grid-template-rows: repeat(2, 1fr);
+ height: 360px;
padding-top: 10px;
+ box-sizing: border-box;
+
> div {
- width: 50%;
+ width: 100%;
+ height: 100%;
text-align: center;
- height: 180px;
- padding-top: 10px;
+ padding: 0;
+ border-right: 1px solid #eee;
+ border-bottom: 1px solid #eee;
+ box-sizing: border-box;
+
+ &:nth-child(2n) {
+ border-right: none;
+ }
+
+ &:nth-child(n + 3) {
+ border-bottom: none;
+ }
+
.right-item {
- border-bottom: 1px solid #eee;
+ border-bottom: none;
display: flex;
- margin-top: 30px;
- margin-left: 5px;
- margin-right: 5px;
- height: 150px;
- padding: 0 10px;
+ align-items: center;
+ justify-content: space-between;
+ height: 100%;
+ margin: 0;
+ padding: 10px 15px;
font-size: 12px;
+ box-sizing: border-box;
+
> div:nth-child(1) {
- width: 130px;
- margin-top: 30px;
+ flex: 1;
+ min-width: 0;
+ margin-top: 0;
+ text-align: left;
+
span:nth-child(1) {
color: #fff;
border-radius: 10px;
padding: 0 5px;
background-color: #a25684;
display: block;
- width: 120px;
+ max-width: 120px;
overflow: hidden;
white-space: nowrap;
- margin: 0 10px 10px 0;
+ margin: 0 0 10px;
}
+
span:nth-child(2) {
font-size: 12px;
color: #666;
display: block;
}
}
+
.right-img {
- width: 100;
+ width: 100px;
height: 100px;
+ flex-shrink: 0;
text-align: center;
- margin: 0 auto;
+ margin: 0;
+
img {
max-height: 100px;
max-width: 100px;
@@ -401,9 +425,6 @@ export default {
}
}
}
- > div:nth-child(n + 1) {
- border-right: 1px solid #eee;
- }
}
}
diff --git a/manager/src/views/page-decoration/modelList/seckill-only-album.vue b/manager/src/views/page-decoration/modelList/seckill-only-album.vue
index 90d85303..c705932d 100644
--- a/manager/src/views/page-decoration/modelList/seckill-only-album.vue
+++ b/manager/src/views/page-decoration/modelList/seckill-only-album.vue
@@ -16,8 +16,9 @@
-
-
+
@@ -29,22 +30,13 @@
{{ $filters.unitPrice(item.originalPrice, "¥") }}
-
-
+
+
-
diff --git a/manager/src/views/promotions/coupon/coupon.vue b/manager/src/views/promotions/coupon/coupon.vue
index f6489e95..768a0ce6 100644
--- a/manager/src/views/promotions/coupon/coupon.vue
+++ b/manager/src/views/promotions/coupon/coupon.vue
@@ -204,6 +204,10 @@ export default {
type: Array,
default: () => [],
},
+ manualConfirm: {
+ type: Boolean,
+ default: false,
+ },
},
data() {
return {
@@ -222,6 +226,7 @@ export default {
selectDate: [],
showActionColumn: true,
showStatusColumn: true,
+ isSyncingSelection: false,
};
},
watch: {
@@ -232,6 +237,8 @@ export default {
},
selectedList: {
handler(val) {
+ if (this.isSyncingSelection) return;
+ if (this.isSameSelection(val, this.selectList)) return;
this.$nextTick(() => {
this.syncTableSelection(val);
});
@@ -311,20 +318,39 @@ export default {
};
return map[type] || "";
},
+ isSameSelection(next, current) {
+ const a = next || [];
+ const b = current || [];
+ if (a.length !== b.length) return false;
+ const nextIds = a.map((item) => item.id).sort().join(",");
+ const currentIds = b.map((item) => item.id).sort().join(",");
+ return nextIds === currentIds;
+ },
syncTableSelection(selected) {
const table = this.$refs.table;
if (!table) return;
+ const nextList = selected ? [...selected] : [];
+ this.isSyncingSelection = true;
table.clearSelection();
- if (!selected || !selected.length) return;
- this.data.forEach((row) => {
- if (selected.some((item) => item.id === row.id)) {
- table.toggleRowSelection(row, true);
- }
+ if (nextList.length) {
+ this.data.forEach((row) => {
+ if (nextList.some((item) => item.id === row.id)) {
+ table.toggleRowSelection(row, true);
+ }
+ });
+ }
+ this.selectList = nextList;
+ this.selectCount = nextList.length;
+ this.$nextTick(() => {
+ this.isSyncingSelection = false;
});
},
check() {
this.$emit("selected", this.selectList);
},
+ getSelection() {
+ return [...this.selectList];
+ },
receivePage(id) {
if (id) {
this.$router.push({ name: "coupon-receive", query: { couponId: id } });
@@ -356,9 +382,10 @@ export default {
this.$refs.table?.clearSelection();
},
changeSelect(e) {
+ if (this.isSyncingSelection) return;
this.selectList = e;
this.selectCount = e.length;
- if (this.getType === "ACTIVITY") this.check();
+ if (this.getType === "ACTIVITY" && !this.manualConfirm) this.check();
},
getDataList() {
this.loading = true;
diff --git a/manager/src/views/seller/shop/shopOperation.vue b/manager/src/views/seller/shop/shopOperation.vue
index 64613c79..8a577720 100644
--- a/manager/src/views/seller/shop/shopOperation.vue
+++ b/manager/src/views/seller/shop/shopOperation.vue
@@ -611,10 +611,14 @@ export default {
},
// 选择图片modal
handleCLickImg(val, index) {
- this.$refs.ossManage.selectImage = true;
this.picModelFlag = true;
this.selectedFormBtnName = val;
this.picIndex = index;
+ this.$nextTick(() => {
+ if (this.$refs.ossManage) {
+ this.$refs.ossManage.selectImage = true;
+ }
+ });
},
// 图片回显
callbackSelected(val) {
diff --git a/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue b/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue
index 07e679cf..e13aaac6 100644
--- a/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue
+++ b/manager/src/views/sys/setting-manage/setting/GOODS_SETTING.vue
@@ -67,7 +67,6 @@
diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
index c8ed37d7..a8e0f30a 100644
--- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue
+++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue
@@ -120,19 +120,23 @@
|