diff --git a/manager/src/api/goods.js b/manager/src/api/goods.js index 6f0f203d..6bebf41f 100644 --- a/manager/src/api/goods.js +++ b/manager/src/api/goods.js @@ -52,19 +52,11 @@ export const saveParameterCategory = (parameter_id, categoryIds) => { "Content-Type": "application/json" }) } -//保存获取关联规格 -export const saveCategorySpec = (category_id, params) => { - return postRequest(`/goods/categorySpec/${category_id}`, params) -} //获取所有可用品牌 export const getBrandListData = (params) => { return getRequest('/goods/brand/all', params) } -// 获取所有可用规格 -export const getSpecificationList = (params) => { - return getRequest('/goods/spec/all', params) -} //获取分类列表数据 export const getAllCategoryList = (parent_id) => { @@ -93,11 +85,6 @@ export const disableCategory = (id, type) => { return putRequest(`/goods/category/disable/${id}`, type) } -//根据分类id获取关联规格 -export const getCategorySpecListData = (category_id, params) => { - return getRequest(`/goods/categorySpec/${category_id}`, params) -} - // 查询某分类下的全部子分类列表 export const getGoodsCategory = (parent_id) => { return getRequest(`/goods/category/${parent_id}/all-children`) @@ -221,12 +208,6 @@ export const deleteParamsGroup = (id, params) => { return deleteRequest(`/goods/categoryParameters/${id}`, params) } -//保存获取关联规格 -export const getGoodsSpecInfo = (category_id, params) => { - return getRequest(`/goods/categorySpec/goods/${category_id}`, params) -} - - //获取sku列表 export const getSkuPage = (params) => { return getRequest(`/goodsSku/getByPage`, params) diff --git a/manager/src/api/index.js b/manager/src/api/index.js index fe80992c..c9dd362f 100644 --- a/manager/src/api/index.js +++ b/manager/src/api/index.js @@ -120,9 +120,37 @@ export const getAllUserData = (params) => { return getRequest("/passport/user/getAll", params); }; +function buildUserRegisterFormBody(params) { + const parts = []; + const appendField = (key, value) => { + if (value === undefined || value === null || value === "") return; + parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + }; + appendField("username", params.username); + appendField("password", params.password); + appendField("nickName", params.nickName); + appendField("mobile", params.mobile); + appendField("email", params.email); + appendField("avatar", params.avatar); + appendField("description", params.description); + if (params.departmentId !== undefined && params.departmentId !== null && params.departmentId !== "" && params.departmentId !== 0) { + appendField("departmentId", params.departmentId); + } + if (params.isSuper !== undefined && params.isSuper !== null) { + appendField("isSuper", params.isSuper); + } + if (Array.isArray(params.roles)) { + params.roles.forEach((roleId) => appendField("roles", roleId)); + } + return parts.join("&"); +} + // 添加用户 export const addUser = (params) => { - return postRequest("/passport/user", params); + const body = buildUserRegisterFormBody(params); + return postRequest("/passport/user/register", body, { + "Content-Type": "application/x-www-form-urlencoded", + }); }; // 编辑管理员自身 export const editUser = (params) => { diff --git a/manager/src/api/logistics.js b/manager/src/api/logistics.js index 4f09d2c1..621a8384 100644 --- a/manager/src/api/logistics.js +++ b/manager/src/api/logistics.js @@ -14,11 +14,28 @@ export const getLogisticsPage = params => { }; // 删除 export const delLogistics = id => { - return deleteRequest(`/other/logistics/delete/${id}`); + return deleteRequest(`/other/logistics/${id}`); }; // 添加 +function buildLogisticsFormBody(params) { + const parts = []; + const appendField = (key, value) => { + if (value === undefined || value === null || value === "") return; + parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); + }; + appendField("name", params.name); + appendField("code", params.code); + appendField("disabled", params.disabled); + appendField("standBy", params.standBy); + appendField("formItems", params.formItems); + return parts.join("&"); +} + export const addLogistics = params => { - return postRequest(`/other/logistics/save`,params); + const body = buildLogisticsFormBody(params); + return postRequest("/other/logistics", body, { + "Content-Type": "application/x-www-form-urlencoded", + }); }; // 通过id查询详情 export const getLogisticsDetail = id => { diff --git a/manager/src/views/goods/goods-manage/category.vue b/manager/src/views/goods/goods-manage/category.vue index 52fcd261..63de120c 100644 --- a/manager/src/views/goods/goods-manage/category.vue +++ b/manager/src/views/goods/goods-manage/category.vue @@ -116,28 +116,6 @@ 提交 - - - - - - - - - @@ -148,12 +126,9 @@ import { disableCategory, getBrandListData, getCategoryBrandListData, - getCategorySpecListData, getCategoryTree, - getSpecificationList, insertCategory, saveCategoryBrand, - saveCategorySpec, updateCategory, } from "@/api/goods"; import uploadPicInput from "@/components/lili/upload-pic-input"; @@ -171,18 +146,14 @@ export default { categoryList: [], loading: false, brands: [], - specifications: [], categoryId: "", - categorySpecs: [], modalType: 0, modalVisible: false, modalBrandVisible: false, - modalSpecVisible: false, modalTitle: "", showParent: false, parentTitle: "", modalBrandTitle: "", - modalSpecTitle: "", formAdd: { parentId: "", name: "", @@ -196,9 +167,6 @@ export default { categoryBrands: [], }, brandWay: [], - specForm: { - categorySpecs: [], - }, formValidate: { commissionRate: [regular.REQUIRED, regular.INTEGER], name: [regular.REQUIRED, regular.VARCHAR20], @@ -245,20 +213,12 @@ export default { init() { this.getAllList(); this.getBrandList(); - this.getSpecList(); }, getBrandList() { getBrandListData().then((res) => { this.brandWay = res; }); }, - getSpecList() { - getSpecificationList().then((res) => { - if (res.length != 0) { - this.specifications = res.result; - } - }); - }, brandOperation(v) { getCategoryBrandListData(v.id).then((res) => { this.categoryId = v.id; @@ -267,23 +227,6 @@ export default { this.modalBrandVisible = true; }); }, - specOperation(v) { - getCategorySpecListData(v.id).then((res) => { - this.categoryId = v.id; - this.modalSpecTitle = "规格关联"; - this.specForm.categorySpecs = res.map((item) => item.id); - this.modalSpecVisible = true; - }); - }, - saveCategorySpec() { - saveCategorySpec(this.categoryId, this.specForm).then((res) => { - this.submitLoading = false; - if (res.success) { - ElMessage.success("操作成功"); - this.modalSpecVisible = false; - } - }); - }, saveCategoryBrand() { saveCategoryBrand(this.categoryId, this.brandForm).then((res) => { this.submitLoading = false; diff --git a/manager/src/views/logistics/index.vue b/manager/src/views/logistics/index.vue index 35dab4a8..f4486cb4 100644 --- a/manager/src/views/logistics/index.vue +++ b/manager/src/views/logistics/index.vue @@ -137,6 +137,13 @@ export default { trigger: "blur", }, ], + code: [ + { + required: true, + message: "请输入物流公司编码", + trigger: "blur", + }, + ], }, submitLoading: false, data: [], @@ -192,10 +199,12 @@ export default { if (this.modalTitle === "添加") { const payload = { - ...this.form, + name: this.form.name, + code: this.form.code, + disabled: this.form.disabled, standBy: normalizeStandBy(this.form.standBy), + formItems: this.form.formItems, }; - delete payload.id; addLogistics(payload).then((res) => { this.submitLoading = false; if (res.success) { diff --git a/manager/src/views/promotions/coupon-activity/coupon-publish.vue b/manager/src/views/promotions/coupon-activity/coupon-publish.vue index ec76c611..10d218c7 100644 --- a/manager/src/views/promotions/coupon-activity/coupon-publish.vue +++ b/manager/src/views/promotions/coupon-activity/coupon-publish.vue @@ -200,15 +200,21 @@ export default { submitLoading: false, selectCouponList: [], formRule: { - promotionName: [{ required: true, message: "活动名称不能为空", trigger: "blur" }], + promotionName: [{ required: true, message: "活动名称不能为空" }], rangeTime: [ { - type: "array", required: true, - message: "请选择活动有效期", + validator: (rule, value, callback) => { + if (!value || !Array.isArray(value) || value.length !== 2 || !value[0] || !value[1]) { + callback(new Error("请选择活动有效期")); + } else { + callback(); + } + }, trigger: "change", }, ], + description: [{ required: true, message: "请输入范围描述" }], }, }; }, @@ -297,6 +303,7 @@ export default { this.showCouponSelect = true; }, handleSubmit() { + // 自动发券只能全用户发送:如有自动发券且非全用户,提示并强制切换 if ( this.form.couponActivityType === "AUTO_COUPON" && this.form.activityScope !== "ALL" @@ -326,15 +333,16 @@ export default { return; } + // 统一取时间逻辑 const [start, end] = this.form.rangeTime; const startDate = start instanceof Date ? start : new Date(start); const endDate = end instanceof Date ? end : new Date(end); + this.form.startTime = this.$filters.unixToDate(startDate.getTime() / 1000); + this.form.endTime = this.$filters.unixToDate(endDate.getTime() / 1000); + const params = JSON.parse(JSON.stringify(this.form)); - params.startTime = this.$filters.unixToDate(startDate.getTime() / 1000); - params.endTime = this.$filters.unixToDate(endDate.getTime() / 1000); delete params.rangeTime; delete params.id; - this.submitLoading = true; saveActivityCoupon(params).then((res) => { this.submitLoading = false; diff --git a/manager/src/views/promotions/kanjia/kanjia-activity-edit-goods.vue b/manager/src/views/promotions/kanjia/kanjia-activity-edit-goods.vue index e243966c..43ece4f4 100644 --- a/manager/src/views/promotions/kanjia/kanjia-activity-edit-goods.vue +++ b/manager/src/views/promotions/kanjia/kanjia-activity-edit-goods.vue @@ -68,10 +68,10 @@ v-model="form.rangeTime" type="datetimerange" format="YYYY-MM-DD HH:mm:ss" - value-format="YYYY-MM-DD HH:mm:ss" start-placeholder="开始时间" end-placeholder="结束时间" - :disabled-date="disabledDate" + placeholder="请选择" + :disabled-date="options.disabledDate" />
@@ -153,9 +153,21 @@ export default { { required: true, message: "请输入最高可砍金额" }, { validator: checkHighestPrice }, ], - rangeTime: [{ required: true, message: "请选择活动时间" }], + rangeTime: [ + { + type: "array", + required: true, + message: "请选择活动时间", + trigger: "change", + }, + ], stock: [{ required: true, message: "请输入活动库存" }], }, + options: { + disabledDate(date) { + return date && date.valueOf() < Date.now() - 86400000; + }, + }, }; }, async mounted() { @@ -165,9 +177,6 @@ export default { } }, methods: { - disabledDate(date) { - return date && date.getTime() < Date.now() - 86400000; - }, getKanJiaActivityGoods() { getKanJiaActivityGoodsById(this.id).then((res) => { this.form = res.result; @@ -176,58 +185,62 @@ export default { }, handleSubmit() { this.$refs.form.validate((valid) => { - if (valid) { - const params = JSON.parse(JSON.stringify(this.form)); - if (!this.form.rangeTime || this.form.rangeTime.length !== 2) { - this.$Message.error("请选择活动时间"); - return; - } - params.startTime = this.form.rangeTime[0]; - params.endTime = this.form.rangeTime[1]; - delete params.rangeTime; - - if (params.stock <= 0 || params.stock > params.goodsSku.quantity) { - this.$Message.error("活动库存不能为0且不能超过商品库存"); - return; - } - if (!regular.money.test(params.settlementPrice)) { - this.$Message.error("结算价格金额格式不正确"); - return; - } - if (params.settlementPrice < 0 || params.settlementPrice > params.price) { - this.$Message.error("结算价格金额不能为0且不能超过商品价格"); - return; - } - if (!regular.money.test(params.highestPrice)) { - this.$Message.error("最高可砍金额格式错误"); - return; - } - if (params.highestPrice <= 0 || params.highestPrice > params.price) { - this.$Message.error("最高可砍金额不能为0且不能超过商品价格"); - return; - } - if (!regular.money.test(params.lowestPrice)) { - this.$Message.error("最低可砍金额格式错误"); - return; - } - if (params.lowestPrice <= 0 || params.lowestPrice > params.price) { - this.$Message.error("最低可砍金额不能为0"); - return; - } - if (params.lowestPrice > params.highestPrice) { - this.$Message.error("最低砍价金额不能大于最高砍价金额"); - return; - } - - this.submitLoading = true; - editKanJiaActivityGoods(params).then((res) => { - this.submitLoading = false; - if (res.success) { - this.$Message.success("砍价活动修改成功"); - this.closeCurrentPage(); - } - }); + if (!valid) { + return; } + const params = JSON.parse(JSON.stringify(this.form)); + const [start, end] = this.form.rangeTime || []; + if (!start || !end) { + this.$Message.error("请选择活动时间"); + return; + } + const startDate = start instanceof Date ? start : new Date(start); + const endDate = end instanceof Date ? end : new Date(end); + params.startTime = this.$filters.unixToDate(startDate.getTime() / 1000); + params.endTime = this.$filters.unixToDate(endDate.getTime() / 1000); + delete params.rangeTime; + + if (params.stock <= 0 || params.stock > params.goodsSku.quantity) { + this.$Message.error("活动库存不能为0且不能超过商品库存"); + return; + } + if (!regular.money.test(params.settlementPrice)) { + this.$Message.error("结算价格金额格式不正确"); + return; + } + if (params.settlementPrice < 0 || params.settlementPrice > params.price) { + this.$Message.error("结算价格金额不能为0且不能超过商品价格"); + return; + } + if (!regular.money.test(params.highestPrice)) { + this.$Message.error("最高可砍金额格式错误"); + return; + } + if (params.highestPrice <= 0 || params.highestPrice > params.price) { + this.$Message.error("最高可砍金额不能为0且不能超过商品价格"); + return; + } + if (!regular.money.test(params.lowestPrice)) { + this.$Message.error("最低可砍金额格式错误"); + return; + } + if (params.lowestPrice <= 0 || params.lowestPrice > params.price) { + this.$Message.error("最低可砍金额不能为0"); + return; + } + if (params.lowestPrice > params.highestPrice) { + this.$Message.error("最低砍价金额不能大于最高砍价金额"); + return; + } + + this.submitLoading = true; + editKanJiaActivityGoods(params).then((res) => { + this.submitLoading = false; + if (res.success) { + this.$Message.success("砍价活动修改成功"); + this.closeCurrentPage(); + } + }); }); }, closeCurrentPage() { diff --git a/manager/src/views/sys/user-manage/userManage.vue b/manager/src/views/sys/user-manage/userManage.vue index 0333c148..5910648e 100644 --- a/manager/src/views/sys/user-manage/userManage.vue +++ b/manager/src/views/sys/user-manage/userManage.vue @@ -104,7 +104,7 @@ - + @@ -178,9 +178,12 @@ export default { modalTitle: "", form: { username: "", + nickName: "", + password: "", mobile: "", email: "", - sex: "", + avatar: "", + description: "", roles: [], departmentId: 0, departmentTitle: "", @@ -285,18 +288,30 @@ export default { this.$refs.form.validate((valid) => { if (valid) { if (this.modalType == 0) { - const params = JSON.parse(JSON.stringify(this.form)); - delete params.id; - delete params.status; - if (params.password == "" || params.password == undefined) { + if (this.form.password == "" || this.form.password == undefined) { this.errorPass = "密码不能为空"; return; } - if (params.password.length < 6) { + if (this.form.password.length < 6) { this.errorPass = "密码长度不得少于6位"; return; } - params.password = this.md5(params.password); + if (Array.isArray(this.form.roles) && this.form.roles.length > 9) { + ElMessage.warning("角色最多选择9个"); + return; + } + const params = { + username: this.form.username, + password: this.form.password, + nickName: this.form.nickName, + mobile: this.form.mobile, + email: this.form.email, + avatar: this.form.avatar, + description: this.form.description, + departmentId: this.form.departmentId, + roles: this.form.roles, + }; + this.errorPass = ""; this.submitLoading = true; addUser(params).then((res) => { this.submitLoading = false; @@ -325,9 +340,12 @@ export default { this.modalTitle = "添加用户"; this.form = { username: "", + nickName: "", + password: "", mobile: "", email: "", - sex: "", + avatar: "", + description: "", roles: [], departmentId: 0, departmentTitle: "", diff --git a/seller/src/api/goods.js b/seller/src/api/goods.js index 8ce3d321..77e3de27 100644 --- a/seller/src/api/goods.js +++ b/seller/src/api/goods.js @@ -67,11 +67,6 @@ export const getCategoryBrandListData = (category_id, params) => { export const saveCategoryBrand = (category_id, params) => { return postRequest(`/category/brand/${category_id}`, params); }; -//保存获取关联规格 -export const saveCategorySpec = (category_id, params) => { - return postRequest(`/goods/categorySpec/${category_id}`, params); -}; - //获取所有可用品牌 export const getBrandListData = params => { return getRequest("/goods/brand/all", params); @@ -115,10 +110,6 @@ export const getSpecListData = params => { export const insertOrUpdateSpec = params => { return postRequest("/goods/spec/edit", params); }; -//根据分类id获取关联规格 -export const getCategorySpecListData = (category_id, params) => { - return getRequest(`/goods/categorySpec/${category_id}`, params); -}; //删除gUI个 export const delSpec = (id, params) => { return deleteRequest(`/goods/spec/del/${id}`, params); @@ -335,11 +326,6 @@ export const getCategoryParamsListDataSeller = (id, params) => { return getRequest(`/goods/categoryParameters/${id}`, params); }; -//保存获取关联规格 -export const getGoodsSpecInfoSeller = (category_id) => { - return getRequest(`/goods/spec/${category_id}`); -}; - //批量设置运费模板 export const batchShipTemplate = params => { return putRequest(`/goods/goods/freight`, params); diff --git a/seller/src/views/goods/goods-seller/goodsOperationSec.vue b/seller/src/views/goods/goods-seller/goodsOperationSec.vue index fe2832e5..94a15feb 100644 --- a/seller/src/views/goods/goods-seller/goodsOperationSec.vue +++ b/seller/src/views/goods/goods-seller/goodsOperationSec.vue @@ -1219,8 +1219,6 @@ export default { this.baseInfoForm.weight = response.result.skuList[0].weight; } - this.Get_SkuInfoByCategory(this.categoryId); - this.renderGoodsDetailSku(response.result.skuList); /** 查询品牌列表 */ @@ -2008,20 +2006,6 @@ export default { return generateCombinations(0, []); }, - /** 根据分类id获取系统设置规格信息*/ - Get_SkuInfoByCategory(categoryId) { - if (categoryId) { - API_GOODS.getGoodsSpecInfoSeller(categoryId).then((res) => { - if (res.length) { - res.forEach((e) => { - this.skuData.push(e.specName); - const vals = e.specValue ? e.specValue.split(",") : []; - this.skuVals.push(Array.from(new Set(vals))); - }); - } - }); - } - }, // 判断相同数组的值 scalarArrayEquals(array1, array2) { return ( @@ -2315,8 +2299,6 @@ export default { this.GET_GoodsParams(); /** 查询品牌列表 */ this.getGoodsBrandList(); - /** 查询分类绑定的规格信息 */ - this.Get_SkuInfoByCategory(this.categoryId); // 获取商品单位 this.GET_GoodsUnit(); // 获取当前店铺分类