init
This commit is contained in:
378
miniprogram/pages/add-stock/add-stock.ts
Normal file
378
miniprogram/pages/add-stock/add-stock.ts
Normal file
@ -0,0 +1,378 @@
|
||||
// pages/add-stock/add-stock.ts
|
||||
// const geneTree = async () => {
|
||||
// return [...Array(10).keys()].map((el) => ({
|
||||
// value: el,
|
||||
// label: el,
|
||||
// }));
|
||||
import Message from "tdesign-miniprogram/message/index";
|
||||
import { uploadFile } from "../../api/file";
|
||||
import { addStockLog, modelList, productList, specList } from "../../api/stock";
|
||||
import httpClient from "../../utils/request";
|
||||
const dayjs = require("dayjs");
|
||||
// };
|
||||
Page({
|
||||
/**
|
||||
* 页面的初始数据
|
||||
*/
|
||||
data: {
|
||||
prodPicList: [],
|
||||
totalErrMsg: "",
|
||||
defaultTime: dayjs(dayjs().format("YYYY-MM-DD")).valueOf(),
|
||||
specPickerVisible: false,
|
||||
productPickerVisible: false,
|
||||
modelPickerVisible: false,
|
||||
typePickerVisible: false,
|
||||
dateVisible: false,
|
||||
stockLimit: 0,
|
||||
picList: [],
|
||||
productOptions: [
|
||||
{
|
||||
label: "323q",
|
||||
value: "313213",
|
||||
children: [],
|
||||
},
|
||||
],
|
||||
modelOptions: [],
|
||||
specOptions: [],
|
||||
types: [
|
||||
{
|
||||
label: "入库",
|
||||
value: "1",
|
||||
},
|
||||
{
|
||||
label: "出库",
|
||||
value: "2",
|
||||
},
|
||||
],
|
||||
form: {
|
||||
type: undefined,
|
||||
productId: undefined,
|
||||
modelId: undefined,
|
||||
specId: undefined,
|
||||
picList: [],
|
||||
total: undefined,
|
||||
date: dayjs(dayjs().format("YYYY-MM-DD")).format("YYYY-MM-DD HH:mm:ss"),
|
||||
},
|
||||
pickerSubTitles: ["选择产品", "选择型号", "选择规格"],
|
||||
},
|
||||
onPick(e: any) {
|
||||
console.log(e);
|
||||
this.setData({
|
||||
["productOptions[0].children"]: {
|
||||
value: "fdsf",
|
||||
label: "sdfa",
|
||||
},
|
||||
});
|
||||
},
|
||||
onChange(e: any) {
|
||||
const field = e.currentTarget.dataset.field;
|
||||
this.setData({
|
||||
[`form.${field}`]: e.detail.value,
|
||||
});
|
||||
if (field === "total") {
|
||||
if (
|
||||
parseInt(e.detail.value) > this.data.stockLimit &&
|
||||
this.data.form.type == 2
|
||||
) {
|
||||
this.setData({
|
||||
// @ts-ignore
|
||||
totalErrMsg: `出库数量不能大于库存数 : ` + this.data.stockLimit,
|
||||
});
|
||||
} else {
|
||||
this.setData({
|
||||
// @ts-ignore
|
||||
totalErrMsg: "",
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
onPickerChange(e: any) {
|
||||
console.log(e.detail);
|
||||
|
||||
const field = e.currentTarget.dataset.field;
|
||||
this.setData({
|
||||
[`form.${field}`]: e.detail.value[0],
|
||||
});
|
||||
if (field === "productId") {
|
||||
// load model options
|
||||
modelList({
|
||||
productId: this.data.form.productId,
|
||||
}).then((resp: any) => {
|
||||
this.setData({
|
||||
modelOptions: resp.rows.map((el: any) => ({
|
||||
label: el.name,
|
||||
value: el.modelId,
|
||||
})),
|
||||
});
|
||||
});
|
||||
} else if (field === "modelId") {
|
||||
// load spec options
|
||||
specList({
|
||||
modelId: this.data.form.modelId,
|
||||
}).then((resp: any) => {
|
||||
this.setData({
|
||||
specOptions: resp.rows.map((el: any) => ({
|
||||
...el,
|
||||
label: el.name,
|
||||
value: el.specId,
|
||||
})),
|
||||
});
|
||||
});
|
||||
} else if (field === "specId") {
|
||||
const spec: any = this.data.specOptions.find(
|
||||
(el: any) => el.value == e.detail.value[0]
|
||||
);
|
||||
console.log(spec);
|
||||
|
||||
this.setData({
|
||||
stockLimit: spec?.stock ?? 0,
|
||||
prodPicList:
|
||||
spec?.pic?.split(",")?.map((el: string) => {
|
||||
let url;
|
||||
if (el.startsWith("https://") || el.startsWith("http://")) {
|
||||
url = el;
|
||||
} else {
|
||||
url = `${httpClient.baseUrl}${el}`;
|
||||
}
|
||||
return {
|
||||
url,
|
||||
};
|
||||
}) ?? [],
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
onPickerCancel(e: any) {
|
||||
console.log(e);
|
||||
},
|
||||
|
||||
showPicker(e: any) {
|
||||
const { pickerKey } = e.currentTarget.dataset;
|
||||
this.setData({
|
||||
[`${pickerKey}`]: true,
|
||||
});
|
||||
},
|
||||
loadProductionOptions() {
|
||||
productList().then((resp: any) => {
|
||||
this.setData({
|
||||
productOptions: resp.rows.map((el: any) => ({
|
||||
label: el.name,
|
||||
value: el.productId,
|
||||
})),
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
handleAdd(e: any) {
|
||||
const { picList } = this.data;
|
||||
const { files } = e.detail;
|
||||
|
||||
this.setData({
|
||||
// @ts-ignore
|
||||
picList: [
|
||||
...picList,
|
||||
...files.map((el: any) => ({ ...el, status: "loading" })),
|
||||
],
|
||||
});
|
||||
// uploadFile(files[0]);
|
||||
|
||||
for (const file of files) {
|
||||
uploadFile(file)
|
||||
.then((resp: any) => {
|
||||
const { picList } = this.data;
|
||||
const index = picList.findIndex((el: any) => el.url === file.url);
|
||||
if (index != -1) {
|
||||
this.setData({
|
||||
[`picList[${index}].url`]: `${httpClient.baseUrl}${resp.url}`,
|
||||
[`picList[${index}].percent`]: 100,
|
||||
[`picList[${index}].status`]: null,
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
const { picList } = this.data;
|
||||
const index = picList.findIndex((el: any) => el.url === file.url);
|
||||
if (index != -1) {
|
||||
picList.splice(index, 1);
|
||||
this.setData({
|
||||
picList,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
hidePicker() {
|
||||
this.setData({
|
||||
dateVisible: false,
|
||||
});
|
||||
},
|
||||
handleRemove(e: any) {
|
||||
const { index } = e.detail;
|
||||
const { picList } = this.data;
|
||||
picList.splice(index, 1);
|
||||
this.setData({
|
||||
picList,
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面加载
|
||||
*/
|
||||
onLoad(option: any) {
|
||||
if (option.type) {
|
||||
this.setData({
|
||||
["form.type"]: option.type,
|
||||
});
|
||||
this.loadProductionOptions();
|
||||
} else {
|
||||
wx.navigateBack();
|
||||
}
|
||||
},
|
||||
validate() {
|
||||
const { form } = this.data;
|
||||
const rules = {
|
||||
specId: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择规格",
|
||||
},
|
||||
],
|
||||
type: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择类别",
|
||||
},
|
||||
],
|
||||
date: [
|
||||
{
|
||||
required: true,
|
||||
message: "请选择日期",
|
||||
},
|
||||
],
|
||||
total: [
|
||||
{
|
||||
required: true,
|
||||
message: "请输入数量",
|
||||
},
|
||||
{
|
||||
validation: () => {
|
||||
const { total } = this.data.form;
|
||||
if (this.data.form.type == 2) {
|
||||
// @ts-ignore
|
||||
return total > this.data.stockLimit;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
},
|
||||
message: "出库数量不能超过总库存",
|
||||
},
|
||||
],
|
||||
provePic: [
|
||||
{
|
||||
validation: () => {
|
||||
return this.data.picList.length == 0;
|
||||
},
|
||||
message: "请上传凭证照片",
|
||||
},
|
||||
],
|
||||
};
|
||||
for (const field of Object.keys(rules)) {
|
||||
// @ts-ignore
|
||||
for (const validation of rules[field]) {
|
||||
if (validation.validation) {
|
||||
console.log(validation.validation());
|
||||
|
||||
if (validation.validation()) {
|
||||
return validation.message;
|
||||
}
|
||||
}
|
||||
if (validation.required) {
|
||||
// @ts-ignore
|
||||
if (typeof form[field] === "array") {
|
||||
// @ts-ignore
|
||||
if (form[field].length <= 0) {
|
||||
return validation.message;
|
||||
// throw new Error(validation.message);
|
||||
}
|
||||
} else {
|
||||
// @ts-ignore
|
||||
if (!form[field]) {
|
||||
return validation.message;
|
||||
// throw new Error(validation.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
handleSubmitStock() {
|
||||
let message;
|
||||
message = this.validate();
|
||||
|
||||
if (message) {
|
||||
Message.error({
|
||||
context: this,
|
||||
offset: [20, 32],
|
||||
duration: 1000,
|
||||
content: message,
|
||||
});
|
||||
return;
|
||||
}
|
||||
const { form } = this.data;
|
||||
addStockLog({
|
||||
specId: form.specId,
|
||||
total: form.total,
|
||||
date: form.date,
|
||||
provePic: this.data.picList.map((el: any) => el.url).join(","),
|
||||
type: form.type,
|
||||
}).then(() => {
|
||||
const pages = getCurrentPages();
|
||||
const prevPage = pages[pages.length - 2];
|
||||
prevPage.handleRefresh();
|
||||
Message.success({
|
||||
context: this,
|
||||
offset: [20, 32],
|
||||
duration: 3000,
|
||||
content: "修改成功",
|
||||
});
|
||||
setTimeout(() => {
|
||||
wx.switchTab({
|
||||
url: "/pages/stock/stock",
|
||||
});
|
||||
}, 500);
|
||||
});
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
onReady() {},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面显示
|
||||
*/
|
||||
onShow() {},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面隐藏
|
||||
*/
|
||||
onHide() {},
|
||||
|
||||
/**
|
||||
* 生命周期函数--监听页面卸载
|
||||
*/
|
||||
onUnload() {},
|
||||
|
||||
/**
|
||||
* 页面相关事件处理函数--监听用户下拉动作
|
||||
*/
|
||||
onPullDownRefresh() {},
|
||||
|
||||
/**
|
||||
* 页面上拉触底事件的处理函数
|
||||
*/
|
||||
onReachBottom() {},
|
||||
|
||||
/**
|
||||
* 用户点击右上角分享
|
||||
*/
|
||||
onShareAppMessage() {},
|
||||
});
|
Reference in New Issue
Block a user