f+Math.floor(c/2)?f:h;default:return r>=p&&r<=d?r:rn.length){var r=new Array(i-n.length).fill(-1);n.push.apply(n,(0,a.Z)(r))}else i0&&void 0!==arguments[0]&&arguments[0];if(null===S||e){var t=v.createElement("div"),i=t.style;i.width="50px",i.height="50px",i.overflow="scroll",i.direction="rtl";var n=v.createElement("div"),r=n.style;return r.width="100px",r.height="100px",t.appendChild(n),v.body.appendChild(t),t.scrollLeft>0?S="positive-descending":(t.scrollLeft=1,S=0===t.scrollLeft?"negative":"positive-ascending"),v.body.removeChild(t),S}return S}function areInputsEqual(e,t){if(e.length!==t.length)return!1;for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:function(){},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},n=(0,g.createSelectorQuery)();n.select(e).boundingClientRect((function(e){e?t(e):i()})).exec()}function createListComponent(e){var t,i,o=e.getItemOffset,s=e.getEstimatedTotalSize,g=e.getItemSize,v=e.getOffsetForIndexAndAlignment,S=e.getStartIndexForOffset,T=e.getStopIndexForStartIndex,C=e.initInstanceProps,O=e.shouldResetStyleCacheOnItemSizeChange,R=e.validateProps;return i=t=function(e){(0,h.Z)(List,e);var t=(0,m.Z)(List);function List(e){var i;return(0,f.Z)(this,List),(i=t.call(this,e))._instanceProps=C(i.props,(0,p.Z)(i)),i._outerRef=void 0,i._resetIsScrollingTimeoutId=null,i.state={id:i.props.id||"virtual-list-".concat(I++),instance:(0,p.Z)(i),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof i.props.initialScrollOffset?i.props.initialScrollOffset:0,scrollUpdateWasRequested:!1,sizeList:[]},i.props.unlimitedSize&&(i.state.sizeList=new Array(i.props.itemCount).fill(-1)),i.field={scrollLeft:0,scrollTop:0,scrollHeight:0,scrollWidth:0,clientHeight:0,clientWidth:0},i._callOnItemsRendered=void 0,i._callOnItemsRendered=memoizeOne((function(e,t,n,r){return i.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:r})})),i._callOnScroll=void 0,i._callOnScroll=memoizeOne((function(e,t,n,r){return i.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n,detail:r})})),i._getSize=void 0,i._getSize=function(e){return"number"==typeof e&&e>=0?e:i.props.itemSize},i._getSizeUploadSync=void 0,i._getSizeUploadSync=function(e,t){var n="#".concat(i.state.id,"-").concat(e);return new Promise((function(r){var o=function success(n){var o=n.width,l=n.height,s=i.state.sizeList,c=t?o:l;c!==s[e]&&(s[e]=i._getSize(c),i.setState({sizeList:(0,a.Z)(s)},(function(){r(i._getSize(c))})))};getRectSize(n,o,(function fail(){var t=i._getRangeToRender(),r=(0,u.Z)(t,2),l=r[0],s=r[1];e>=l&&e<=s&&setTimeout((function(){getRectSize(n,o,fail)}),100)}))}))},i._getSizeUpload=function(e,t){i._getSizeUploadSync(e,t);var n=i.state.sizeList;return i._getSize(n[e])},i._getCountSize=void 0,i._getCountSize=function(e,t){return e.unlimitedSize?i.state.sizeList.slice(0,t).reduce((function(e,t){return e+i._getSize(t)}),0):e.itemSize*t},i._getSizeCount=void 0,i._getSizeCount=function(e,t){if(0===t)return 0;if(!e.unlimitedSize)return Math.min(e.itemCount-1,Math.floor(t/e.itemSize));var n=0;return i.state.sizeList.reduce((function(e,r){return r=i._getSize(r),n=t?e.call(null):n.id=(0,y.requestAnimationFrame)(tick)}))};return n}(i._resetIsScrolling,200)},i._resetIsScrolling=function(){i._resetIsScrollingTimeoutId=null,i.setState({isScrolling:!1},(function(){i._getItemStyleCache(-1,null)}))},i}return(0,d.Z)(List,[{key:"scrollTo",value:function scrollTo(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset1&&void 0!==arguments[1]?arguments[1]:"auto",i=this.props.itemCount,n=this.state.scrollOffset;e=Math.max(0,Math.min(e,i-1)),this.scrollTo(v(this.props,this.state.id,e,t,n,this))}},{key:"componentDidMount",value:function componentDidMount(){var e=this.props.initialScrollOffset;if("number"==typeof e&&null!=this._outerRef){var t=this._outerRef;isHorizontalFunc(this.props)?t.scrollLeft=e:t.scrollTop=e}this._callPropsCallbacks()}},{key:"componentDidUpdate",value:function componentDidUpdate(e,t){var i=this,n=this.state,r=n.scrollOffset;if(n.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if(isHorizontalFunc(this.props))if(isRtlFunc(this.props))switch(getRTLOffsetType()){case"negative":o.scrollLeft=-r;break;case"positive-ascending":o.scrollLeft=r;break;default:var l=o.clientWidth,s=o.scrollWidth;o.scrollLeft=s-l-r}else o.scrollLeft=r;else o.scrollTop=r}this._callPropsCallbacks(e,t),setTimeout((function(){for(var e=i._getRangeToRender(),t=(0,u.Z)(e,2),n=t[0],r=t[1],o=isHorizontalFunc(i.props),l=n;l<=r;l++)i._getSizeUploadSync(l,o)}),0)}},{key:"componentWillUnmount",value:function componentWillUnmount(){null!==this._resetIsScrollingTimeoutId&&cancelTimeout(this._resetIsScrollingTimeoutId)}},{key:"render",value:function render(){var e=this.props,t=e.children,i=e.className,a=e.direction,c=e.height,f=e.innerRef,d=e.innerElementType,p=e.innerTagName,h=e.itemElementType,m=e.itemTagName,v=e.itemCount,S=e.itemData,y=e.itemKey,I=void 0===y?z:y,T=e.layout,C=e.outerElementType,O=e.outerTagName,R=e.style,w=e.useIsScrolling,x=e.width,L=e.position,b=e.renderTop,E=e.renderBottom,k=(0,r.Z)(e,_),Z=this.state,M=Z.id,F=Z.isScrolling,W=Z.scrollOffset,P=Z.scrollUpdateWasRequested,D=isHorizontalFunc(this.props),H=D?this._onScrollHorizontal:this._onScrollVertical,U=this._getRangeToRender(),q=(0,u.Z)(U,2),N=q[0],V=q[1],A=[];if(v>0)for(var G=N;G<=V;G++){var K=I(G,S),B=void 0;if("relative"===L){var J=g(this.props,G,this);B={height:this._getStyleValue(D?"100%":J),width:this._getStyleValue(D?J:"100%")}}else B=this._getItemStyle(G);A.push((0,l.createElement)(h||m||"div",{key:K,style:B},(0,l.createElement)(t,{id:"".concat(M,"-").concat(G),data:S,index:G,isScrolling:w?F:void 0})))}var $=s(this.props,this),j=(0,n.Z)((0,n.Z)({},k),{},{id:M,className:i,onScroll:H,ref:this._outerRefSetter,layout:T,style:(0,n.Z)({position:"relative",height:this._getStyleValue(c),width:this._getStyleValue(x),overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},R)});if(P&&(D?j.scrollLeft=W:j.scrollTop=W),"relative"===L){var Q=o(this.props,N,this);return(0,l.createElement)(C||O||"div",j,b,(0,l.createElement)(h||m||"div",{key:"".concat(M,"-pre"),id:"".concat(M,"-pre"),style:{height:D?"100%":this._getStyleValue(Q),width:D?this._getStyleValue(Q):"100%"}}),(0,l.createElement)(d||p||"div",{ref:f,key:"".concat(M,"-inner"),id:"".concat(M,"-inner"),style:{pointerEvents:F?"none":"auto"}},A),E)}return(0,l.createElement)(C||O||"div",j,b,(0,l.createElement)(d||p||"div",{ref:f,key:"".concat(M,"-inner"),id:"".concat(M,"-inner"),style:{height:this._getStyleValue(D?"100%":$),pointerEvents:F?"none":"auto",width:this._getStyleValue(D?$:"100%")}},A),E)}},{key:"_callPropsCallbacks",value:function _callPropsCallbacks(e,t){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0&&!e&&e.itemCount!==this.props.itemCount){var i=this._getRangeToRender(),n=(0,u.Z)(i,4),r=n[0],o=n[1],l=n[2],s=n[3];this._callOnItemsRendered(r,o,l,s)}"function"==typeof this.props.onScroll&&(t&&t.scrollDirection===this.state.scrollDirection&&t.scrollOffset===this.state.scrollOffset&&t.scrollUpdateWasRequested===this.state.scrollUpdateWasRequested||this._callOnScroll(this.state.scrollDirection,this.state.scrollOffset,this.state.scrollUpdateWasRequested,this.field))}},{key:"_getRangeToRender",value:function _getRangeToRender(){var e=this.props,t=e.itemCount,i=e.overscanCount,n=this.state,r=n.isScrolling,o=n.scrollDirection,l=n.scrollOffset;if(0===t)return[0,0,0,0];var s=S(this.props,l,this),a=T(this.props,l,s,this),c=r&&"backward"!==o?1:Math.max(1,i),u=r&&"forward"!==o?1:Math.max(1,i);return[Math.max(0,s-c),Math.max(0,Math.min(t-1,a+u)),s,a]}}],[{key:"getDerivedStateFromProps",value:function getDerivedStateFromProps(e,t){return R(e,t),null}}]),List}(l.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},i}var T=createListComponent({getItemOffset:function getItemOffset(e,t,i){return e.unlimitedSize?i._getCountSize(e,t):t*e.itemSize},getItemSize:function getItemSize(e,t,i){return e.unlimitedSize?i._getSizeUpload(t,isHorizontalFunc(e)):e.itemSize},getEstimatedTotalSize:function getEstimatedTotalSize(e,t){return t._getCountSize(e,e.itemCount)},getOffsetForIndexAndAlignment:function getOffsetForIndexAndAlignment(e,t,i,n,r,o){var l=e.height,s=e.width,a=o.state.sizeList,c=isHorizontalFunc(e)?s:l,u=o._getSize(a[i]),f=Math.max(0,o._getCountSize(e,e.itemCount)-c),d=Math.min(f,o._getCountSize(e,i)),p=Math.max(0,o._getCountSize(e,i)-c+u);switch("smart"===n&&(n=r>=p-c&&r<=d+c?"auto":"center"),n){case"start":return d;case"end":return p;case"center":var h=Math.round(p+(d-p)/2);return hf+Math.floor(c/2)?f:h;default:return r>=p&&r<=d?r:rn.length){var r=new Array(i-n.length).fill(-1);n.push.apply(n,(0,a.Z)(r))}else it.length)&&(e=t.length);for(var r=0,n=new Array(e);r=0;--n){var o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return handle("end");if(o.tryLoc<=this.prev){var a=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(a&&c){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),u}},catch:function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(t,e,r){return this.delegate={iterator:values(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),u}},t}},885:function(t,e,r){r.d(e,{Z:function(){return _slicedToArray}});var n=r(181);function _slicedToArray(t,e){return function _arrayWithHoles(t){if(Array.isArray(t))return t}(t)||function _iterableToArrayLimit(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],a=!0,c=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);a=!0);}catch(t){c=!0,o=t}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}}(t,e)||(0,n.Z)(t,e)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},2982:function(t,e,r){r.d(e,{Z:function(){return _toConsumableArray}});var n=r(907);var o=r(181);function _toConsumableArray(t){return function _arrayWithoutHoles(t){if(Array.isArray(t))return(0,n.Z)(t)}(t)||function _iterableToArray(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||(0,o.Z)(t)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},1002:function(t,e,r){function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}r.d(e,{Z:function(){return _typeof}})},181:function(t,e,r){r.d(e,{Z:function(){return _unsupportedIterableToArray}});var n=r(907);function _unsupportedIterableToArray(t,e){if(t){if("string"==typeof t)return(0,n.Z)(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?(0,n.Z)(t,e):void 0}}}}]);
\ No newline at end of file
+"use strict";(wx.webpackJsonp=wx.webpackJsonp||[]).push([[1216],{907:function(t,e,r){function _arrayLikeToArray(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}r.d(e,{Z:function(){return _objectWithoutProperties}})},4165:function(t,e,r){r.d(e,{Z:function(){return _regeneratorRuntime}});var n=r(1002);function _regeneratorRuntime(){_regeneratorRuntime=function _regeneratorRuntime(){return t};var t={},e=Object.prototype,r=e.hasOwnProperty,o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",a=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function define(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{define({},"")}catch(t){define=function define(t,e,r){return t[e]=r}}function wrap(t,e,r,n){var o=e&&e.prototype instanceof Generator?e:Generator,i=Object.create(o.prototype),a=new Context(n||[]);return i._invoke=function(t,e,r){var n="suspendedStart";return function(o,i){if("executing"===n)throw new Error("Generator is already running");if("completed"===n){if("throw"===o)throw i;return doneResult()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var c=maybeInvokeDelegate(a,r);if(c){if(c===u)continue;return c}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===n)throw n="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);n="executing";var f=tryCatch(t,e,r);if("normal"===f.type){if(n=r.done?"completed":"suspendedYield",f.arg===u)continue;return{value:f.arg,done:r.done}}"throw"===f.type&&(n="completed",r.method="throw",r.arg=f.arg)}}}(t,r,a),i}function tryCatch(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}t.wrap=wrap;var u={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var f={};define(f,i,(function(){return this}));var l=Object.getPrototypeOf,s=l&&l(l(values([])));s&&s!==e&&r.call(s,i)&&(f=s);var y=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(f);function defineIteratorMethods(t){["next","throw","return"].forEach((function(e){define(t,e,(function(t){return this._invoke(e,t)}))}))}function AsyncIterator(t,e){function invoke(o,i,a,c){var u=tryCatch(t[o],t,i);if("throw"!==u.type){var f=u.arg,l=f.value;return l&&"object"==(0,n.Z)(l)&&r.call(l,"__await")?e.resolve(l.__await).then((function(t){invoke("next",t,a,c)}),(function(t){invoke("throw",t,a,c)})):e.resolve(l).then((function(t){f.value=t,a(f)}),(function(t){return invoke("throw",t,a,c)}))}c(u.arg)}var o;this._invoke=function(t,r){function callInvokeWithMethodAndArg(){return new e((function(e,n){invoke(t,r,e,n)}))}return o=o?o.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}}function maybeInvokeDelegate(t,e){var r=t.iterator[e.method];if(void 0===r){if(e.delegate=null,"throw"===e.method){if(t.iterator.return&&(e.method="return",e.arg=void 0,maybeInvokeDelegate(t,e),"throw"===e.method))return u;e.method="throw",e.arg=new TypeError("The iterator does not provide a 'throw' method")}return u}var n=tryCatch(r,t.iterator,e.arg);if("throw"===n.type)return e.method="throw",e.arg=n.arg,e.delegate=null,u;var o=n.arg;return o?o.done?(e[t.resultName]=o.value,e.next=t.nextLoc,"return"!==e.method&&(e.method="next",e.arg=void 0),e.delegate=null,u):o:(e.method="throw",e.arg=new TypeError("iterator result is not an object"),e.delegate=null,u)}function pushTryEntry(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function resetTryEntry(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function Context(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(pushTryEntry,this),this.reset(!0)}function values(t){if(t){var e=t[i];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,o=function next(){for(;++n=0;--n){var o=this.tryEntries[n],i=o.completion;if("root"===o.tryLoc)return handle("end");if(o.tryLoc<=this.prev){var a=r.call(o,"catchLoc"),c=r.call(o,"finallyLoc");if(a&&c){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),resetTryEntry(r),u}},catch:function _catch(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var o=n.arg;resetTryEntry(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(t,e,r){return this.delegate={iterator:values(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=void 0),u}},t}},885:function(t,e,r){r.d(e,{Z:function(){return _slicedToArray}});var n=r(181);function _slicedToArray(t,e){return function _arrayWithHoles(t){if(Array.isArray(t))return t}(t)||function _iterableToArrayLimit(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i=[],a=!0,c=!1;try{for(r=r.call(t);!(a=(n=r.next()).done)&&(i.push(n.value),!e||i.length!==e);a=!0);}catch(t){c=!0,o=t}finally{try{a||null==r.return||r.return()}finally{if(c)throw o}}return i}}(t,e)||(0,n.Z)(t,e)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},2982:function(t,e,r){r.d(e,{Z:function(){return _toConsumableArray}});var n=r(907);var o=r(181);function _toConsumableArray(t){return function _arrayWithoutHoles(t){if(Array.isArray(t))return(0,n.Z)(t)}(t)||function _iterableToArray(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||(0,o.Z)(t)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}},1002:function(t,e,r){function _typeof(t){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_typeof(t)}r.d(e,{Z:function(){return _typeof}})},181:function(t,e,r){r.d(e,{Z:function(){return _unsupportedIterableToArray}});var n=r(907);function _unsupportedIterableToArray(t,e){if(t){if("string"==typeof t)return(0,n.Z)(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?(0,n.Z)(t,e):void 0}}}}]);
\ No newline at end of file
diff --git a/project.private.config.json b/project.private.config.json
index 9a1e32c..ec9a318 100644
--- a/project.private.config.json
+++ b/project.private.config.json
@@ -9,6 +9,27 @@
"condition": {
"miniprogram": {
"list": [
+ {
+ "name": "提货详情",
+ "pathName": "pages/takeDeliveryDetail/index",
+ "query": "id=33356",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "提货列表",
+ "pathName": "pages/takeDelivery/index",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "发货详情",
+ "pathName": "pages/deliveryDetail/index",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
{
"name": "发货列表",
"pathName": "pages/delivery/index",
@@ -115,9 +136,9 @@
"scene": null
},
{
- "name": "",
- "pathName": "pages/applyMoney/index",
- "query": "orderId=28411",
+ "name": "我的",
+ "pathName": "pages/user/index",
+ "query": "",
"launchMode": "default",
"scene": null
},
diff --git a/src/api/index.ts b/src/api/index.ts
index 35f83bc..0b01765 100644
--- a/src/api/index.ts
+++ b/src/api/index.ts
@@ -21,6 +21,17 @@ export {
EnumSaleorderStatus,
} from './delivery/index'
+export {
+ EnumTakeGoodsOrderStatus,
+ EnumTakeGoodsOrderTypeList,
+ TakeGoodsOrderList,
+ TakeGoodsOrderRefuse,
+ TakeGoodsOrderAudit,
+ TakeGoodsOrder,
+ UserInvitationInfoRecord,
+ GenBarCodeOrQrCode,
+} from './takeDelivery/index'
+
import { useRequest } from '@/use/useHttp'
/**
* 系列列表
diff --git a/src/api/shopping/index.ts b/src/api/shopping/index.ts
index afd11f5..fecbcb5 100644
--- a/src/api/shopping/index.ts
+++ b/src/api/shopping/index.ts
@@ -25,7 +25,7 @@ export const ShoppingCartUpdateApi = () => {
*/
export const ShoppingCartListApi = () => {
return useRequest({
- url: `/v1/mp/shoppingCart/productColor`,
+ url: `/v2/mp/shoppingCart/productColor`,
method: "get",
})
}
diff --git a/src/api/takeDelivery/enum.ts b/src/api/takeDelivery/enum.ts
new file mode 100644
index 0000000..b5ceb7d
--- /dev/null
+++ b/src/api/takeDelivery/enum.ts
@@ -0,0 +1,15 @@
+import { useRequest } from '@/use/useHttp'
+//提货类型
+export const EnumTakeGoodsOrderTypeList = () => {
+ return useRequest({
+ url: `/v1/mp/enum/takeGoodsOrderType/list`,
+ method: 'get',
+ })
+}
+//tabs枚举
+export const EnumTakeGoodsOrderStatus = () => {
+ return useRequest({
+ url: `/v1/mp/enum/takeGoodsOrderStatus/list`,
+ method: 'get',
+ })
+}
diff --git a/src/api/takeDelivery/index.ts b/src/api/takeDelivery/index.ts
new file mode 100644
index 0000000..620177a
--- /dev/null
+++ b/src/api/takeDelivery/index.ts
@@ -0,0 +1,2 @@
+export { EnumTakeGoodsOrderStatus, EnumTakeGoodsOrderTypeList } from './enum'
+export { TakeGoodsOrderList, TakeGoodsOrderRefuse, TakeGoodsOrderAudit, TakeGoodsOrder, UserInvitationInfoRecord, GenBarCodeOrQrCode } from './takeDelivery'
diff --git a/src/api/takeDelivery/takeDelivery.ts b/src/api/takeDelivery/takeDelivery.ts
new file mode 100644
index 0000000..4a37179
--- /dev/null
+++ b/src/api/takeDelivery/takeDelivery.ts
@@ -0,0 +1,45 @@
+import { useRequest } from '@/use/useHttp'
+import { CAP_HTML_TO_IMAGE_BASE_URL } from '@/common/constant'
+//列表
+export const TakeGoodsOrderList = () => {
+ return useRequest({
+ url: `/v1/mp/takeGoodsOrder/list`,
+ method: 'get',
+ })
+}
+//拒收提货
+export const TakeGoodsOrderRefuse = () => {
+ return useRequest({
+ url: `/v1/mp/takeGoodsOrder/refuse`,
+ method: 'put',
+ })
+}
+//审核提货单
+export const TakeGoodsOrderAudit = () => {
+ return useRequest({
+ url: `/v1/mp/takeGoodsOrder/audit`,
+ method: 'put',
+ })
+}
+//详情
+export const TakeGoodsOrder = () => {
+ return useRequest({
+ url: `/v1/mp/takeGoodsOrder`,
+ method: 'get',
+ })
+}
+//邀请码
+export const UserInvitationInfoRecord = () => {
+ return useRequest({
+ url: `/v1/mp/user/invitationInfoRecord`,
+ method: 'get',
+ })
+}
+//生成二维码
+export const GenBarCodeOrQrCode = () => {
+ return useRequest({
+ url: `/xima-caphtml/genBarcodeOrQrCode`,
+ base_url: CAP_HTML_TO_IMAGE_BASE_URL,
+ method: 'post',
+ })
+}
diff --git a/src/app.config.ts b/src/app.config.ts
index 6a487bf..66dfa79 100644
--- a/src/app.config.ts
+++ b/src/app.config.ts
@@ -36,6 +36,14 @@ export default defineAppConfig({
'custom-wrapper': '/custom-wrapper',
},
subPackages: [
+ {
+ root: 'pages/takeDelivery',
+ pages: ['index'],
+ },
+ {
+ root: 'pages/takeDeliveryDetail',
+ pages: ['index'],
+ },
{
root: 'pages/delivery',
pages: ['index'],
@@ -77,28 +85,20 @@ export default defineAppConfig({
pages: ['index'],
},
{
- root: "pages/refundPage",
- pages: [
- "index"
- ]
+ root: 'pages/refundPage',
+ pages: ['index'],
},
{
- root: "pages/refundDetail",
- pages: [
- "index"
- ]
+ root: 'pages/refundDetail',
+ pages: ['index'],
},
{
- root: "pages/refundMoneyDetail",
- pages: [
- "index"
- ]
+ root: 'pages/refundMoneyDetail',
+ pages: ['index'],
},
{
- root: "pages/applyGoods",
- pages: [
- "index"
- ]
+ root: 'pages/applyGoods',
+ pages: ['index'],
},
{
root: "pages/applyMoney",
diff --git a/src/common/format.js b/src/common/format.js
index 0b3f074..280a7d0 100644
--- a/src/common/format.js
+++ b/src/common/format.js
@@ -32,6 +32,11 @@ const Digit = 10 * 10
*/
export const weightDigit = 1000
+/**
+ * 厘米进退位单位
+ */
+export const meterDigit = 100
+
/**
* 除以
* @param {*} val
@@ -53,6 +58,23 @@ export const formatPriceMul = (val, digit = Digit) => {
return strip(Number(val * digit)) || 0
}
+/**
+ * 格式化长度 (乘以)
+ * @param {Number} val
+ * @returns
+ */
+export const formatMeterMul = (val, digit = meterDigit) => {
+ return strip(Number(val * digit)) || 0
+}
+
+/**
+ * 格式化长度 (除以)
+ * @param {*} val
+ */
+export const formatMeterDiv = (val, digit = meterDigit) => {
+ return strip(Number(val / digit)) || 0
+}
+
/**
* 格式化重量单位 (乘以)
* @param {Number} val
diff --git a/src/components/SegmentedControl/index.tsx b/src/components/SegmentedControl/index.tsx
index 2f2446a..ac6015a 100644
--- a/src/components/SegmentedControl/index.tsx
+++ b/src/components/SegmentedControl/index.tsx
@@ -21,9 +21,13 @@ const segmentedControl: FC = (props) => {
})
const { list, defaultId = -1, onSelect } = props
+ const isValidNumber = (value: any) => {
+ return typeof value === 'number' && value >= 0
+ }
+
useEffect(() => {
console.log('defaultId', defaultId)
- if (typeof defaultId === 'number' && defaultId >= 0) {
+ if (isValidNumber(defaultId)) {
console.log('defaultId:::', defaultId)
const index = list?.findIndex((item) => {
return item.id == defaultId
@@ -33,7 +37,7 @@ const segmentedControl: FC = (props) => {
setSelectInfo((e) => ({ ...e, tabId: list[num].id.toString() }))
}
}
- setSelectInfo((e) => ({ ...e, selected: defaultId || -1 }))
+ setSelectInfo((e) => ({ ...e, selected: isValidNumber(defaultId) ? defaultId : -1 }))
console.log('selectInfo', selectInfo)
}, [defaultId])
diff --git a/src/components/cell/index.module.scss b/src/components/cell/index.module.scss
new file mode 100644
index 0000000..f0703d7
--- /dev/null
+++ b/src/components/cell/index.module.scss
@@ -0,0 +1,24 @@
+.cell {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 28px;
+ padding: 12px 0;
+ .title {
+ min-width: 140px;
+ flex: none;
+ color: #a9a9a9;
+ }
+ .desc {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: flex-end;
+ flex: 1 1 auto;
+ color: $color_font_one;
+ }
+}
+.descText {
+ @include common_ellipsis(2);
+}
diff --git a/src/components/cell/index.tsx b/src/components/cell/index.tsx
new file mode 100644
index 0000000..f5c65ee
--- /dev/null
+++ b/src/components/cell/index.tsx
@@ -0,0 +1,43 @@
+import { View, Text } from '@tarojs/components'
+import classNames from "classnames"
+import { FC, useCallback, useMemo, useRef } from "react"
+import IconFont, { IconNames } from "../iconfont/iconfont"
+import styles from './index.module.scss'
+
+interface CellPropsType {
+ title: string
+ desc: string
+ isLink?: boolean
+ onClick?: () => void
+ customStyle?: React.CSSProperties
+ customClassName?: string
+ iconName?: IconNames
+}
+const Cell:FC = (props) => {
+ const {title, desc, isLink = false, customClassName, customStyle, onClick, iconName} = props
+
+ const onClickRef = useRef(onClick)
+ onClickRef.current = onClick
+ // 防止函数的引用改变
+ const handleClick = useCallback(() => {
+ return isLink && onClickRef.current?.()
+ }, [isLink])
+
+ const CellElement = useMemo(() => {
+ return (
+
+
+ {iconName && }
+ {title}
+
+
+ {desc}
+ {isLink && }
+
+
+ )
+ }, [title, desc, handleClick, customStyle])
+
+ return <>{CellElement}>
+}
+export default Cell
diff --git a/src/components/checkbox/index.tsx b/src/components/checkbox/index.tsx
index e54e622..d4206e1 100644
--- a/src/components/checkbox/index.tsx
+++ b/src/components/checkbox/index.tsx
@@ -10,9 +10,9 @@ type params = {
onSelect?: () => void //选择触发
onClose?: () => void //取消触发
status?: boolean //是否选中
- hidden?: boolean // 隐藏单选框
+ hiddenCheckboxIcon?: boolean // 隐藏多选框
disabled?: boolean //是否禁用
- triggerLabel?: boolean // 点击label是否触发选中
+ triggerLabel?: boolean // 点击label是否触发选中
circle?: boolean
round?: boolean
size?: CheckboxSize
@@ -35,7 +35,7 @@ export default forwardRef((props: params, ref) => {
customStyles = {},
customClassName = '',
customTextClass = '',
- hidden = false,
+ hiddenCheckboxIcon = false,
} = props
const [selected, SetSelected] = useState(false)
const onSelectEven = () => {
@@ -81,11 +81,14 @@ export default forwardRef((props: params, ref) => {
}, [status])
return (
-
-
- {selected && }
+ {!hiddenCheckboxIcon && (
+
+
+ {selected && }
+
-
+ )}
+
{children && (
{children}
diff --git a/src/components/counter/index.tsx b/src/components/counter/index.tsx
index 9ff7d87..9e8a883 100644
--- a/src/components/counter/index.tsx
+++ b/src/components/counter/index.tsx
@@ -12,22 +12,24 @@ type params = {
onBlue?:(val:number) => void, //失去焦点触发
onClickBtn?:(val:number) => void,
unit?: string,
- disable?: true|false, //是否禁用
+ disable?: boolean, //是否禁用
}
export default ({minNum = 0, maxNum = 10000, step=1, digits = 0, defaultNum = 0, onChange, onBlue, onClickBtn, unit = '', disable = false}: params) => {
const [value, setValue] = useState({count:defaultNum})
- const onPlus = () => {
- if(disable) return false
- let {count} = value
+ const onPlus = (event) => {
+ event.stopPropagation()
+ if (disable) return false
+ let { count } = value
let num_res = Big(count).add(step).toNumber()
- num_res = num_res >= maxNum?maxNum:num_res
+ num_res = num_res >= maxNum ? maxNum : num_res
num_res = formatDigits(num_res)
- setValue({...value, count:num_res})
+ setValue({ ...value, count: num_res })
onChange?.(parseFloat(num_res))
onClickBtn?.(parseFloat(num_res))
}
- const minus = () => {
+ const minus = (event) => {
+ event.stopPropagation()
if(disable) return false
let {count} = value
let num_res = Big(count).minus(step).toNumber()
@@ -98,7 +100,7 @@ export default ({minNum = 0, maxNum = 10000, step=1, digits = 0, defaultNum = 0,
}
return (
- minus()}>-
+ -
{unit}
- onPlus()}>+
+ +
)
-}
\ No newline at end of file
+}
diff --git a/src/components/iconCard/index.tsx b/src/components/iconCard/index.tsx
index 88de19e..694a0b9 100644
--- a/src/components/iconCard/index.tsx
+++ b/src/components/iconCard/index.tsx
@@ -1,14 +1,12 @@
import { View } from '@tarojs/components'
import { FC, ReactNode } from 'react'
-import IconFont from '../iconfont/iconfont'
+import IconFont, { IconNames } from '../iconfont/iconfont'
import styles from './index.module.scss'
import classname from 'classnames'
-type IconfontName = Parameters['0']['name']
-
interface PropsType {
- iconName: IconfontName
+ iconName: IconNames
title: string
children?: ReactNode
onClick?: Function
diff --git a/src/components/iconText/index.tsx b/src/components/iconText/index.tsx
index 3b2530e..73a65c8 100644
--- a/src/components/iconText/index.tsx
+++ b/src/components/iconText/index.tsx
@@ -1,13 +1,11 @@
import { FC } from "react"
import { View, Text } from '@tarojs/components'
-import IconFont from '../iconfont/iconfont'
+import IconFont, { IconNames } from '../iconfont/iconfont'
import styles from './index.module.scss'
import classnames from 'classnames'
-type IconfontName = Parameters['0']['name']
-
type PropsType = {
- iconName: IconfontName
+ iconName: IconNames
iconSize?: number
svg?: boolean
text?: string
diff --git a/src/components/layoutBlock/index.module.scss b/src/components/layoutBlock/index.module.scss
index 0e3b807..e5ebee7 100644
--- a/src/components/layoutBlock/index.module.scss
+++ b/src/components/layoutBlock/index.module.scss
@@ -4,6 +4,8 @@
background-color: #fff;
padding: 32px;
margin-bottom: 20px;
+ margin-left: 24px;
+ margin-right: 24px;
&--row {
flex-flow: row nowrap;
}
diff --git a/src/components/saleModeTag/index.module.scss b/src/components/saleModeTag/index.module.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/components/saleModeTag/index.tsx b/src/components/saleModeTag/index.tsx
new file mode 100644
index 0000000..4f7927b
--- /dev/null
+++ b/src/components/saleModeTag/index.tsx
@@ -0,0 +1,34 @@
+import { EnumSaleMode } from "@/common/Enumerate"
+import { FC } from "react"
+import Tag, { TagSize } from "../tag"
+
+interface SaleModeProps {
+ saleMode: number
+ size?: TagSize
+ customClassName?: string
+ children?: React.ReactNode
+}
+
+const SaleModeTag: FC = (props) => {
+ const { saleMode, size = 'small', customClassName } = props
+ return (
+ <>
+ {saleMode === EnumSaleMode.Bulk && (
+
+ 大货
+
+ )}
+ {saleMode === EnumSaleMode.Plate && (
+
+ 剪板
+
+ )}
+ {saleMode === EnumSaleMode.BulkCut && (
+
+ 散剪
+
+ )}
+ >
+ )
+}
+export default SaleModeTag
diff --git a/src/components/tag/index.tsx b/src/components/tag/index.tsx
index 4300a89..5d72ffb 100644
--- a/src/components/tag/index.tsx
+++ b/src/components/tag/index.tsx
@@ -3,7 +3,7 @@ import { FC, ReactNode } from 'react'
import classnames from 'classnames'
import styles from './index.module.scss'
-type TagSize = 'small' | 'normal'
+export type TagSize = 'small' | 'normal'
type TagType = 'primary' | 'danger' | 'warning' | 'info'
interface PropsType {
diff --git a/src/components/uploadImage/index.tsx b/src/components/uploadImage/index.tsx
index 93a719f..16af902 100644
--- a/src/components/uploadImage/index.tsx
+++ b/src/components/uploadImage/index.tsx
@@ -1,4 +1,4 @@
-import Taro, { FC } from '@tarojs/taro'
+import Taro from '@tarojs/taro'
import { memo, useEffect, useState } from 'react'
import useUploadCDNImg from '@/use/useUploadImage'
import { Image, Text, View } from '@tarojs/components'
@@ -11,10 +11,11 @@ import Popup from '@/components/popup'
type ImageParam = {
onChange?: (val: string[]) => void
defaultList?: string[]
- onlyRead?: false | true
+ onlyRead?: boolean
}
-const PictureItem: FC = memo(({ onChange, defaultList, onlyRead = false }) => {
+const PictureItem = memo(({ onChange, defaultList, onlyRead = false }) => {
const { getWxPhoto, getChatPhoto } = useUploadCDNImg()
+
const [imageList, setImageLise] = useState([])
useEffect(() => {
diff --git a/src/pages/delivery/components/ItemList/index.tsx b/src/pages/delivery/components/ItemList/index.tsx
index 1d9383d..98f28a3 100644
--- a/src/pages/delivery/components/ItemList/index.tsx
+++ b/src/pages/delivery/components/ItemList/index.tsx
@@ -7,22 +7,24 @@ import NormalButton from '@/components/normalButton'
import styles from './index.module.scss'
import classnames from 'classnames'
import { EnumSaleMode } from '@/common/Enumerate'
-import { formatDateTime } from '@/common/format'
+import { formatDateTime, formatMeterDiv } from '@/common/format'
import { goLink } from '@/common/common'
import { DeliveryNoticeOrderAudit } from '@/api/index'
import Taro from '@tarojs/taro'
+import SaleModeTag from '@/components/saleModeTag'
type PropsType = {
- itemData?: Record
+ itemData: Record
onSuccess?: Function
}
const ItemList:FC = (props) => {
const { itemData, onSuccess } = props
// 查看详情
- const handleDetail = (id: number) => {
+ const handleDetail = (itemData: Record) => {
goLink('/pages/deliveryDetail/index', {
- id
+ id: itemData.id,
+ order_no: itemData.order_no,
})
}
@@ -62,22 +64,9 @@ const ItemList:FC = (props) => {
货品信息:
- {itemData?.sale_mode === EnumSaleMode.Bulk && (
-
- 大货
-
- )}
- {itemData?.sale_mode === EnumSaleMode.Plate && (
-
- 剪板
-
- )}
- {itemData?.sale_mode === EnumSaleMode.BulkCut && (
-
- 散剪
-
- )}
- 2种面料,4种颜色,共{itemData?.sale_mode === EnumSaleMode.Bulk ? `${itemData?.delivery_roll}条` : `${itemData?.delivery_length}米`}
+
+ {itemData.delivery_product_nums}种面料,{itemData.delivery_product_color_nums}种颜色,共
+ {itemData?.sale_mode === EnumSaleMode.Bulk ? `${itemData?.delivery_roll}条` : `${formatMeterDiv(itemData?.delivery_length)}米`}
@@ -95,7 +84,7 @@ const ItemList:FC = (props) => {
type='info'
customStyles={{ color: '#8e8e8e', borderColor: '#8e8e8e' }}
round
- onClick={() => handleDetail(itemData?.id)}>
+ onClick={() => handleDetail(itemData)}>
查看详情
{itemData?.status === 0 && (
diff --git a/src/pages/delivery/index.tsx b/src/pages/delivery/index.tsx
index 1bdc83f..918cdd9 100644
--- a/src/pages/delivery/index.tsx
+++ b/src/pages/delivery/index.tsx
@@ -1,7 +1,6 @@
import { View, Text } from '@tarojs/components'
import { useCallback, useEffect, useMemo, useRef, useState, FC, memo } from 'react'
import styles from './index.module.scss'
-import classnames from 'classnames'
import Search from '@/components/search'
import { DeliverNoticeOrderList, EnumSaleorderStatus } from '@/api/index'
import Taro from '@tarojs/taro'
diff --git a/src/pages/deliveryDetail/index.config.ts b/src/pages/deliveryDetail/index.config.ts
index 45c6544..050034c 100644
--- a/src/pages/deliveryDetail/index.config.ts
+++ b/src/pages/deliveryDetail/index.config.ts
@@ -1,3 +1,3 @@
export default {
- navigationBarTitleText: '发货详情',
+ navigationBarTitleText: '销售发货',
}
diff --git a/src/pages/deliveryDetail/index.module.scss b/src/pages/deliveryDetail/index.module.scss
index 57cfd8c..9023243 100644
--- a/src/pages/deliveryDetail/index.module.scss
+++ b/src/pages/deliveryDetail/index.module.scss
@@ -1,3 +1,101 @@
-.deliveryDetail{
-
+page {
+ display: flex;
+ flex-flow: column nowrap;
+ height: 100%;
+}
+.deliveryDetail {
+ display: flex;
+ flex-flow: column nowrap;
+ height: 100%;
+ .content {
+ padding-top: 24px;
+ flex: 1 1 auto;
+ overflow: scroll;
+ .detailTop {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ align-items: center;
+ }
+ }
+ .bottomBar {
+ flex: none;
+ margin: 0 24px;
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ align-items: center;
+ padding-top: 24px;
+ padding-bottom: calc(20px + constant(safe-area-inset-bottom));
+ padding-bottom: calc(20px + env(safe-area-inset-bottom));
+ }
+}
+.detailInfo {
+ .detailInfoItem {
+ &--title {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 28px;
+ padding: 10px 0;
+ }
+ &--detail {
+ &--row{
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 10px 0;
+ font-size: 28px;
+ }
+ &--name{
+
+ }
+ &--count{
+
+ }
+ &--weight{
+
+ }
+ }
+ }
+}
+.orderInfoTop{
+ font-size: 28px;
+ color: $color_font_one;
+ font-weight: 550;
+}
+
+.orderNo {
+ font-size: 28px;
+ font-weight: 550;
+}
+.status {
+ font-size: 28px;
+ &--toBeAudit {
+ color: $color_danger;
+ }
+ &--audited {
+ color: $color_main;
+ }
+}
+
+.divider {
+ margin: 24px 0;
+}
+.total {
+ margin-top: 24px;
+ padding: 15px 24px;
+ font-size: 24px;
+ line-height: 30px;
+ font-weight: 600;
+ color: #f79b31;
+ background: #fef9f4;
+ border-radius: 8px;
+ display: flex;
+ .totalContent{
+ flex: 1 1 auto;
+ display: inline-block;
+ text-align: right;
+ }
}
diff --git a/src/pages/deliveryDetail/index.tsx b/src/pages/deliveryDetail/index.tsx
index 9802d02..8b17b92 100644
--- a/src/pages/deliveryDetail/index.tsx
+++ b/src/pages/deliveryDetail/index.tsx
@@ -1,8 +1,170 @@
-import { View } from "@tarojs/components"
-import { FC } from "react"
+import { DeliverNoticeOrder, DeliveryNoticeOrderAudit, DeliveryNoticeOrderUpload } from '@/api'
+import { formatDateTime, formatMeterDiv, formatWeightDiv } from '@/common/format'
+import Cell from '@/components/cell'
+import Divider from '@/components/divider'
+import LayoutBlock from '@/components/layoutBlock'
+import NormalButton from '@/components/normalButton'
+import SaleModeTag from '@/components/saleModeTag'
+import UploadImage from '@/components/uploadImage'
+import { View, Text } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { useRouter } from '@tarojs/taro'
+import { alert } from '@/common/common'
+import { FC, useCallback, useEffect, useMemo, useState } from 'react'
import styles from './index.module.scss'
const DeliveryDetail: FC = () => {
- return 发货详情
+ const router = useRouter()
+
+ const { fetchData } = DeliverNoticeOrder()
+
+ const [detailInfo, setDetailInfo] = useState>({})
+
+ const getData = async () => {
+ const { id, order_no } = router.params
+ const res = await fetchData({
+ id,
+ order_no,
+ })
+ console.log('res==>', res.data)
+ setDetailInfo(res.data)
+ }
+
+ useEffect(() => {
+ getData()
+ }, [])
+
+ const { fetchData: uploadData } = DeliveryNoticeOrderUpload()
+
+ const { fetchData: FetchAudit } = DeliveryNoticeOrderAudit()
+
+ const DetailItem = useMemo(() => {
+ const element =
+ !!detailInfo?.weight_list?.length &&
+ detailInfo?.weight_list.map((weightItem) => {
+ return (
+
+
+
+
+
+
+ {weightItem.product_code} {weightItem.product_name}
+
+
+
+ 共 {weightItem?.sale_mode === 0 ? `${weightItem.roll} 条` : `${formatMeterDiv(weightItem?.length || 0)} 米`}
+
+
+
+
+ {weightItem.product_color_code} {weightItem.product_color_name}
+
+
+ x{weightItem?.sale_mode === 0 ? `${weightItem.roll} 条` : `${formatMeterDiv(weightItem?.length || 0)} 米`}
+
+ {formatWeightDiv(weightItem.weight)}/kg
+
+
+
+
+ )
+ })
+ return <>{element}>
+ }, [detailInfo])
+
+ const [readyToUploadList, setReadyToUploadList] = useState([])
+
+ const handleUploadChange = (imageList: string[]) => {
+ console.log('imageList===>', imageList)
+ setReadyToUploadList((prev) => [...prev, ...imageList])
+ }
+ // 上传附件
+ const handleUploadPic = useCallback(async () => {
+ const res = await uploadData({
+ id: Number(router.params.id),
+ delivery_appendix: readyToUploadList,
+ })
+ if (res.success) {
+ alert.success('上传成功')
+ } else {
+ alert.error('上传核失败')
+ }
+ }, [readyToUploadList])
+
+ // 审核
+ const handleAudit = useCallback(() => {
+ if (readyToUploadList.length === 0 ) {
+ alert.error('请先上传附件')
+ return
+ }
+ Taro.showModal({
+ confirmColor: '#337FFF',
+ title: '确定审核?',
+ success: async function (res) {
+ if (res.confirm) {
+ const res = await FetchAudit({ id: Number(router.params.id) })
+ if (res.success) {
+ alert.success('审核成功')
+ getData()
+ } else {
+ alert.error('审核失败')
+ }
+ } else if (res.cancel) {
+ console.log('用户点击取消')
+ }
+ },
+ })
+ }, [readyToUploadList])
+
+ const BottomBar = useMemo(() => {
+ return (
+
+
+ 上传附件
+
+
+ 确认审核
+
+
+ )
+ }, [handleUploadPic, handleAudit])
+ return (
+
+
+
+
+ 发货单号:{detailInfo?.order_no}
+ {detailInfo?.status === 0 ? 待审核 : 已完成}
+
+ {DetailItem}
+
+ 汇总:
+
+ 共{detailInfo?.weight_list?.length || 0}种面料,4种颜色,共
+ {detailInfo?.sale_mode === 0 ? `${detailInfo?.total_roll}条` : `${formatMeterDiv(detailInfo?.total_length)}米`}
+ ,重量{detailInfo?.total_weight}kg
+
+
+
+
+ 订单信息
+
+
+ |
+ |
+ |
+ |
+
+
+
+ 附件
+
+
+
+
+ {detailInfo?.status === 0 && BottomBar}
+
+ )
}
export default DeliveryDetail
diff --git a/src/pages/shopping/components/colorKindItem/index.tsx b/src/pages/shopping/components/colorKindItem/index.tsx
index f1a18d6..9014978 100644
--- a/src/pages/shopping/components/colorKindItem/index.tsx
+++ b/src/pages/shopping/components/colorKindItem/index.tsx
@@ -9,18 +9,23 @@ import { formatPriceDiv } from '@/common/format'
import { EnumSaleMode } from '@/common/Enumerate'
import { useNeedMemoCallback } from '@/use/useCommon'
import {selectList} from '../../config'
+import { useShoppingContext, useWatch } from '../../context'
type PropsType = {
item: Record & object
orderType: EnumSaleMode
- isSelected: boolean
- onChecked?: Function
- onUnChecked?: Function
}
+// 注意:如果在表单控件内部使用 useWatch,由于是直接从Context中取值,memo也会直接失去作用。
+
const ColorKindItem: FC = memo(
(props) => {
- const { item, orderType = EnumSaleMode.Bulk, isSelected = false, onChecked, onUnChecked } = props
- console.log('重新渲染', item.id, orderType)
+ const { item, orderType = EnumSaleMode.Bulk} = props
+ const { setChangedCheckbox } = useShoppingContext()
+ console.log('重新渲染 ColorKindItem', item.id, orderType)
+
+ const { checked } = useWatch(item?.id)
+
+
//格式化金额
const formatPirce = useCallback((price) => {
return Number(formatPriceDiv(price))
@@ -38,12 +43,12 @@ const ColorKindItem: FC = memo(
const handleSelect = () => {
console.log('handleSelect')
- // setCheck(true)
- onChecked && onChecked({ ...item, checked: true })
+ setChangedCheckbox({id: item?.id, checked: true})
+ // onChecked && onChecked({ ...item, checked: true })
}
const handleClose = () => {
- // setCheck(false)
- onUnChecked && onUnChecked({ ...item, checked: false })
+ setChangedCheckbox({ id: item?.id, checked: false })
+ // onUnChecked && onUnChecked({ ...item, checked: false })
}
const getInputValue = debounce(async (num, item) => {
@@ -52,16 +57,15 @@ const ColorKindItem: FC = memo(
}else{
item.length = num
}
- onChecked && onChecked({ ...item, checked: true })
+ // onChecked && onChecked({ ...item, checked: true })
}, 300)
return (
@@ -96,9 +100,6 @@ const ColorKindItem: FC = memo(
const stringifyNextProp = JSON.stringify(nextProp.item)
console.log('memo==>', preProp, nextProp);
let needMemoized = true
- if (preProp.isSelected !== nextProp.isSelected) {
- needMemoized = false
- }
if (preProp.orderType !== nextProp.orderType) {
needMemoized = false
}
diff --git a/src/pages/shopping/components/shoppingCart/index.tsx b/src/pages/shopping/components/shoppingCart/index.tsx
new file mode 100644
index 0000000..86a5356
--- /dev/null
+++ b/src/pages/shopping/components/shoppingCart/index.tsx
@@ -0,0 +1,67 @@
+import { FC, ReactNode, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'
+import { InternalShoppingCartAction, ShoppingCartAction, ShoppingContext, useShoppingCart } from '../../context'
+import { ColorMeta, ColorStore, ShoppingContextValue } from '../../context'
+
+export type TriggerCheckboxOptions = { colorStore: ColorStore; changedCheckbox: ColorMeta }
+
+export interface ShoppingCartPropsType {
+ initialValues?: ColorStore
+ onTriggerCheckbox?: (options: TriggerCheckboxOptions) => void
+ children?: ReactNode
+ ref?: ShoppingCartAction
+}
+// 购物车上下文组件
+export const ShoppingCart: FC = (props) => {
+ const { children, onTriggerCheckbox, initialValues, ref: refProps } = props
+ console.log('重新渲染 ShoppingCart context', refProps)
+
+ const defaultShoppingCart = useShoppingCart()
+
+ const ref = (refProps || defaultShoppingCart) as InternalShoppingCartAction
+
+ const onTriggerCheckboxRef = useRef(onTriggerCheckbox)
+ onTriggerCheckboxRef.current = onTriggerCheckbox
+
+ const [colorStore, setColorStore] = useState(() => initialValues || {})
+ const [changedCheckbox, setChangedCheckbox] = useState({})
+ // 当前高亮的客户
+ const [currentCheckedPurchaserId, setCurrentCheckedPurchaserId] = useState(-1)
+ // 是否管理状态
+ const [isManageStatus, setManageStatus] = useState(false)
+
+ const ctx: ShoppingContextValue = useMemo(() => {
+ console.log('useMemo ShoppingContextValue')
+ return {
+ isManageStatus,
+ setManageStatus,
+ currentCheckedPurchaserId, // 当前高亮的客户
+ setCurrentCheckedPurchaserId, // 设置高亮当前客户
+ colorStore,
+ setChangedCheckbox(color) {
+ setColorStore((prev) => ({ ...prev, [color.id as number]: color }))
+ setChangedCheckbox(color)
+ },
+ }
+ }, [colorStore, currentCheckedPurchaserId, isManageStatus])
+ // 暴露给外界
+ useImperativeHandle(
+ ref.__INTERNAL__,
+ () => ({
+ getManageStatus() {
+ return ctx.isManageStatus
+ },
+ setManageStatus: ctx.setManageStatus,
+ }),
+ [ctx.isManageStatus, ctx.setManageStatus],
+ )
+
+ // 这里要在 useEffect 也就是刷新 state 后再调用,否则如果在 onFieldsChangeRef 修改值会覆盖掉上次修改
+ useEffect(() => {
+ onTriggerCheckboxRef.current?.({
+ colorStore,
+ changedCheckbox,
+ })
+ }, [colorStore, changedCheckbox])
+
+ return {children}
+}
diff --git a/src/pages/shopping/components/shoppingCartItem/index.module.scss b/src/pages/shopping/components/shoppingCartItem/index.module.scss
index d1ac740..0c96ad2 100644
--- a/src/pages/shopping/components/shoppingCartItem/index.module.scss
+++ b/src/pages/shopping/components/shoppingCartItem/index.module.scss
@@ -12,7 +12,7 @@
}
}
-.selected{
+.selected {
border-color: $color_main;
}
@@ -81,9 +81,49 @@
}
}
-.drawerOpen{
+.drawerOpen {
height: auto;
}
.drawerClose {
height: 0;
}
+
+.saleModeButton {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ padding: 0 20px;
+ box-sizing: border-box;
+ border: 0 solid transparent;
+ background-color: #f6f6f6;
+ border-radius: 8px;
+ font-size: 28px;
+ height: 72px;
+ &--text {
+ color: #909090;
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: center;
+ align-items: center;
+ }
+ &:hover {
+ opacity: 0.7;
+ }
+ &--active {
+ border: 1px solid $color_main;
+ background-color: #eaf2ff;
+ .saleModeButton--text {
+ color: $color_main;
+ }
+ }
+}
+.noList {
+ margin: 100px 0;
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ color: #707070;
+ font-size: 26px;
+}
diff --git a/src/pages/shopping/components/shoppingCartItem/index.tsx b/src/pages/shopping/components/shoppingCartItem/index.tsx
index c02a6ab..dfb3bef 100644
--- a/src/pages/shopping/components/shoppingCartItem/index.tsx
+++ b/src/pages/shopping/components/shoppingCartItem/index.tsx
@@ -1,5 +1,5 @@
import { Text, View } from '@tarojs/components'
-import { FC, memo, useCallback, useContext, useEffect, useMemo, useState } from 'react'
+import { FC, memo, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'
import styles from './index.module.scss'
import classnames from 'classnames'
import { formatPriceDiv } from '@/common/format'
@@ -13,12 +13,10 @@ import ColorKindItem from '../colorKindItem'
import { EnumSaleMode } from '@/common/Enumerate'
import { useNeedMemoCallback } from '@/use/useCommon'
import { selectList } from '../../config'
-import { ShoppingContext } from '../../index'
+import { useShoppingContext } from '../../context'
type PropsType = {
itemData?: ShoppingCartData
- selectedId?: number
- onSelectedId?: Function
}
const DrawerButton = memo<{ isOpen: boolean }>(({ isOpen }) => {
@@ -27,15 +25,22 @@ const DrawerButton = memo<{ isOpen: boolean }>(({ isOpen }) => {
)
})
+enum BackEndSaleModeListFieldMap {
+ bulk_color_list = 0,
+ length_cut_color_list = 1,
+ weight_cut_color_list = 2,
+}
+
export default memo((props) => {
console.log('props==>', props)
- const { itemData, selectedId } = props
+ const { itemData } = props
- console.log('重新渲染 shoppingCartItem', selectedId)
+ console.log('重新渲染 shoppingCartItem')
const [openDetail, setOpenDetail] = useState(false)
const handleOpenDetail = () => {
setOpenDetail((isOpen) => !isOpen)
+ handleClickLayout()
}
const [selected, setSelect] = useState(0)
@@ -44,83 +49,85 @@ export default memo((props) => {
setSelect(type)
}
- const [mockList, setMockList] = useState({
- 0: [
- { id: 0, sale_mode: 0, roll: 5, length: 0, checked: true },
- { id: 1, sale_mode: 0, roll: 6, length: 0, checked: false },
- { id: 2, sale_mode: 0, roll: 7, length: 0, checked: true },
- ],
- 1: [
- { id: 5, sale_mode: 1, roll: 0, length: 77700, checked: false },
- { id: 6, sale_mode: 1, roll: 0, length: 7600, checked: true },
- { id: 7, sale_mode: 1, roll: 0, length: 400, checked: true },
- ],
- 2: [
- { id: 8, sale_mode: 2, roll: 0, length: 11100, checked: false },
- { id: 9, sale_mode: 2, roll: 0, length: 8540, checked: true },
- ],
+ const saleModeList = useRef({
+ bulk_color_list: itemData?.bulk_color_list,
+ length_cut_color_list: itemData?.length_cut_color_list,
+ weight_cut_color_list: itemData?.weight_cut_color_list,
})
+ saleModeList.current = {
+ bulk_color_list: itemData?.bulk_color_list,
+ length_cut_color_list: itemData?.length_cut_color_list,
+ weight_cut_color_list: itemData?.weight_cut_color_list,
+ }
- const handleChecked = useCallback(
- (current) => {
- console.log('handleChecked', current)
- const tempList = mockList[selected].map((item) => {
- if (item.id === current.id) {
- item = current
- }
- return item
- })
- setMockList((pre) => {
- return {
- ...pre,
- [selected]: tempList,
- }
- })
- },
- [mockList, selected],
- )
- const handleUnChecked = useCallback(
- (current) => {
- console.log('handleChecked', current)
- const tempList = mockList[selected].map((item) => {
- if (item.id === current.id) {
- item = current
- }
- return item
- })
- setMockList((pre) => {
- return {
- ...pre,
- [selected]: tempList,
- }
- })
- },
- [mockList, selected],
- )
+ // const handleChecked = useCallback(
+ // (current: any) => {
+ // console.log('handleChecked', current)
+ // const tempList = itemData?.[BackEndSaleModeListFieldMap[selected]].map((item) => {
+ // if (item.id === current.id) {
+ // item = current
+ // }
+ // return item
+ // })
+ // setMockList((pre) => {
+ // return {
+ // ...pre,
+ // [selected]: tempList,
+ // }
+ // })
+ // },
+ // [mockList, selected],
+ // )
+
+ // const handleUnChecked = useCallback(
+ // (current: any) => {
+ // console.log('handleChecked', current)
+ // const tempList = itemData?.[BackEndSaleModeListFieldMap[selected]].map((item) => {
+ // if (item.id === current.id) {
+ // item = current
+ // }
+ // return item
+ // })
+ // setMockList((pre) => {
+ // return {
+ // ...pre,
+ // [selected]: tempList,
+ // }
+ // })
+ // },
+ // [mockList, selected],
+ // )
+
+ const { setChangedCheckbox, currentCheckedPurchaserId, setCurrentCheckedPurchaserId, isManageStatus } = useShoppingContext()
const memoList = useMemo(() => {
- return mockList[selected].map((item, index) => {
- return (
-
- )
- })
- }, [mockList, selected])
+ return itemData?.[BackEndSaleModeListFieldMap[selected]].length !== 0 ? (
+ itemData?.[BackEndSaleModeListFieldMap[selected]].map((item) => {
+ // 初始化选中状态
+ setChangedCheckbox({ id: item.id, checked: false })
+
+ return
+ })
+ ) : (
+ 暂无数据
+ )
+ }, [itemData, selected])
const handleClickLayout = () => {
- console.log('itemData===>', itemData)
+ if (currentCheckedPurchaserId === itemData?.purchaser_id) {
+ return
+ }
+ setCurrentCheckedPurchaserId(itemData?.purchaser_id as number)
}
// const { isManager } = useContext(ShoppingContext)
return (
-
-
+
+
@@ -131,7 +138,8 @@ export default memo((props) => {
- 已选 {mockList[selected].filter((item) => item.checked).length} 种面料,1 个颜色,共 {selected === EnumSaleMode.Bulk ? `${4} 条` : `${4} 米`}
+ 已选 {itemData?.[BackEndSaleModeListFieldMap[selected]].filter((item) => item.checked).length} 种面料,1 个颜色,共{' '}
+ {selected === EnumSaleMode.Bulk ? `${4} 条` : `${4} 米`}
@@ -145,30 +153,24 @@ export default memo((props) => {
订单类型
- onSelectOrderType(EnumSaleMode.Bulk)}>
大货
-
-
+ onSelectOrderType(EnumSaleMode.Plate)}>
剪板
-
-
+ onSelectOrderType(EnumSaleMode.BulkCut)}>
散剪
-
+
@@ -186,3 +188,22 @@ export default memo((props) => {
)
}, useNeedMemoCallback())
+
+interface ButtonPropsType {
+ isActive: boolean
+ onClick?: Function
+ children?: React.ReactNode
+ customStyle?: React.CSSProperties
+}
+// 订单类型
+const SaleModeButton: FC = (props) => {
+ const { onClick, children, isActive = false, customStyle } = props
+ const handleClick = () => {
+ onClick?.()
+ }
+ return (
+
+ {children}
+
+ )
+}
diff --git a/src/pages/shopping/context/index.ts b/src/pages/shopping/context/index.ts
new file mode 100644
index 0000000..854027a
--- /dev/null
+++ b/src/pages/shopping/context/index.ts
@@ -0,0 +1,78 @@
+import React, { useRef } from 'react'
+import { useContext } from 'react'
+
+/**
+ * 456: {
+ * id: 456,
+ * checked: true
+ * },
+ * 457: {
+ * id: 457,
+ * checked: true
+ * }
+ */
+export type ColorStore = Record
+
+export interface ColorMeta {
+ id?: number
+ checked?: boolean
+}
+
+export interface ShoppingContextValue {
+ isManageStatus: boolean
+ setManageStatus: (isManageStatus: boolean) => void
+ currentCheckedPurchaserId: number
+ setCurrentCheckedPurchaserId: (purchaserId: number) => void
+ colorStore: ColorStore
+ setChangedCheckbox: (color: ColorMeta) => void
+}
+
+export const ShoppingContext = React.createContext(null)
+
+export function useShoppingContext() {
+ const ctx = useContext(ShoppingContext)
+ if (!ctx) {
+ throw new Error('没有获取到shopping context')
+ }
+ return ctx
+}
+
+export function useWatch(id: ColorMeta['id']) {
+ const { colorStore } = useShoppingContext()
+ console.log('colorStore==>', colorStore)
+ return id ? colorStore[id] : colorStore
+}
+
+export interface ShoppingCartAction {
+ setManageStatus: (manageStatus: boolean) => void
+ getManageStatus: () => boolean
+}
+
+export interface InternalShoppingCartAction extends ShoppingCartAction {
+ __INTERNAL__: React.MutableRefObject
+}
+
+function throwError(): never {
+ throw new Error('有没有用 ref 这个props?')
+}
+
+export function useShoppingCart(): ShoppingCartAction {
+ const __INTERNAL__ = useRef(null)
+ return {
+ __INTERNAL__,
+ setManageStatus(manageStatus: boolean) {
+ const action = __INTERNAL__.current
+ if (!action) {
+ throwError()
+ }
+ action.setManageStatus(manageStatus)
+ },
+ getManageStatus() {
+ const action = __INTERNAL__.current
+ if (!action) {
+ throwError()
+ }
+ return action.getManageStatus()
+ },
+ } as InternalShoppingCartAction
+}
diff --git a/src/pages/shopping/index.tsx b/src/pages/shopping/index.tsx
index fdee71b..1d41bcf 100644
--- a/src/pages/shopping/index.tsx
+++ b/src/pages/shopping/index.tsx
@@ -1,7 +1,7 @@
import Search from '@/components/search'
import { View } from '@tarojs/components'
import Taro, { useDidShow } from '@tarojs/taro'
-import React, { FC, useCallback, useContext, useEffect, useMemo, useState } from 'react'
+import React, { FC, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react'
import styles from './index.module.scss'
import classnames from 'classnames'
import IconText from '@/components/iconText'
@@ -13,27 +13,48 @@ import BottomSettleBar from './components/bottomSettleBar'
import BottomEditBar from './components/bottomEditBar'
import { ShoppingCartListApi } from '@/api/index'
import { dataLoadingStatus } from '@/common/util'
-
-const defaultContext = {
- isManager: false
-}
-
-export const ShoppingContext = React.createContext(defaultContext)
+import { ShoppingCart, TriggerCheckboxOptions } from './components/shoppingCart/index'
+import { useShoppingCart, useShoppingContext } from './context'
export const Shopping: FC = () => {
+
+ const [checkboxData, setCheckboxData] = useState>({})
+
+ const handleTriggerCheckbox = ({ colorStore, changedCheckbox }) => {
+ console.log('handleTriggerCheckbox==>', colorStore, changedCheckbox)
+ setCheckboxData({ colorStore, changedCheckbox })
+ }
+ return (
+
+
+
+ )
+}
+
+interface InternalContainer {
+ checkboxData?: Partial
+}
+
+const ShoppingCartContainer:FC = (props) => {
+
+ const { checkboxData } = props
+
+ const { isManageStatus, setManageStatus } = useShoppingContext()
+
//输入了搜索关键字
const getSearchData = useCallback((e) => {
// pageNum.current.page = 1
// setOrderData(() => ({ list: [], total: 0 }))
// setSearchField((val) => ({ ...val, name: e, size: 10 }))
}, [])
- // 是否在 管理 状态
- const [isManage, setManage] = useState(false)
+
+ const shoppingCart = useShoppingCart()
+ console.log('shoppingCart==>', shoppingCart)
// 管理
const onStartToManage = () => {
- setManage((isManage) => !isManage)
- // ShoppingContext.Consumer
+ setManageStatus(!isManageStatus)
+ // shoppingCart.setManageStatus(!isManageStatus)
}
const [selectedAmount, setSelectedAmount] = useState(0)
@@ -59,7 +80,7 @@ export const Shopping: FC = () => {
}, [shoppingCartData, state])
useDidShow(() => {
- (async () => {
+ ;(async () => {
await fetchData()
let query = Taro.createSelectorQuery()
console.log('query', query)
@@ -81,22 +102,14 @@ export const Shopping: FC = () => {
setShoppingCartData({ list: state.data, total: state.data.length })
}, [state])
- useDidShow(() => {
-
- })
-
- const [selectedId, setSelectedId] = useState()
-
- const handleSelectedItem = (item: ShoppingCartData) => {
- setSelectedId(item.purchaser_id)
- }
+
return (
- {isManage ? (
+ {isManageStatus ? (
) : (
@@ -106,18 +119,15 @@ export const Shopping: FC = () => {
-
-
- {!!shoppingCartData?.list?.length &&
- shoppingCartData?.list?.map((item, index) => {
- console.log('item==>', item)
- return
- })}
-
-
+
+ {!!shoppingCartData?.list?.length &&
+ shoppingCartData?.list?.map((item, index) => {
+ return
+ })}
+
- {isManage ? (
+ {isManageStatus ? (
) : (
@@ -127,4 +137,5 @@ export const Shopping: FC = () => {
)
}
+
export default Shopping
diff --git a/src/pages/shopping/types.ts b/src/pages/shopping/types.ts
index 24e9a0f..7404159 100644
--- a/src/pages/shopping/types.ts
+++ b/src/pages/shopping/types.ts
@@ -6,8 +6,10 @@ interface ShoppingCartData {
purchaser_short_name: string
sale_user_id: number
sale_user_name: string
- color_list: ColorList
- [Property:string]: any
+ bulk_color_list: ColorList
+ length_cut_color_list: ColorList // 剪板
+ weight_cut_color_list: ColorList // 散剪
+ [Property: string]: any
}
interface ColorList {
estimate_amount: number
diff --git a/src/pages/takeDelivery/components/DeliveryStatusList/index.module.scss b/src/pages/takeDelivery/components/DeliveryStatusList/index.module.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx b/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx
new file mode 100644
index 0000000..067237e
--- /dev/null
+++ b/src/pages/takeDelivery/components/DeliveryStatusList/index.tsx
@@ -0,0 +1,42 @@
+import SegmentedControl from '@/components/segmentedControl'
+import { FC, memo, useCallback, useEffect, useState } from 'react'
+import { EnumTakeGoodsOrderStatus } from '@/api/index'
+
+type PropsType = {
+ onChangeStatus?: (data: { id: number; name: string }) => void
+}
+
+const DeliveryStatusList = memo((props) => {
+ const { onChangeStatus } = props
+ const { fetchData } = EnumTakeGoodsOrderStatus()
+ const [statusList, setStatusList] = useState([
+ {
+ id: -1,
+ name: '全部',
+ },
+ ])
+ // 请求
+ const getDeliveryStatusList = async () => {
+ const res = await fetchData()
+ console.log(res.data.list)
+ setStatusList(
+ res.data.list.filter((item) => {
+ return item.id === 0 || item.id === 1 // 提货中 已收货
+ }),
+ )
+ }
+
+ useEffect(() => {
+ getDeliveryStatusList()
+ }, [])
+
+ // //状态改变
+ const changeStatus = useCallback(
+ (data: { id: number; name: string }) => {
+ onChangeStatus && onChangeStatus({ id: data.id, name: data.name })
+ },
+ [onChangeStatus],
+ )
+ return
+})
+export default DeliveryStatusList
diff --git a/src/pages/takeDelivery/components/Filter/index.module.scss b/src/pages/takeDelivery/components/Filter/index.module.scss
new file mode 100644
index 0000000..175fa29
--- /dev/null
+++ b/src/pages/takeDelivery/components/Filter/index.module.scss
@@ -0,0 +1,88 @@
+.filterItem {
+ margin: 24px 48px;
+ &--title {
+ font-size: 28px;
+ font-weight: 550;
+ line-height: 1.5;
+ }
+ &--wrapper {
+ margin-top: 24px;
+ display: grid;
+ grid-gap: 16px 16px;
+ }
+}
+.filter {
+ &--time {
+ grid-template-columns: 1fr 1fr 1fr 1fr;
+ }
+ &--inputBar {
+ }
+ &--type {
+ grid-template-columns: 1fr 1fr;
+ }
+}
+.filterTypeButton {
+ padding: 0 24px;
+ font-size: 28px;
+}
+.filterTypeText {
+ color: #6e6e6e !important;
+}
+.filterTimeButton {
+ grid-column-start: span 2;
+}
+.selected {
+ background-color: #eaf2ff;
+}
+
+.filterButton {
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: center;
+ padding: 0 20px;
+ box-sizing: border-box;
+ border: 0 solid transparent;
+ background-color: #f6f6f6;
+ border-radius: 8px;
+ font-size: 28px;
+ height: 72px;
+ &--text {
+ color: #909090;
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: center;
+ align-items: center;
+ }
+ &:hover {
+ opacity: 0.7;
+ }
+ &--active {
+ border: 1px solid $color_main;
+ background-color: #eaf2ff;
+ .filterButton--text {
+ color: $color_main;
+ }
+ }
+}
+.filterController {
+ margin-top: 60px;
+ width: 100%;
+ display: flex;
+ flex-flow: row nowrap;
+ align-items: center;
+ justify-content: space-around;
+ padding-bottom: constant(safe-area-inset-bottom);
+ padding-bottom: env(safe-area-inset-bottom);
+
+ btn:hover{
+ filter: blur(.7);
+ }
+
+ .rest_btn {
+ font-size: 28px;
+ }
+ .verify_btn {
+ font-size: 28px;
+ }
+}
diff --git a/src/pages/takeDelivery/components/Filter/index.tsx b/src/pages/takeDelivery/components/Filter/index.tsx
new file mode 100644
index 0000000..5091d41
--- /dev/null
+++ b/src/pages/takeDelivery/components/Filter/index.tsx
@@ -0,0 +1,237 @@
+import NormalButton from '@/components/normalButton'
+import Popup from '@/components/popup'
+import { View } from '@tarojs/components'
+import classnames from 'classnames'
+import styles from './index.module.scss'
+import React, { FC, memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
+import Search from '@/components/search'
+import IconFont from '@/components/iconfont/iconfont'
+import { EnumTakeGoodsOrderTypeList } from '@/api/index'
+import dayjs from 'dayjs'
+import { getFilterData } from '@/common/util'
+import Taro from '@tarojs/taro'
+
+interface SearchFilter {
+ take_goods_order_type?: number
+ timeKey?: string
+ take_goods_order_no?: string
+}
+
+export interface SearchField extends Omit {
+ date_min?: string
+ date_max?: string
+}
+
+interface DeliveryPropsType {
+ onSearchTime?: () => void
+ onConfirm?: (searchField: SearchField, timeKey?: Pick['timeKey']) => void
+ onCancal?: () => void
+ onReset?: () => void
+}
+
+interface ButtonPropsType {
+ isActive: boolean
+ onClick?: Function
+ children?: React.ReactNode
+ customClassName?: string
+}
+
+export const filterTimeOptions = {
+ 0: {
+ name: '不限',
+ date_min: undefined,
+ date_max: undefined,
+ },
+ 1: {
+ name: '今天',
+ date_min: `${dayjs(new Date()).add(0, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ date_max: `${dayjs(new Date()).add(1, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ },
+ 2: {
+ name: '昨日',
+ date_min: `${dayjs(new Date()).add(-1, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ date_max: `${dayjs(new Date()).add(0, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ },
+ 3: {
+ name: '近7日',
+ date_min: `${dayjs(new Date()).add(-7, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ date_max: `${dayjs(new Date()).add(0, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ },
+ 4: {
+ name: '近30日',
+ date_min: `${dayjs(new Date()).add(-30, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ date_max: `${dayjs(new Date()).add(0, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ },
+ 5: {
+ name: '近90日',
+ date_min: `${dayjs(new Date()).add(-90, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ date_max: `${dayjs(new Date()).add(0, 'day').format('YYYY-MM-DD')} 00:00:00`,
+ },
+} as const
+
+const DeliveryFilter = memo((props) => {
+ const { onSearchTime, onConfirm, onCancal, onReset } = props
+
+ const { fetchData, state } = EnumTakeGoodsOrderTypeList()
+
+ const [searchFilter, setSearchFilter] = useState({
+ take_goods_order_type: undefined,
+ timeKey: '0',
+ take_goods_order_no: '',
+ })
+ const handleSelectedType = (type: string | number) => {
+ console.log('type==>', type)
+ if (typeof type === 'string' && type === 'default') {
+ setSearchFilter((e) => ({ ...e, take_goods_order_type: undefined }))
+ } else {
+ setSearchFilter((e) => ({ ...e, take_goods_order_type: type as number }))
+ }
+ }
+
+
+ const handleSearchBarChange = useCallback((searchValue: string) => {
+ console.log('searchValue==>', searchValue)
+ setSearchFilter((prevProps) => ({ ...prevProps, take_goods_order_no: searchValue }))
+ }, [])
+
+ const typeList = useMemo<{ id: number; name: string }[]>(() => {
+ return state.data.list
+ }, [state])
+
+ useEffect(() => {
+ if (!!!typeList?.length) {
+ getEnumData()
+ console.log('getEnumData')
+ }
+ }, [typeList])
+
+ const getEnumData = async () => {
+ await fetchData()
+ }
+
+ const [customTime, setCustomTime] = useState({
+ date_min: undefined,
+ date_max: undefined,
+ })
+
+
+
+ const handleSelectedTime = (timeOptionId) => {
+ setSearchFilter((e) => ({ ...e, timeKey: timeOptionId }))
+ // 不是设置了自定义时间
+ if (timeOptionId !== '6') {
+ setCustomTime({
+ date_min: filterTimeOptions[timeOptionId]['date_min'],
+ date_max: filterTimeOptions[timeOptionId]['date_max'],
+ })
+ return
+ }
+ onSearchTime?.()
+ }
+
+ const handleReset = () => {
+ setSearchFilter({ take_goods_order_type: undefined, timeKey: '0', take_goods_order_no: '' })
+ onReset?.()
+ }
+ const handleConfirm = () => {
+ const changedField = {
+ take_goods_order_type: searchFilter.take_goods_order_type,
+ take_goods_order_no: searchFilter.take_goods_order_no,
+ date_min: customTime.date_min,
+ date_max: customTime.date_max,
+ }
+ console.log('changedField==>', changedField)
+ onConfirm?.(changedField, searchFilter.timeKey)
+ }
+
+ const scanIcon = () => {
+ // 扫描
+ const handleScan = () => {
+ Taro.scanCode({
+ success(res) {
+ setSearchFilter((prevProps) => ({ ...prevProps, take_goods_order_no: res.result }))
+ },
+ fail(res) {
+ console.log(res)
+ },
+ })
+ }
+ return (
+
+
+
+ )
+ }
+
+ return (
+ <>
+
+ 提货单号
+
+
+
+
+
+ 提货类型
+
+ handleSelectedType('default')}>
+ 不限
+
+ {!!typeList?.length &&
+ typeList?.map((item) => {
+ return (
+ handleSelectedType(item?.id)}>
+ {item.name}
+
+ )
+ })}
+
+
+
+
+ 查询日期
+
+ {Object.entries(filterTimeOptions).map(([key, value]) => {
+ return (
+ handleSelectedTime(key)}>
+ {value.name}
+
+ )
+ })}
+ handleSelectedTime('6')}>
+ 自定义时间
+
+
+
+
+
+ 重置
+
+
+ 确认
+
+
+ >
+ )
+})
+
+const FilterButton: FC = (props) => {
+ const { onClick, children, isActive = false, customClassName } = props
+ const handleClick = () => {
+ onClick?.()
+ }
+ return (
+
+ {children}
+
+ )
+}
+
+export default DeliveryFilter
diff --git a/src/pages/takeDelivery/components/ItemList/index.module.scss b/src/pages/takeDelivery/components/ItemList/index.module.scss
new file mode 100644
index 0000000..754ee16
--- /dev/null
+++ b/src/pages/takeDelivery/components/ItemList/index.module.scss
@@ -0,0 +1,62 @@
+.layoutBlock{
+ margin: 24px;
+}
+.topBar {
+ font-size: 28px;
+ &__orderNo {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ color: $color_font_one;
+ }
+ &__orderType {
+ color: rgba($color: #000000, $alpha: 0.6);
+ font-weight: 550;
+ }
+ &__orderStatus {
+ font-weight: 550;
+ &--finished{
+ color: $color_font_three;
+ }
+ &--takingGoods{
+ color: $color_main;
+ }
+ }
+}
+.content {
+ &__row {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ margin: 16px 0;
+ font-size: 28px;
+ color: rgba($color: #000000, $alpha: 0.4);
+ &__left {
+ min-width: 140px;
+ }
+ &__right {
+ @include common_ellipsis(2);
+ }
+ }
+}
+.bottomBar {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: flex-end;
+ align-items: center;
+ margin-top: 10px;
+ &__button {
+ margin: 0 24px;
+ font-size: 28px;
+ padding: 0 26px;
+ }
+ &__button:last-child {
+ margin: 0;
+ }
+}
+.bord {
+ color: $color_font_one;
+}
+.tag{
+ margin: 0 16px;
+}
diff --git a/src/pages/takeDelivery/components/ItemList/index.tsx b/src/pages/takeDelivery/components/ItemList/index.tsx
new file mode 100644
index 0000000..eca6ef2
--- /dev/null
+++ b/src/pages/takeDelivery/components/ItemList/index.tsx
@@ -0,0 +1,101 @@
+import LayoutBlock from '@/components/layoutBlock'
+import Divider from '@/components/divider'
+import Tag from '@/components/tag'
+import { View, Text } from '@tarojs/components'
+import { FC } from 'react'
+import NormalButton from '@/components/normalButton'
+import styles from './index.module.scss'
+import classnames from 'classnames'
+import { EnumSaleMode } from '@/common/Enumerate'
+import { formatDateTime, formatMeterDiv } from '@/common/format'
+import { goLink } from '@/common/common'
+import { TakeGoodsOrderAudit } from '@/api/index'
+import Taro from '@tarojs/taro'
+import SaleModeTag from '@/components/saleModeTag'
+
+type PropsType = {
+ itemData: Record
+ onSuccess?: Function
+}
+
+const ItemList:FC = (props) => {
+ const { itemData, onSuccess } = props
+ // 查看详情
+ const handleDetail = (itemData: Record) => {
+ goLink('/pages/takeDeliveryDetail/index', {
+ id: itemData.id,
+ })
+ }
+
+ const { fetchData } = TakeGoodsOrderAudit()
+
+ // 确认审核
+ const handleAudit = (id: number) => {
+ Taro.showModal({
+ content: '确认要提货吗?',
+ confirmColor: '#337FFF',
+ success: async (res) => {
+ if (res.confirm) {
+ const res = await fetchData({ id })
+ if (res.success) {
+ Taro.showToast({ title: '提货成功', icon: 'success' })
+ onSuccess?.()
+ }else{
+ Taro.showToast({ title: '操作失败', icon: 'error' })
+ }
+ }
+ },
+ })
+ }
+
+ return (
+
+
+
+ 单号:{itemData?.take_goods_order_no}
+ {itemData?.take_goods_status === 0 && (
+ 提货中
+ )}
+ {itemData?.take_goods_status === 1 && 已收货}
+
+ {itemData?.take_goods_order_type_name}
+
+
+
+
+ 货品信息:
+
+
+ {/* TODO: 面料字段、颜色字段 */}
+ {itemData.delivery_product_nums}种面料,{itemData.delivery_product_color_nums}种颜色,共
+ {itemData?.sale_mode === EnumSaleMode.Bulk ? `${itemData?.take_roll}条` : `${formatMeterDiv(itemData?.take_meters)}米`}
+
+
+
+ 供应信息:
+ {itemData?.supplier_name || '空'}
+
+
+ 创建时间:
+ {formatDateTime(itemData?.take_goods_order_create_time) || '空'}
+
+
+
+ handleDetail(itemData)}>
+ 查看详情
+
+ {itemData?.status === 0 && (
+ handleAudit(itemData?.id)}>
+ 确认审核
+
+ )}
+
+
+ )
+}
+export default ItemList
diff --git a/src/pages/takeDelivery/components/remark/index.module.scss b/src/pages/takeDelivery/components/remark/index.module.scss
new file mode 100644
index 0000000..036a4ce
--- /dev/null
+++ b/src/pages/takeDelivery/components/remark/index.module.scss
@@ -0,0 +1,48 @@
+.order_popup{
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ padding: 20px 0;
+ .order_popup_title{
+ color: $font_size_big;
+ font-weight: 700;
+ color: #000000;
+ padding-bottom: 20px;
+ }
+ .order_popup_input{
+ width: 100%;
+ padding: 0 25px;
+ box-sizing: border-box;
+ margin-top: 43px;
+ position: relative;
+ .descDataNum{
+ position: absolute;
+ right: 40px;
+ bottom: 10px;
+ height: 39px;
+ font-size: $font_size_medium;
+ color: $color_font_two;
+ }
+ textarea{
+ background-color: #f3f3f3;
+ border-radius: 10px;
+ width: 100%;
+ height: 313px;
+ padding: 20px;
+ padding-bottom: 50px;
+ box-sizing: border-box;
+ font-size: $font_size;
+ border: 2px solid #e6e6e6;
+ }
+ }
+ .order_save_address{
+ height: 82px;
+ background: #007aff;
+ border-radius: 40px;
+ width: 668px;
+ text-align: center;
+ line-height: 82px;
+ color: #fff;
+ margin-top: 60px;
+ }
+}
\ No newline at end of file
diff --git a/src/pages/takeDelivery/components/remark/index.tsx b/src/pages/takeDelivery/components/remark/index.tsx
new file mode 100644
index 0000000..db4b68f
--- /dev/null
+++ b/src/pages/takeDelivery/components/remark/index.tsx
@@ -0,0 +1,43 @@
+import Popup from "@/components/popup"
+import { Textarea, View } from "@tarojs/components"
+import { useCallback, useEffect, useState } from "react"
+import styles from './index.module.scss'
+
+type Param = {
+ onBlur?: (val:any) => void
+ onSave?: (val: string) => void
+ defaultValue?: string
+}
+export default ({onBlur, onSave, defaultValue = ''}:Param) => {
+ const [descData, setDescData] = useState({
+ number: 0,
+ value: '',
+ count: 200
+ })
+
+ useEffect(() => {
+ getDesc(defaultValue)
+ }, [defaultValue])
+
+ const getDesc = (value) => {
+ let res = value
+ if(value.length > descData.count) {
+ res = value.slice(0, descData.count)
+ }
+ setDescData({...descData, number:res.length, value: res})
+ }
+
+ const setSave = () => {
+ onSave?.(descData.value)
+ }
+ return (
+
+ 编辑备注
+
+
+ {descData.number}/{descData.count}
+
+ setSave()}>保存
+
+ )
+}
\ No newline at end of file
diff --git a/src/pages/takeDelivery/index.config.ts b/src/pages/takeDelivery/index.config.ts
new file mode 100644
index 0000000..5a2ecc1
--- /dev/null
+++ b/src/pages/takeDelivery/index.config.ts
@@ -0,0 +1,3 @@
+export default {
+ navigationBarTitleText: '提货列表',
+}
diff --git a/src/pages/takeDelivery/index.module.scss b/src/pages/takeDelivery/index.module.scss
new file mode 100644
index 0000000..d31e751
--- /dev/null
+++ b/src/pages/takeDelivery/index.module.scss
@@ -0,0 +1,43 @@
+page {
+ background: #f7f7f7;
+ height: 100%;
+ display: flex;
+ flex-flow: column nowrap;
+}
+
+.delivery {
+ position: relative;
+ display: flex;
+ flex-flow: column nowrap;
+ overflow: hidden;
+ padding-bottom: env(safe-area-inset-bottom);
+ .searchBox {
+ display: flex;
+ align-items: center;
+ background: #ffffff;
+ padding: 8px 24px;
+ flex: none;
+ }
+
+ .listBox {
+ flex: 1 1 auto;
+ background-color: #f7f7f7;
+ height: 100%;
+ &--total {
+ display: block;
+ margin-top: 24px;
+ padding: 0 24px;
+ font-size: 24px;
+ color: #9d9d9d;
+ }
+ }
+}
+.scanHandler {
+ width: 40px;
+ height: 40px;
+}
+
+.icon__filter {
+ padding: 0 20px;
+ padding-right: 10px;
+}
diff --git a/src/pages/takeDelivery/index.tsx b/src/pages/takeDelivery/index.tsx
new file mode 100644
index 0000000..cb6fda9
--- /dev/null
+++ b/src/pages/takeDelivery/index.tsx
@@ -0,0 +1,199 @@
+import { View, Text } from '@tarojs/components'
+import { useCallback, useEffect, useMemo, useRef, useState, FC, memo } from 'react'
+import styles from './index.module.scss'
+import Search from '@/components/search'
+import { TakeGoodsOrderList } from '@/api/index'
+import Taro from '@tarojs/taro'
+import { useRouter } from '@tarojs/taro'
+import InfiniteScroll from '@/components/infiniteScroll'
+import { dataLoadingStatus, getFilterData } from '@/common/util'
+import IconText from '@/components/iconText'
+import IconFont from '@/components/iconfont/iconfont'
+import ItemList from './components/ItemList'
+import DeliveryStatusList from './components/DeliveryStatusList'
+import Popup from '@/components/popup'
+import DeliveryFilter, { SearchField } from './components/Filter'
+import TimePicker from '@/components/timePicker'
+
+type SearchData = {
+ take_goods_order_no?: string // 提货单号
+ take_goods_status?: number | string // 提货状态
+ date_min?: string // 开始时间
+ date_max?: string // 结束时间
+ take_goods_order_type?: number // 提货类型
+ page: number
+ size: number
+}
+
+
+
+const defaultSearchFields = {
+ take_goods_status: 0, // 待提货
+ page: 1,
+ size: 10,
+}
+
+// 提货列表
+const Delivery: FC = () => {
+ const [search, setSearch] = useState(defaultSearchFields)
+ const [takeDeliveryOrderList, setDeliveryOrderList] = useState<{ list: any[]; total: number }>({ list: [], total: 0 })
+
+ const { fetchData: FetchDeliveryOrderList, state: orderState } = TakeGoodsOrderList()
+ //数据加载状态
+ const statusMore = useMemo(() => {
+ return dataLoadingStatus({ list: takeDeliveryOrderList.list, total: takeDeliveryOrderList.total, status: orderState.loading })
+ }, [takeDeliveryOrderList, orderState])
+
+ //输入搜索关键字
+ const getSearchData = useCallback((searchValue: string) => {
+ setSearch((prevProps) => ({ ...prevProps, take_goods_order_no: searchValue }))
+ console.log('searchValue==>', searchValue)
+ }, [])
+
+ useEffect(() => {
+ console.log('useEffect ===> search', search)
+ getData()
+ }, [search])
+
+ //上拉加载数据
+ const pageNum = useRef({ size: search.size, page: search.page })
+
+ const getScrollToLower = useCallback(() => {
+ if (takeDeliveryOrderList.list.length < takeDeliveryOrderList.total) {
+ pageNum.current.page++
+ const size = pageNum.current.size * pageNum.current.page
+ setSearch((e) => ({ ...e, size }))
+ console.log(search, 11111)
+ }
+ }, [takeDeliveryOrderList])
+
+ //列表下拉刷新
+ const [refresherTriggeredStatus, setRefresherTriggeredStatus] = useState(false)
+
+ const getRefresherRefresh = async () => {
+ pageNum.current.size = 1
+ setRefresherTriggeredStatus(true)
+ setSearch((val) => ({ ...val, size: 10 }))
+ }
+ // 请求数据
+ const getData = async () => {
+ const res = await FetchDeliveryOrderList(getFilterData(search))
+
+ setDeliveryOrderList((e) => ({ ...e, list: res.data?.list, total: res.data?.total }))
+ setRefresherTriggeredStatus(() => false)
+ }
+
+ const [currentStatus, setCurrentStatus] = useState('待提货')
+
+ const handleChangeStatus = ({ id: statusId, name: statusName }) => {
+ setCurrentStatus(statusName)
+ setSearch((e) => ({ ...e, take_goods_status: statusId }))
+ }
+
+ const handleAuditSuccess = () => {
+ getData()
+ }
+
+ const [showFilter, setShowFilter] = useState(false)
+ // 筛选列表
+ const onShowFilter = () => {
+ setShowFilter(true)
+ }
+ // 点击关闭筛选列表框
+ const handlePopupClose = () => {
+ setShowFilter(false)
+ }
+
+ // 展示时间筛选
+ const [showTime, setShowTime] = useState(false)
+
+ // 点击关闭时间筛选
+ const handClose = () => {
+ setShowTime(false)
+ }
+ const [start, setStart] = useState(new Date().toLocaleDateString())
+ const [end, setEnd] = useState('')
+ // 选择时间
+ const handTime = (event) => {
+ console.log(event?.value, 'event?.value?.start')
+ setStart(event?.value?.start)
+ setEnd(event?.value?.end)
+ setShowTime(false)
+ console.log(search, 8888)
+ }
+ // 显示时间选择器
+ const handleSearchTime = () => {
+ setShowTime(true)
+ }
+ // 筛选框点击确认
+ const handleConfirm = (changedFields: SearchField, timeKey) => {
+ console.log('changedFields==>changedFields', changedFields)
+ // 自定义时间
+ if (timeKey === '6') {
+ setSearch((prevProps) => ({ ...prevProps, ...changedFields, date_min: start, date_max: end }))
+ } else {
+ setSearch((prevProps) => ({ ...prevProps, ...changedFields }))
+ }
+ handlePopupClose()
+ }
+ // 筛选框点击重置
+ const handleReset = () => {
+ setSearch(defaultSearchFields)
+ handlePopupClose()
+ }
+
+ const scanIcon = () => {
+ // 扫描
+ const handleScan = () => {
+ Taro.scanCode({
+ success(res) {
+ setSearch((e) => ({ ...e, take_goods_order_no: res.result }))
+ },
+ fail(res) {
+ console.log(res)
+ },
+ })
+ }
+ return (
+
+
+
+ )
+ }
+
+ return (
+
+
+
+
+
+
+
+
+ {/* 状态栏 */}
+
+
+
+
+
+ {currentStatus}共 {takeDeliveryOrderList.total} 单
+
+ {takeDeliveryOrderList.list.map((item, index) => {
+ return
+ })}
+
+
+
+
+
+ handTime(e)}>
+
+ )
+}
+
+export default Delivery
diff --git a/src/pages/takeDeliveryDetail/index.config.ts b/src/pages/takeDeliveryDetail/index.config.ts
new file mode 100644
index 0000000..381c573
--- /dev/null
+++ b/src/pages/takeDeliveryDetail/index.config.ts
@@ -0,0 +1,3 @@
+export default {
+ navigationBarTitleText: '提货详情',
+}
diff --git a/src/pages/takeDeliveryDetail/index.module.scss b/src/pages/takeDeliveryDetail/index.module.scss
new file mode 100644
index 0000000..b848324
--- /dev/null
+++ b/src/pages/takeDeliveryDetail/index.module.scss
@@ -0,0 +1,104 @@
+page {
+ display: flex;
+ flex-flow: column nowrap;
+ height: 100%;
+}
+.deliveryDetail {
+ display: flex;
+ flex-flow: column nowrap;
+ height: 100%;
+ .content {
+ padding-top: 24px;
+ flex: 1 1 auto;
+ overflow: scroll;
+ .detailTop {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 28px;
+ }
+ .topBar__orderType {
+ color: rgba($color: #000000, $alpha: 0.6);
+ font-size: 28px;
+ font-weight: 550;
+ }
+ }
+ .bottomBar {
+ flex: none;
+ margin: 0 24px;
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: center;
+ align-items: center;
+ padding-top: 24px;
+ padding-bottom: calc(20px + constant(safe-area-inset-bottom));
+ padding-bottom: calc(20px + env(safe-area-inset-bottom));
+ }
+}
+.detailInfo {
+ .detailInfoItem {
+ &--title {
+ display: flex;
+ flex-flow: row nowrap;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 28px;
+ padding: 10px 0;
+ }
+ &--detail {
+ &--row {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 10px 0;
+ font-size: 28px;
+ }
+ &--name {
+ }
+ &--count {
+ }
+ &--weight {
+ }
+ }
+ }
+}
+.orderInfoTop {
+ font-size: 28px;
+ color: $color_font_one;
+ font-weight: 550;
+}
+
+.orderNo {
+ font-size: 28px;
+ font-weight: 550;
+}
+.status {
+ font-size: 28px;
+ &--takingGoods {
+ color: $color_main;
+ }
+ &--finished {
+ color: $color_font_three;
+ }
+}
+
+.divider {
+ margin: 24px 0;
+}
+.total {
+ margin-top: 24px;
+ padding: 15px 24px;
+ font-size: 24px;
+ line-height: 30px;
+ font-weight: 600;
+ color: #f79b31;
+ background: #fef9f4;
+ border-radius: 8px;
+ display: flex;
+ .totalContent {
+ flex: 1 1 auto;
+ display: inline-block;
+ text-align: right;
+ }
+}
diff --git a/src/pages/takeDeliveryDetail/index.tsx b/src/pages/takeDeliveryDetail/index.tsx
new file mode 100644
index 0000000..9374f00
--- /dev/null
+++ b/src/pages/takeDeliveryDetail/index.tsx
@@ -0,0 +1,222 @@
+import { TakeGoodsOrder, TakeGoodsOrderAudit, TakeGoodsOrderRefuse } from '@/api'
+import { formatDateTime, formatMeterDiv, formatWeightDiv } from '@/common/format'
+import Cell from '@/components/cell'
+import Divider from '@/components/divider'
+import LayoutBlock from '@/components/layoutBlock'
+import NormalButton from '@/components/normalButton'
+import SaleModeTag from '@/components/saleModeTag'
+import UploadImage from '@/components/uploadImage'
+import { View, Text } from '@tarojs/components'
+import Taro from '@tarojs/taro'
+import { useRouter } from '@tarojs/taro'
+import { alert } from '@/common/common'
+import { FC, useCallback, useEffect, useMemo, useState } from 'react'
+import styles from './index.module.scss'
+import Popup from '@/components/popup'
+import Remark from '../takeDelivery/components/remark'
+
+const TakeDeliveryDetail: FC = () => {
+ const router = useRouter()
+
+ const { fetchData } = TakeGoodsOrder()
+
+ const [detailInfo, setDetailInfo] = useState>({})
+
+ const getData = async () => {
+ const { id } = router.params
+ const res = await fetchData({
+ id,
+ })
+ console.log('res==>', res.data)
+ setDetailInfo(res.data)
+ // 动态设置标题
+ Taro.setNavigationBarTitle({
+ title: res.data.take_goods_order_type_name,
+ })
+ }
+
+ useEffect(() => {
+ getData()
+ }, [])
+
+ const { fetchData: FetchAudit } = TakeGoodsOrderAudit()
+
+ const DetailItem = useMemo(() => {
+ const element =
+ !!detailInfo?.dyelot_number_list?.length &&
+ detailInfo?.dyelot_number_list.map((weightItem) => {
+ return (
+
+
+
+
+
+
+ {weightItem.product_code}# {weightItem.product_name}
+
+
+
+ 共 {weightItem?.sale_mode === 0 ? `${weightItem.sale_roll} 条` : `${formatMeterDiv(weightItem?.sale_length || 0)} 米`}
+
+
+
+
+ {weightItem.product_color_code}# {weightItem.product_color_name}
+
+
+ x{weightItem?.sale_mode === 0 ? `${weightItem.sale_roll} 条` : `${formatMeterDiv(weightItem?.sale_length || 0)} 米`}
+
+ {formatWeightDiv(weightItem.weight)}/kg
+
+
+
+
+ )
+ })
+ return <>{element}>
+ }, [detailInfo])
+
+ const [readyToUploadList, setReadyToUploadList] = useState([])
+
+ const handleUploadChange = (imageList: string[]) => {
+ console.log('imageList===>', imageList)
+ setReadyToUploadList((prev) => [...prev, ...imageList])
+ }
+
+ const { fetchData: refuseOrder } = TakeGoodsOrderRefuse()
+
+ const [showRemarkModal, setShowRemarkModal] = useState(false)
+
+ const handleRefuseOrder = async (remark: string) => {
+ const res = await refuseOrder({
+ id: Number(router.params.id),
+ remark: remark,
+ })
+ if (res.success) {
+ alert.success('拒收成功')
+ getData()
+ } else {
+ alert.error('该操作失败')
+ }
+ }
+
+ const onRemarkSave = async (remark: string) => {
+ handleRefuseOrder(remark)
+
+ }
+
+ // 拒收
+ const handleRefuse = useCallback(() => {
+ setShowRemarkModal(true)
+ }, [])
+
+
+
+ // 审核
+ const handleAudit = useCallback(() => {
+ Taro.showModal({
+ confirmColor: '#337FFF',
+ title: '确定要提货?',
+ success: async function (res) {
+ if (res.confirm) {
+ const res = await FetchAudit({ id: Number(router.params.id) })
+ if (res.success) {
+ alert.success('提货成功')
+ getData()
+ } else {
+ alert.error('请求失败')
+ }
+ }
+ },
+ })
+ }, [readyToUploadList])
+
+ // 底部按钮栏
+ const BottomBar = useMemo(() => {
+
+ if (detailInfo?.take_goods_order_type !== 0) {
+ // 采购提货
+ return (
+
+
+ 确认提货
+
+
+ )
+ } else {
+ // 退货提货
+ return (
+
+
+ 拒收
+
+
+ 确认提货
+
+
+ )
+ }
+ }, [handleRefuse, handleAudit])
+ return (
+
+
+
+
+ 提货单号:{detailInfo?.take_order_no}
+ {detailInfo?.take_goods_status === 0 ? (
+ {detailInfo?.take_goods_status_name}
+ ) : (
+ {detailInfo?.take_goods_status_name}
+ )}
+
+ {detailInfo?.take_goods_order_type === 0 && 供应信息:{detailInfo?.supplier_name}}
+ {DetailItem}
+
+ 汇总:
+
+ 共{detailInfo?.dyelot_number_list?.length || 0}种面料,4种颜色,共
+ {detailInfo?.sale_mode === 0 ? `${detailInfo?.take_roll}条` : `${formatMeterDiv(detailInfo?.take_meters)}米`}
+ ,重量{detailInfo?.weight}kg
+
+
+
+ {detailInfo?.take_goods_order_type !== 0 && (
+ <>
+
+ 退货布匹附件
+
+
+
+
+ 退货物流附件
+
+
+
+ >
+ )}
+
+
+ 订单信息
+
+
+ |
+ |
+ |
+
+
+ {detailInfo?.take_goods_order_type !== 0 && (
+
+ 备注信息
+
+ {detailInfo?.remark}
+
+ )}
+
+ {detailInfo?.take_goods_status === 0 && BottomBar}
+ setShowRemarkModal(false)}>
+
+
+
+ )
+}
+export default TakeDeliveryDetail
diff --git a/src/pages/user/index.module.scss b/src/pages/user/index.module.scss
index 66c0f14..61d97de 100644
--- a/src/pages/user/index.module.scss
+++ b/src/pages/user/index.module.scss
@@ -4,7 +4,6 @@ page{
}
.main {
background: linear-gradient(to bottom, $color_main 25%, $color_bg_one 42%);
- padding: 24px;
padding-bottom: 0;
box-sizing: border-box;
overflow-y: scroll;
diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx
index a2194b8..eafcd8a 100644
--- a/src/pages/user/index.tsx
+++ b/src/pages/user/index.tsx
@@ -7,13 +7,12 @@ import Tag from '@/components/tag'
import Divider from '@/components/Divider'
import LayoutBlock from '@/components/layoutBlock'
import IconCard from '@/components/iconCard'
-import IconFont from '@/components/iconfont/iconfont'
+import { IconNames } from '@/components/iconfont/iconfont'
import useUserInfo from '@/use/useUserInfo'
import { goLink } from '@/common/common'
-type IconfontName = Parameters['0']['name']
type IconCardType = {
- iconName: IconfontName
+ iconName: IconNames
name: string
path: string
}
@@ -42,7 +41,7 @@ const feature: IconCardType[] = [
{
iconName: 'icon-tihuoliebiao',
name: '提货列表',
- path: '',
+ path: '/pages/takeDelivery/index',
},
{
iconName: 'icon-shouhouzhongxin',
diff --git a/src/styles/iconfont.scss b/src/styles/iconfont.scss
index aa8004e..b109443 100644
--- a/src/styles/iconfont.scss
+++ b/src/styles/iconfont.scss
@@ -3,7 +3,7 @@
/* Project id 3619513 */
// url('/src/styles/iconfont.ttf') format('truetype');
src:
- url('iconfont.ttf?t=1663556335905') format('truetype');
+ url('/src/styles/iconfont.ttf?t=1663556335905') format('truetype');
}
.iconfont {