diff --git a/miniprogram/app.json b/miniprogram/app.json index 3066e68..7d402f7 100644 --- a/miniprogram/app.json +++ b/miniprogram/app.json @@ -26,7 +26,10 @@ "pages/manage/my/my", "pages/logs/loginLog/loginLog", "pages/logs/operateLog/operateLog", - "pages/manage/staff/staff" + "pages/manage/staff/staff", + "pages/other/transfer/transfer", + "pages/base/viewAttachment/viewAttachment", + "pages/other/outbound/outbound" ], "window": { "navigationBarTextStyle": "black", diff --git a/miniprogram/assets/icons/原料出库.svg b/miniprogram/assets/icons/原料出库.svg new file mode 100644 index 0000000..ea9e140 --- /dev/null +++ b/miniprogram/assets/icons/原料出库.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/miniprogram/assets/icons/调拨出库.svg b/miniprogram/assets/icons/调拨出库.svg new file mode 100644 index 0000000..3e05aa8 --- /dev/null +++ b/miniprogram/assets/icons/调拨出库.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/miniprogram/pages/base/viewAttachment/viewAttachment.json b/miniprogram/pages/base/viewAttachment/viewAttachment.json new file mode 100644 index 0000000..8c6576b --- /dev/null +++ b/miniprogram/pages/base/viewAttachment/viewAttachment.json @@ -0,0 +1,9 @@ +{ + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-image": "tdesign-miniprogram/image/image" + }, + "navigationBarTitleText": "附件列表" +} \ No newline at end of file diff --git a/miniprogram/pages/base/viewAttachment/viewAttachment.ts b/miniprogram/pages/base/viewAttachment/viewAttachment.ts new file mode 100644 index 0000000..069b282 --- /dev/null +++ b/miniprogram/pages/base/viewAttachment/viewAttachment.ts @@ -0,0 +1,125 @@ +import { OSSBaseUrl } from '@/utils/config'; +import { loginStatus, post } from '@/utils/https'; +import { + formatFileSize, + getAuthInfo, + getDataSet, + getFileType, + mediaPreview, + toArray, +} from '@/utils/util'; + +Page({ + /** + * 页面的初始数据 + */ + data: { + order_no: '', + head_id: '', + head_id2: '', + list: [] as any[], + fileIcon: { file: 'file', excel: 'file-excel', pdf: 'file-pdf' }, + }, + handleLogin(e: any) { + this.setData({ isLogin: e.detail }); + if (e.detail) { + this.init(); + } + }, + init() { + this.setData({ authInfo: getAuthInfo() }); + this.getList(); + }, + formatData(data: any) { + const list = toArray(data).map((el) => { + el._file_type = getFileType(el.file_name); + el.file_path = `${OSSBaseUrl}${el.file_path}`; + el._file_size = formatFileSize(el.file_size); + return el; + }); + this.setData({ list }); + }, + getList() { + if (this.data.order_no) { + // 销售订单 + post('Orders/getOrderFiles', { order_no: this.data.order_no }).then((res: any) => { + this.formatData(res.files); + }); + } else if (this.data.head_id) { + // 仓库采购 + post('ErpDepot/fileList', { head_id: this.data.head_id }).then((res: any) => { + this.formatData(res.data); + }); + } else if (this.data.head_id2) { + // 财务 + post('ErpFinance/fileList', { head_id: this.data.head_id2 }).then((res: any) => { + this.formatData(res.data); + }); + } + }, + onPreview(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + if (item._file_type != 'file') { + mediaPreview([item.file_path], item.file_path); + } + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + const { title, order_no = '', head_id = '', head_id2 = '' } = options || {}; + if (title) { + wx.setNavigationBarTitle({ title: decodeURIComponent(title) }); + } + this.data.order_no = order_no; + this.data.head_id = head_id; + this.data.head_id2 = head_id2; + this.setData({ loading: true }); + loginStatus() + .then(() => { + this.setData({ isLogin: true, loading: false }); + this.init(); + }) + .catch((err) => { + this.setData({ isLogin: false, loading: false }); + console.log('调用登录状态请求失败', err); + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() {}, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() {}, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() {}, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() {}, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() {}, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() {}, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() {}, +}); diff --git a/miniprogram/pages/base/viewAttachment/viewAttachment.wxml b/miniprogram/pages/base/viewAttachment/viewAttachment.wxml new file mode 100644 index 0000000..a6d7630 --- /dev/null +++ b/miniprogram/pages/base/viewAttachment/viewAttachment.wxml @@ -0,0 +1,14 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/miniprogram/pages/base/viewAttachment/viewAttachment.wxss b/miniprogram/pages/base/viewAttachment/viewAttachment.wxss new file mode 100644 index 0000000..a880bac --- /dev/null +++ b/miniprogram/pages/base/viewAttachment/viewAttachment.wxss @@ -0,0 +1 @@ +/* pages/other/viewAttachment/viewAttachment.wxss */ \ No newline at end of file diff --git a/miniprogram/pages/finance/giro/giro.ts b/miniprogram/pages/finance/giro/giro.ts index aa5ae2c..c557d22 100644 --- a/miniprogram/pages/finance/giro/giro.ts +++ b/miniprogram/pages/finance/giro/giro.ts @@ -118,6 +118,16 @@ Page({ }); }); }, + onViewAttachment(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + wx.navigateTo({ + url: `/pages/base/viewAttachment/viewAttachment?head_id2=${ + item.head_id + }&title=${encodeURIComponent(`${item.bill_no} 附件`)}`, + }); + }, /** * 生命周期函数--监听页面加载 */ diff --git a/miniprogram/pages/finance/giro/giro.wxml b/miniprogram/pages/finance/giro/giro.wxml index ab161d2..fa2cb53 100644 --- a/miniprogram/pages/finance/giro/giro.wxml +++ b/miniprogram/pages/finance/giro/giro.wxml @@ -45,6 +45,8 @@ 删除 + 附件({{item.total_att}}) 删除 + 附件({{item.total_att}}) 删除 + 附件({{item.total_att}}) 收付款 删除 + 附件({{item.file_cnt}}) { + const list = toArray(res.data); + if (list.length == 0 && this.data.params.curr_page > 1) { + this.getList(this.data.params.curr_page - 1); + } + this.setData({ + count: toNumber(res.count), + list: list, + }); + }); + }, + + onOrderDel(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + showModal({ content: `确认删除 ${item.bill_no}?` }).then(() => { + post('ErpDepot/depotHeadDel', { head_id: item.head_id }).then(() => { + toastSuccess('删除成功'); + sleep(() => { + this.getList(); + }, 1000); + }); + }); + }, + onViewAttachment(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + wx.navigateTo({ + url: `/pages/base/viewAttachment/viewAttachment?head_id=${ + item.head_id + }&title=${encodeURIComponent(`${item.bill_no} 附件`)}`, + }); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(_options) {}, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() {}, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + this.setData({ loading: true }); + loginStatus() + .then(() => { + this.setData({ isLogin: true, loading: false }); + this.init(); + }) + .catch((err) => { + this.setData({ isLogin: false, loading: false }); + console.log('调用登录状态请求失败', err); + }); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() {}, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() {}, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() {}, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() {}, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() {}, +}); diff --git a/miniprogram/pages/other/outbound/outbound.wxml b/miniprogram/pages/other/outbound/outbound.wxml new file mode 100644 index 0000000..23323ad --- /dev/null +++ b/miniprogram/pages/other/outbound/outbound.wxml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + {{ item.bill_no }} + + + + + + {{item.creator_name}} + ({{item.creator_nick_name}}) + + + + + + + + + 删除 + 附件({{item.total_att}}) + + + + \ No newline at end of file diff --git a/miniprogram/pages/other/outbound/outbound.wxss b/miniprogram/pages/other/outbound/outbound.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram/pages/other/transfer/transfer.json b/miniprogram/pages/other/transfer/transfer.json new file mode 100644 index 0000000..93601af --- /dev/null +++ b/miniprogram/pages/other/transfer/transfer.json @@ -0,0 +1,15 @@ +{ + "usingComponents": { + "search-popup": "/pages/components/search-popup/search-popup", + "card-plugin": "/pages/components/card-plugin/card-plugin", + "card-item-plugin": "/pages/components/card-item-plugin/card-item-plugin", + "option-cell-plugin": "/pages/components/option-cell-plugin/option-cell-plugin", + "date-picker-plugin": "/pages/components/date-picker-plugin/date-picker-plugin", + "sort-plugin": "/pages/components/sort-plugin/sort-plugin", + "count-plugin": "/pages/components/count-plugin/count-plugin", + "total-bar-plugin": "/pages/components/total-bar-plugin/total-bar-plugin", + "pagination-plugin": "/pages/components/pagination-plugin/pagination-plugin", + "search-input": "/pages/components/search-input/search-input" + }, + "navigationBarTitleText": "调拨出库" +} \ No newline at end of file diff --git a/miniprogram/pages/other/transfer/transfer.ts b/miniprogram/pages/other/transfer/transfer.ts new file mode 100644 index 0000000..bbda755 --- /dev/null +++ b/miniprogram/pages/other/transfer/transfer.ts @@ -0,0 +1,181 @@ +import { loginStatus, post } from '@/utils/https'; +import { + cloneLite, + getAuthInfo, + getDataSet, + showModal, + sleep, + toArray, + toastSuccess, + toNumber, +} from '@/utils/util'; + +const defaultParams = { curr_page: 1, page_count: 20, head_type: 9 }; + +Page({ + /** + * 页面的初始数据 + */ + data: { + params: cloneLite(defaultParams) as any, + list: [] as any[], + count: 0, + states: [ + { value: '', label: '全部' }, + { value: '1', label: '未审核' }, + { value: '2', label: '已审核' }, + ], + sort: [{ label: '创建日期', value: 'create_date' }], + }, + handleLogin(e: any) { + this.setData({ isLogin: e.detail }); + if (e.detail) { + this.init(); + } + }, + init() { + this.setData({ authInfo: getAuthInfo() }); + this.getList(); + }, + searchChange(e: any) { + const key = getDataSet(e).key; + this.data.params[key] = e.detail.value; + this.setData({ params: this.data.params }); + }, + searchChange2(e: any) { + const key = getDataSet(e).key; + const val = `${e.detail.value || ''}`.trim(); + if (val) { + this.data.params[key] = val; + } else { + delete this.data.params[key]; + } + this.setData({ params: this.data.params }); + }, + onOptionChange(e: any) { + const key = getDataSet(e).key; + this.data.params[key] = e.detail.value; + this.setData({ params: this.data.params }); + }, + datePickerConfirm(e: any) { + const data = getDataSet(e); + this.data.params[data.key] = e.detail.value; + this.setData({ params: this.data.params }); + }, + searchOk() { + this.getList(1); + }, + searchReset() { + this.data.params = cloneLite(defaultParams); + this.getList(1); + }, + onSort(e: any) { + this.data.params.order = e.detail.value; + this.setData({ params: this.data.params }); + this.getList(1); + }, + paginationChange(e: any) { + this.getList(e.detail.curr_page); + }, + getList(curr: number = 1) { + this.data.params.curr_page = curr; + this.setData({ params: this.data.params }); + const temp = cloneLite(this.data.params); + if (temp.order_step && temp.order_step.length) { + temp.order_step = temp.order_step.join(','); + } else { + delete temp.order_step; + } + + if (temp.process_state && temp.process_state.length) { + temp.process_state = temp.process_state.join(','); + } else { + delete temp.process_state; + } + + post('ErpDepot/depotHeadList', temp).then((res: any) => { + const list = toArray(res.data); + if (list.length == 0 && this.data.params.curr_page > 1) { + this.getList(this.data.params.curr_page - 1); + } + this.setData({ + count: toNumber(res.count), + list: list, + }); + }); + }, + + onOrderDel(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + showModal({ content: `确认删除 ${item.bill_no}?` }).then(() => { + post('ErpDepot/depotHeadDel', { head_id: item.head_id }).then(() => { + toastSuccess('删除成功'); + sleep(() => { + this.getList(); + }, 1000); + }); + }); + }, + onViewAttachment(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + wx.navigateTo({ + url: `/pages/base/viewAttachment/viewAttachment?head_id=${ + item.head_id + }&title=${encodeURIComponent(`${item.bill_no} 附件`)}`, + }); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad(_options) {}, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() {}, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + this.setData({ loading: true }); + loginStatus() + .then(() => { + this.setData({ isLogin: true, loading: false }); + this.init(); + }) + .catch((err) => { + this.setData({ isLogin: false, loading: false }); + console.log('调用登录状态请求失败', err); + }); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() {}, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() {}, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() {}, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() {}, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() {}, +}); diff --git a/miniprogram/pages/other/transfer/transfer.wxml b/miniprogram/pages/other/transfer/transfer.wxml new file mode 100644 index 0000000..e6f3620 --- /dev/null +++ b/miniprogram/pages/other/transfer/transfer.wxml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + {{ item.bill_no }} + + + + + {{item.creator_name}} + ({{item.creator_nick_name}}) + + + + + + + + 删除 + 附件({{item.total_att}}) + + + + \ No newline at end of file diff --git a/miniprogram/pages/other/transfer/transfer.wxss b/miniprogram/pages/other/transfer/transfer.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram/pages/purchase/backOrder/backOrder.ts b/miniprogram/pages/purchase/backOrder/backOrder.ts index f4b86a3..d7f4a2e 100644 --- a/miniprogram/pages/purchase/backOrder/backOrder.ts +++ b/miniprogram/pages/purchase/backOrder/backOrder.ts @@ -113,6 +113,16 @@ Page({ }); }); }, + onViewAttachment(e: any) { + const data = getDataSet(e); + const index = data.index; + const item = this.data.list[index]; + wx.navigateTo({ + url: `/pages/base/viewAttachment/viewAttachment?head_id=${ + item.head_id + }&title=${encodeURIComponent(`${item.bill_no} 附件`)}`, + }); + }, /** * 生命周期函数--监听页面加载 */ diff --git a/miniprogram/pages/purchase/backOrder/backOrder.wxml b/miniprogram/pages/purchase/backOrder/backOrder.wxml index d6ae4d4..e1edc0b 100644 --- a/miniprogram/pages/purchase/backOrder/backOrder.wxml +++ b/miniprogram/pages/purchase/backOrder/backOrder.wxml @@ -50,6 +50,8 @@ 删除 + 附件({{item.total_att}}) 删除 + 附件({{item.total_att}}) 删除 + 附件({{item.total_att}}) 删除 + 附件({{item.total_att}}) { return /\.(jpe?g|png|gif|svg|webp|bmp)$/i.test(path); }; +export const isPDFFile = (path: string) => { + return /\.(pdf)$/i.test(path); +}; + +/** 判断是不是Excel */ +export const isExcelFile = (path: string) => { + return /\.(xlsx|xls)$/i.test(path); +}; + +/** 获取文件类型 */ +export const getFileType = (path: string): 'file' | 'image' | 'excel' | 'pdf' => { + if (typeof path == 'string') { + if (isExcelFile(path)) { + return 'excel'; + } else if (isImageFile(path)) { + return 'image'; + } else if (isPDFFile(path)) { + return 'pdf'; + } + } + return 'file'; +}; + /** 滚动到顶部 */ export const scrollToTop = () => { wx.pageScrollTo({ scrollTop: 0 }); @@ -347,3 +370,16 @@ export const sleep = (callback?: () => void, ms = 300): Promise => { }; export const cloneLite = (data: any) => JSON.parse(JSON.stringify(data)); + +/** 转换文件大小 */ +export const formatFileSize = (fileSize: any): string => { + const file_size = toNumber(fileSize); + if (file_size == 0) { + return '0B'; + } + const unitArr = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + let index = 0; + index = Math.floor(Math.log(file_size) / Math.log(1024)); + const size = file_size / 1024 ** index; + return size.toFixed(0) + unitArr[index]; +};