|
|
@ -121,7 +121,7 @@ const checkFreeGoldRadio = function (rule, value, callback) { |
|
|
|
}; |
|
|
|
const rules = reactive({ |
|
|
|
jwcode: [{ required: true, message: "请输入精网号", trigger: "blur" }], |
|
|
|
productName: [{ required: true, message: "请选择消费商品", trigger: "blur" }], |
|
|
|
productName: [{ required: true, message: "请选择消费商品", trigger: "change" }], // 修改为 change |
|
|
|
taskCoin: [{ required: true, message: "请输入任务金币", trigger: "blur" }], |
|
|
|
freeCoin: [{ required: true, message: "请输入免费金币", trigger: "blur" }], |
|
|
|
rechargeCoin: [ |
|
|
@ -191,37 +191,39 @@ const getUser = async function (jwcode) { |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
//这是查询用户金币信息的接口 |
|
|
|
const userGold = ref({}); |
|
|
|
const getUserGold = async function (jwcode) { |
|
|
|
trimJwCode(); |
|
|
|
try { |
|
|
|
// 发送POST请求 |
|
|
|
const result = await request({ |
|
|
|
url: "/recharge/user", |
|
|
|
data: { |
|
|
|
jwcode: addConsume.value.jwcode, |
|
|
|
area: adminData.value.area, |
|
|
|
}, |
|
|
|
}); |
|
|
|
// 将响应结果存储到响应式数据中 |
|
|
|
console.log("请求成功", result); |
|
|
|
if (result.code === 0) { |
|
|
|
ElMessage.error(result.msg); |
|
|
|
} else { |
|
|
|
// 存储表格数据 |
|
|
|
userGold.value = result.data; |
|
|
|
addConsume.value.username = result.data.name; |
|
|
|
addConsume.value.area = result.data.area; |
|
|
|
ElMessage.success(result.msg); |
|
|
|
} |
|
|
|
} catch (error) { |
|
|
|
console.log("请求失败", error); |
|
|
|
ElMessage.error("无此精网号"); |
|
|
|
addConsume.value.jwcode = ""; |
|
|
|
// 在这里可以处理错误逻辑,比如显示错误提示等 |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
//下面这个也是校验精网号是否存在的方法,通过脱离文本框实现,但是上面方法绑定了信息面板,在输入正确的精网号后能显示。 |
|
|
|
// //这是查询用户金币信息的接口 |
|
|
|
// const userGold = ref({}); |
|
|
|
// const getUserGold = async function (jwcode) { |
|
|
|
// trimJwCode(); |
|
|
|
// try { |
|
|
|
// // 发送POST请求 |
|
|
|
// const result = await request({ |
|
|
|
// url: "/recharge/user", |
|
|
|
// data: { |
|
|
|
// jwcode: addConsume.value.jwcode, |
|
|
|
// area: adminData.value.area, |
|
|
|
// }, |
|
|
|
// }); |
|
|
|
// // 将响应结果存储到响应式数据中 |
|
|
|
// console.log("请求成功", result); |
|
|
|
// if (result.code === 0) { |
|
|
|
// ElMessage.error(result.msg); |
|
|
|
// } else { |
|
|
|
// // 存储表格数据 |
|
|
|
// userGold.value = result.data; |
|
|
|
// addConsume.value.username = result.data.name; |
|
|
|
// addConsume.value.area = result.data.area; |
|
|
|
// ElMessage.success(result.msg); |
|
|
|
// } |
|
|
|
// } catch (error) { |
|
|
|
// console.log("请求失败", error); |
|
|
|
// ElMessage.error("无此精网号"); |
|
|
|
// addConsume.value.jwcode = ""; |
|
|
|
// // 在这里可以处理错误逻辑,比如显示错误提示等 |
|
|
|
// } |
|
|
|
// }; |
|
|
|
|
|
|
|
function calculateCoins() { |
|
|
|
if ( |
|
|
@ -317,26 +319,85 @@ const getIndexs = async function (type) { |
|
|
|
|
|
|
|
// 选择商品名称是时触发的方法 |
|
|
|
const isHC = ref(0); |
|
|
|
const handleProductSelect = (productName) => { |
|
|
|
// 根据商品名称获取对应的商品信息 |
|
|
|
// indexs.value.productName = productName;为什么直接绑定??? |
|
|
|
// const handleProductSelect = (productName) => { |
|
|
|
// // 根据商品名称获取对应的商品信息 |
|
|
|
// // indexs.value.productName = productName;为什么直接绑定??? |
|
|
|
// if (productName === "homilychart") { |
|
|
|
// isHC.value = 1; |
|
|
|
// addConsume.value.productName = "homilychart"; // 商品名 |
|
|
|
// addConsume.value.indexName = ""; // 指标名 |
|
|
|
// } else { |
|
|
|
// isHC.value = 0; |
|
|
|
// addConsume.value.productName = productName; |
|
|
|
// addConsume.value.indexName = ""; |
|
|
|
// } |
|
|
|
// }; |
|
|
|
const indexs = ref([]); |
|
|
|
// const handleIndexSelect = () => { |
|
|
|
// if (isHC.value === 1 && addConsume.value.indexName) { |
|
|
|
// addConsume.value.productName = "homilychart" + addConsume.value.indexName; |
|
|
|
// } |
|
|
|
// }; |
|
|
|
|
|
|
|
// 商品搜索逻辑 |
|
|
|
const queryProductSearch = (queryString, cb) => { |
|
|
|
const results = queryString |
|
|
|
? goods.value.filter(item => |
|
|
|
item.name.toLowerCase().includes(queryString.toLowerCase()) |
|
|
|
) |
|
|
|
: goods.value; |
|
|
|
cb(results); |
|
|
|
}; |
|
|
|
|
|
|
|
// 指标搜索逻辑 |
|
|
|
const queryIndexSearch = (queryString, cb) => { |
|
|
|
const results = queryString |
|
|
|
? index.value.filter(item => // 将 indexData 替换为 index |
|
|
|
item.name.toLowerCase().includes(queryString.toLowerCase()) |
|
|
|
) |
|
|
|
: index.value; |
|
|
|
cb(results); |
|
|
|
}; |
|
|
|
|
|
|
|
// 商品选择处理(重点修改) |
|
|
|
const handleProductSelect = async (selectedItem) => { |
|
|
|
const productName = typeof selectedItem === 'string' |
|
|
|
? selectedItem |
|
|
|
: selectedItem?.name || ''; |
|
|
|
|
|
|
|
if (productName === "homilychart") { |
|
|
|
isHC.value = 1; |
|
|
|
addConsume.value.productName = "homilychart"; // 商品名 |
|
|
|
addConsume.value.indexName = ""; // 指标名 |
|
|
|
addConsume.value.productName = "homilychart"; |
|
|
|
addConsume.value.indexName = ""; |
|
|
|
// 动态获取指标数据 |
|
|
|
await getIndexs("homilychart"); |
|
|
|
} else { |
|
|
|
isHC.value = 0; |
|
|
|
addConsume.value.productName = productName; |
|
|
|
addConsume.value.indexName = ""; |
|
|
|
} |
|
|
|
}; |
|
|
|
const indexs = ref([]); |
|
|
|
const handleIndexSelect = () => { |
|
|
|
if (isHC.value === 1 && addConsume.value.indexName) { |
|
|
|
addConsume.value.productName = "homilychart" + addConsume.value.indexName; |
|
|
|
|
|
|
|
// 指标选择处理(重点修改) |
|
|
|
const handleIndexSelect = (selectedItem) => { |
|
|
|
if (isHC.value === 1) { |
|
|
|
const indexName = typeof selectedItem === 'string' |
|
|
|
? selectedItem |
|
|
|
: selectedItem?.name || ''; |
|
|
|
// 仅更新指标名称字段 |
|
|
|
addConsume.value.indexName = indexName; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// 处理自由输入指标 |
|
|
|
const handleIndexBlur = (e) => { |
|
|
|
if (isHC.value === 1 && e.target.value) { |
|
|
|
// 仅更新指标名称字段 |
|
|
|
addConsume.value.indexName = e.target.value; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
// 挂载 |
|
|
|
onMounted(async function () { |
|
|
|
await getAdminData(); |
|
|
@ -368,7 +429,7 @@ const handleSelectBlur = (value) => { |
|
|
|
ref="Ref" |
|
|
|
:rules="rules" |
|
|
|
label-width="auto" |
|
|
|
style="max-width: 750px" |
|
|
|
style="max-width: 750px;" |
|
|
|
class="form-style" |
|
|
|
> |
|
|
|
<el-form-item prop="jwcode" label="精网号"> |
|
|
@ -384,53 +445,50 @@ const handleSelectBlur = (value) => { |
|
|
|
>查询</el-button |
|
|
|
> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item |
|
|
|
prop="productName" |
|
|
|
label="商品名称" |
|
|
|
style="float: left; margin-right: -30px" |
|
|
|
> |
|
|
|
<el-select |
|
|
|
<div style="display: flex; align-items: center; gap: 20px;"> |
|
|
|
<el-form-item prop="productName" label="商品名称" style="flex: 1; margin-right: 0px"> |
|
|
|
<el-autocomplete |
|
|
|
v-model="addConsume.productName" |
|
|
|
placeholder="请选择" |
|
|
|
:fetch-suggestions="queryProductSearch" |
|
|
|
placeholder="请输入或选择商品" |
|
|
|
style="width: 300px" |
|
|
|
@change="handleProductSelect(addConsume.productName)" |
|
|
|
@blur="handleSelectBlur(addConsume.productName)" |
|
|
|
filterable |
|
|
|
allow-create |
|
|
|
default-first-option |
|
|
|
@select="handleProductSelect" |
|
|
|
value-key="name" |
|
|
|
clearable |
|
|
|
:trigger-on-focus="true" |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="item in goods" |
|
|
|
:key="item.value" |
|
|
|
:label="item.name" |
|
|
|
:value="item.name" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
<template #default="{ item }"> |
|
|
|
<div>{{ item.name }}</div> |
|
|
|
</template> |
|
|
|
</el-autocomplete> |
|
|
|
</el-form-item> |
|
|
|
<!-- prop为什么绑定productName --> |
|
|
|
<el-form-item prop="indexName" label="指标" v-if="isHC == 1"> |
|
|
|
<el-select |
|
|
|
|
|
|
|
<!-- 指标选择 --> |
|
|
|
<!-- 使用flex布局会使页面更灵活好用,修改之前选中商品名称后才会正常布局的bug --> |
|
|
|
<el-form-item prop="indexName" label="指标" v-if="isHC == 1" style="flex: 1;margin-left: -20px"> |
|
|
|
<el-autocomplete |
|
|
|
v-model="addConsume.indexName" |
|
|
|
placeholder="请选择" |
|
|
|
style="width: 100px" |
|
|
|
@change="handleIndexSelect" |
|
|
|
filterable |
|
|
|
:fetch-suggestions="queryIndexSearch" |
|
|
|
placeholder="请输入或选择指标" |
|
|
|
style="width: 140px" |
|
|
|
@select="handleIndexSelect" |
|
|
|
@blur="handleIndexBlur" |
|
|
|
value-key="name" |
|
|
|
:disabled="isHC !== 1" |
|
|
|
clearable |
|
|
|
free-solo |
|
|
|
allow-create |
|
|
|
default-first-option |
|
|
|
> |
|
|
|
<el-option |
|
|
|
v-for="item in index" |
|
|
|
:key="item.value" |
|
|
|
:label="item.name" |
|
|
|
:value="item.name" |
|
|
|
/> |
|
|
|
</el-select> |
|
|
|
<template #default="{ item }"> |
|
|
|
<div>{{ item.name }}</div> |
|
|
|
</template> |
|
|
|
</el-autocomplete> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item label="指标" v-else> |
|
|
|
<el-select disabled placeholder="请选择" style="width: 100px"> |
|
|
|
</el-select> |
|
|
|
<el-form-item label="指标" v-else style="flex:1;margin-left: -5px;"> |
|
|
|
<el-input disabled placeholder="无" style="width: 100px" /> |
|
|
|
</el-form-item> |
|
|
|
<el-form-item prop="allGold" label="消费金币总数"> |
|
|
|
</div> |
|
|
|
<el-form-item prop="allGold" label="消费金币总数" > |
|
|
|
<el-input |
|
|
|
v-model="addConsume.allGold" |
|
|
|
style="width: 100px" |
|
|
|