提交 a19ebb32 authored 作者: lidongxu's avatar lidongxu

refactor(promotion): 促销计划_变更计划时_门店可以修改(局限于当前经销商范围内)

新增计划时,门店是所有的
上级 3e263fa4
......@@ -84,15 +84,12 @@ export function updatePlanByWebAPI(data) {
}
// 查询门店列表
export function getPlanStoreListAPI(queryParams = {}) {
export function getPlanStoreListAPI(data) {
return request({
baseURL: VITE_APP_PROMOTION,
url: '/user/clientele/query/store/list',
method: 'POST',
data: {
storeNameVague: queryParams.storeName,
storeCode: queryParams.storeCode,
}
data
})
}
......
import { parseTime } from '@/utils'
/**
* 判断计划是否可编辑/删除
* 判断计划是否可变更/删除
* @param {*} row 计划信息对象
* @returns boolean true 可编辑/删除,false 不可编辑/删除
* @returns boolean true 可变更/删除,false 不可变更/删除
*/
export const checkPlanExpire = (row) => {
// 1. 计划已经开始,不可编辑/删除
if (row.planStatus === 0) {
return false
}
// 2. 计划未开始,但是上班时间已经 1 小时后,不可编辑/删除
// 1. 计划已经开始,不可变更/删除
// 2. 计划未开始,但是上班时间已经 1 小时后,不可变更/删除
const date = new Date()
const rowDate = new Date(row.clockInTime)
rowDate.setHours(rowDate.getHours() + 1)
if (row.planStatus === 1 && rowDate < date) {
return false
}
return !(rowDate < date || row.planStatus === 1)
}
// 3. 计划为 2 和 3(审核中/审核拒绝),不可编辑/删除
if (row.planStatus === 2 || row.planStatus === 3) {
return false
}
/**
* 判断计划是否可变更(单独判断按钮禁用状态)
* 活动日期小于等于今日日期,则禁用变更按钮
* @param {*} row 计划信息对象
* @returns boolean true 可变更,false 不可变更
*/
export const checkPlanChangeExpire = (row) => {
const date = new Date()
const rowDate = new Date(row.activityDate)
return !(rowDate <= date)
}
/**
......
......@@ -12,7 +12,6 @@
<van-cell-group inset>
<van-field v-model="form.storeName"
is-link
:disabled="!!planId"
label="选择门店"
required
:rules="[{ required: true, message: '请选择门店' }]"
......@@ -24,8 +23,7 @@
readonly
:value="form.storeName"
name="storeName"
placeholder="点击选择门店"
:disabled="!!planId">
placeholder="点击选择门店">
<p v-if="form.storeName && !planId">{{ form.storeAddr }} - {{ form.storeCode }}</p>
</div>
</template>
......@@ -33,7 +31,6 @@
<van-field :modelValue="parseTime(form.date, '{y}-{m}-{d}')"
is-link
readonly
:disabled="!!planId"
name="date"
label="活动日期"
placeholder="点击选择时间"
......@@ -177,6 +174,7 @@ const route = useRoute()
const clickBack = () => {
router.back()
}
const editDealerId = ref(null) // 变更计划的经销商 ID
const planId = route.params.planId
const init = async () => {
......@@ -188,6 +186,8 @@ const init = async () => {
form.inTime = parseTime(res.data.planInfo.clockInTime, "{h}:{i}")
form.outTime = parseTime(res.data.planInfo.clockOutTime, "{h}:{i}")
minTime.value = form.inTime + ":00"
editDealerId.value = res.data.planInfo.dealerId
}
if (planId) {
init()
......@@ -241,7 +241,8 @@ const selStoreName = async () => {
// 获取门店列表
const getStoreList = async (storeName) => {
const res = await getPlanStoreListAPI({
storeName
storeNameVague: storeName,
dealerId: editDealerId.value
})
columns.value = res.data.map(item => ({
text: item.storeName,
......@@ -352,6 +353,7 @@ const reset = () => {
form.outTime = ''
form.salary = 0
form.incidentals = 0
editDealerId.value = null
}
// Picker 选择器
......
......@@ -42,7 +42,7 @@
v-if="!showSelect && !query.isDeleted">
<van-button square
type="success"
text="编辑"
text="变更"
@click="editPlan(item)" />
<van-button square
type="danger"
......@@ -194,10 +194,10 @@ const querySearch = () => {
getPlanList()
}
// 编辑计划
// 变更计划
const editPlan = (row) => {
if (!checkPlanExpire(row)) {
return proxy.$modal.msgWarning('无法编辑,已执行或之前计划')
return proxy.$modal.msgWarning('无法变更,已执行或之前计划')
}
router.push(`/m/promotion_plan_editing/${row.id}`)
}
......
......@@ -82,7 +82,7 @@
link
:disabled="!selectableFn(scope.row)"
@click="editFn(scope.row)">
编辑
变更
</el-button>
<el-button type="danger"
link
......@@ -152,8 +152,7 @@
clearable
@change="selStoreInfo"
remote
:remote-method="remoteStoreMethod"
:disabled="!!addOrEditPlanForm.id">
:remote-method="remoteStoreMethod">
<el-option v-for="item in storeList"
:key="item.value"
:label="item.label"
......@@ -178,8 +177,7 @@
:clearable="false"
start-placeholder="活动日期"
value-format="YYYY-MM-DDTHH:mm:ss"
:disabled-date="disabledDateFn"
:disabled="!!addOrEditPlanForm.id" />
:disabled-date="disabledDateFn" />
</el-form-item>
</el-col>
</el-row>
......@@ -414,18 +412,21 @@ const editFn = (row) => {
inTime: parseTime(row.clockInTime, "{h}:{i}:{s}"),
outTime: parseTime(row.clockOutTime, "{h}:{i}:{s}")
}
editDealerId.value = row.dealerId
addOrEditPlanVisible.value = true
}
/*************** 新增/修改计划弹框 ***************/
// 新增/编辑计划表单弹框
// 新增/变更计划表单弹框
const addOrEditPlanVisible = ref(false)
const addOrEditPlanForm = ref({})
const activityModeList = ref(PROMOTION_ACTIVITY_MODE_LIST) // 活动模式
const editDealerId = ref(null) // 经销商 ID
// 重置表单
const resetAddOrEditPlanForm = () => {
addOrEditPlanForm.value = {}
selecteStoreInfo.value = ''
editDealerId.value = null
isInfoError.value = false
}
// 表单验证(所有都是必填项)
......@@ -494,7 +495,8 @@ const selecteStoreInfo = ref('')
const isInfoError = ref(false)
const getStoreList = async () => {
const { data } = await getPlanStoreListAPI({
storeName: addOrEditPlanForm.value.storeName
storeNameVague: addOrEditPlanForm.value.storeName,
dealerId: editDealerId.value
})
allStoreList.value = data
storeList.value = data.map(item => {
......@@ -587,7 +589,7 @@ const selEmployee = () => {
}
// 保存新增/编辑计划
// 保存新增/变更计划
const handleAddOrEditPlan = async () => {
// 表单校验
await proxy.$refs.addOrEditPlanRef.validate()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论