UNPKG

@fruits-chain/sop

Version:
681 lines (649 loc) 44.6 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var reactNativeXiaoshu = require('@fruits-chain/react-native-xiaoshu'); var React = require('react'); var reactNative = require('react-native'); var Upload = require('@fruits-chain/react-native-upload'); var EStyleSheet = require('react-native-extended-stylesheet'); var Upload$1 = require('@fruits-chain/upload'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var React__default = /*#__PURE__*/_interopDefaultLegacy(React); var Upload__default$1 = /*#__PURE__*/_interopDefaultLegacy(Upload); var EStyleSheet__default = /*#__PURE__*/_interopDefaultLegacy(EStyleSheet); var Upload__default = /*#__PURE__*/_interopDefaultLegacy(Upload$1); var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; var dayjs_min = {exports: {}}; (function (module, exports) { !function(t,e){module.exports=e();}(commonjsGlobal,(function(){var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",c="month",f="quarter",h="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return "["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return !r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return (e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return -t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return +(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return {M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",D={};D[g]=M;var p="$isDayjsObject",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else {var a=e.name;D[a]=e,i=a;}return !r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0;}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init();},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds();},m.$utils=function(){return b},m.isValid=function(){return !(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+"Hours",0);case u:return $(v+"Minutes",1);case s:return $(v+"Seconds",2);case i:return $(v+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f="set"+(this.$u?"UTC":""),l=(n={},n[a]=f+"Date",n[d]=f+"Date",n[c]=f+"Month",n[h]=f+"FullYear",n[u]=f+"Hours",n[s]=f+"Minutes",n[i]=f+"Seconds",n[r]=f+"Milliseconds",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d;}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,"0")},$=f||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case"YY":return String(e.$y).slice(-2);case"YYYY":return b.s(e.$y,4,"0");case"M":return a+1;case"MM":return b.s(a+1,2,"0");case"MMM":return h(n.monthsShort,a,c,3);case"MMMM":return h(c,a);case"D":return e.$D;case"DD":return b.s(e.$D,2,"0");case"d":return String(e.$W);case"dd":return h(n.weekdaysMin,e.$W,o,2);case"ddd":return h(n.weekdaysShort,e.$W,o,3);case"dddd":return o[e.$W];case"H":return String(s);case"HH":return b.s(s,2,"0");case"h":return d(1);case"hh":return d(2);case"a":return $(s,u,!0);case"A":return $(s,u,!1);case"m":return String(u);case"mm":return b.s(u,2,"0");case"s":return String(e.$s);case"ss":return b.s(e.$s,2,"0");case"SSS":return b.s(e.$ms,3,"0");case"Z":return i}return null}(t)||i.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g;}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",c],["$y",h],["$D",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])};})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O})); }(dayjs_min)); var dayjs = dayjs_min.exports; const maybeRules = (flag, rules) => { if (flag) return rules; return []; }; const maybeTips = (text, tips) => { if (tips) { return `${text}(${tips})`; } return text; }; const fieldKeyMap = { ["TEXT_TYPE" /* SopCheckItemEnum.TextType */]: 'TEXT_TYPE', ["RADIO_TYPE" /* SopCheckItemEnum.RadioType */]: 'RADIO_TYPE', ["FILE_TYPE" /* SopCheckItemEnum.FileType */]: 'FILE_TYPE', ["DATE_TYPE" /* SopCheckItemEnum.DateType */]: 'DATE_TYPE', ["CHECKBOX_TYPE" /* SopCheckItemEnum.CheckboxType */]: 'CHECKBOX_TYPE', ["UNKNOWN" /* SopCheckItemEnum.Unknown */]: '', ["UNRECOGNIZED" /* SopCheckItemEnum.Unrecognized */]: '', ["UNSPECIFIED" /* SopCheckItemEnum.Unspecified */]: '', }; const fieldDefaultValueMap = { ["TEXT_TYPE" /* SopCheckItemEnum.TextType */]: '', ["RADIO_TYPE" /* SopCheckItemEnum.RadioType */]: '', ["FILE_TYPE" /* SopCheckItemEnum.FileType */]: [], ["DATE_TYPE" /* SopCheckItemEnum.DateType */]: '', ["CHECKBOX_TYPE" /* SopCheckItemEnum.CheckboxType */]: [], ["UNKNOWN" /* SopCheckItemEnum.Unknown */]: '', ["UNRECOGNIZED" /* SopCheckItemEnum.Unrecognized */]: '', ["UNSPECIFIED" /* SopCheckItemEnum.Unspecified */]: '', }; const _fileList2uploadList = (files, conversion) => { return (files?.map?.(file => (conversion ? Upload.formatUploadList([file])[0] : file)) || []); }; const data2formValues = (data, file2uploadItem = true) => { return (data?.map(template => ({ ...template, sopCheckItems: template.sopCheckItems?.map(question => { const key = fieldKeyMap[question.type]; let value = question.sopResult?.checkResult?.[key]; // 数字类型:后端返回的string,需要解析为数字 if (key === 'TEXT_TYPE' && question.inputTextRule === "ONLY_NUMBER" /* InputTextRule.OnlyNumber */) { value = parseFloat(value); if (isNaN(value)) { value = null; } } // 文件类型,需要转化为UploadItem[]类型 if (key === 'FILE_TYPE') { value = _fileList2uploadList(value, file2uploadItem); } // 单选类型,中台会返回“0”表示空,因此需要格式化未null if (key === 'RADIO_TYPE') { if (value === '0') { value = undefined; } } return { ...question, sopResult: { ...(question.sopResult || {}), fileLink: _fileList2uploadList(question.sopResult?.fileLink, file2uploadItem), checkResult: { [key]: value }, }, }; }) || [], })) || []); }; /** * 时间戳转时间字符串 * @param timestamp 要转换的时间戳 * @param format 转换格式 * @returns 转换后的时间字符串 */ const timestamp2time = (timestamp, format = 'YYYY-MM-DD HH:mm') => { if (timestamp) { return dayjs(timestamp).format(format); } return ''; }; const Option = ({ option, bg = false }) => { const bgStyle = bg ? { marginRight: 14, backgroundColor: '#F9F9F9', borderRadius: 8, } : {}; const wrapStyle = { flex: 1, marginVertical: 8, padding: 6, ...bgStyle, }; return (React__default["default"].createElement(reactNative.View, { style: wrapStyle }, React__default["default"].createElement(reactNative.Text, { style: { color: '#11151A', fontSize: 16, } }, option.label), option?.remarks ? (React__default["default"].createElement(reactNative.Text, { style: { color: '#8C9199', fontSize: 12, paddingTop: 6, } }, option.remarks)) : null)); }; var Option$1 = Option; const Title = ({ required = false, text }) => { return (React__default["default"].createElement(reactNative.View, { style: styles$2.wrap }, required && React__default["default"].createElement(reactNative.Text, { style: styles$2.required }, "*"), React__default["default"].createElement(reactNative.Text, { style: styles$2.text }, text))); }; const styles$2 = EStyleSheet__default["default"].create({ wrap: { flexDirection: 'row', }, required: { marginLeft: -2, color: '#F92F2F', }, text: { color: '#11151A', fontSize: 16, lineHeight: 22, }, }); var Title$1 = Title; const FileRemarkFormItem = ({ form, question, name, uploadProps, }) => { return (React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: [...name, 'fileLink'], rules: [ ...maybeRules(question.remarkRequired, [ () => ({ type: 'array', required: form.strictValidation, message: `请为[${question.name}]选择文件`, }), ]), () => ({ validator(_, val) { if (!form.strictValidation) return Promise.resolve(true); if (val?.some(item => item.status === 'loading')) { return Promise.reject(new Error(`${question.name}文件上传中...`)); } if (val?.some(item => item.status === 'error')) { return Promise.reject(new Error(`${question.name}文件上传失败`)); } return Promise.resolve(true); }, }), ], valuePropName: "list" }, React__default["default"].createElement(Upload__default["default"], { cropPickerMediaType: "any", pickerType: [ 'cropPicker', 'cropCameraPhoto', 'cropCameraVideo', 'visionCamera', ], maxCount: 10, tipText: "\u56FE\u7247/\u89C6\u9891", ...uploadProps }))); }; var FileRemarkFormItem$1 = FileRemarkFormItem; const Tips = ({ text, style, ...viewProps }) => { return (React__default["default"].createElement(reactNative.View, { style: [ { paddingHorizontal: 8, paddingVertical: 8, borderRadius: 4, backgroundColor: '#F9F9F9', }, style, ], ...viewProps }, React__default["default"].createElement(reactNative.Text, { style: { color: '#8C9199', fontSize: 12, lineHeight: 17, } }, text))); }; var Tips$1 = Tips; const CheckboxFormItem = ({ form, question, namePrefix, uploadProps, name, ...restProps }) => { const options = question.options?.map(option => { return { label: option?.name, value: option?.value, remarks: option?.remarks, }; }) || []; return (React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 0, head: 8, tail: 12 }, React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: [...name, 'checkResult', fieldKeyMap[question.type]], rules: maybeRules(question.required, [ () => ({ type: 'array', required: form.strictValidation, message: `请选择${question.name}`, }), ]) }, React__default["default"].createElement(reactNativeXiaoshu.Field.Selector, { multiple: true, options: options.map(option => ({ ...option, render() { return React__default["default"].createElement(Option$1, { bg: true, option: option }); }, })), title: React__default["default"].createElement(Title$1, { required: question.required, text: question.name }), innerStyle: { marginHorizontal: 0, paddingHorizontal: 0, alignItems: 'center', }, clearable: true, placeholder: "\u8BF7\u9009\u62E9", divider: false, ...restProps })), React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 12 }, !!question.remarks && React__default["default"].createElement(Tips$1, { text: question.remarks }), question.isRemark && (React__default["default"].createElement(FileRemarkFormItem$1, { form: form, question: question, namePrefix: namePrefix, name: name, uploadProps: uploadProps }))))); }; var CheckboxFormItem$1 = CheckboxFormItem; const DateFormItem = ({ form, question, namePrefix, name, uploadProps, ...restProps }) => { const namePath = [...name, 'checkResult', fieldKeyMap[question.type]]; const wholeNamePath = [...namePrefix, ...namePath]; return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: namePath, rules: maybeRules(question.required, [ () => ({ required: form.strictValidation, message: `请选择${question.name}`, }), ]) }), React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 0, head: 8, tail: 12 }, React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { shouldUpdate: true }, ({ getFieldValue, setFieldValue }) => { // 格式化字符串为Date let value = getFieldValue(wholeNamePath); if (value) { value = new Date(+dayjs(value)); } return (React__default["default"].createElement(reactNativeXiaoshu.Field.Date, { title: React__default["default"].createElement(Title$1, { required: question.required, text: question.name }), divider: false, mode: "Y-h", onChange: val => { // 格式化Date为字符串 const finalVal = val ? dayjs(val).format('YYYY-MM-DD HH') : null; setFieldValue(wholeNamePath, finalVal); }, value: value, clearable: true, innerStyle: { marginHorizontal: 0, paddingHorizontal: 0, alignItems: 'center', }, placeholder: "\u8BF7\u9009\u62E9", ...restProps })); }), React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 12 }, !!question.remarks && React__default["default"].createElement(Tips$1, { text: question.remarks }), question.isRemark && (React__default["default"].createElement(FileRemarkFormItem$1, { form: form, question: question, namePrefix: namePrefix, name: name, uploadProps: uploadProps })))))); }; var DateFormItem$1 = DateFormItem; const FileFormItem = ({ form, question, name, uploadProps }) => { return (React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 8, head: 16, tail: 12 }, React__default["default"].createElement(Title$1, { text: question.name, required: question.required }), !!question.remarks && React__default["default"].createElement(Tips$1, { text: question.remarks }), React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: [...name, 'checkResult', fieldKeyMap[question.type]], rules: [ ...maybeRules(question.required, [ () => ({ type: 'array', required: form.strictValidation, message: `请为[${question.name}]选择文件`, }), ]), () => ({ validator(_, val) { if (!form.strictValidation) return Promise.resolve(true); if (val?.some(item => item.status === 'loading')) { return Promise.reject(new Error(`${question.name}文件上传中...`)); } if (val?.some(item => item.status === 'error')) { return Promise.reject(new Error(`${question.name}文件上传失败`)); } return Promise.resolve(true); }, }), ], valuePropName: "list" }, React__default["default"].createElement(Upload__default["default"], { cropPickerMediaType: "any", pickerType: [ 'cropPicker', 'cropCameraPhoto', 'cropCameraVideo', 'visionCamera', ], maxCount: 30, tipText: "\u56FE\u7247/\u89C6\u9891", ...uploadProps })))); }; var FileFormItem$1 = FileFormItem; const NumberFormItem = ({ form, question, namePrefix, name, uploadProps, ...restProps }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(reactNativeXiaoshu.Space, { head: 16, gap: 8 }, React__default["default"].createElement(Title$1, { required: question.required, text: question.name }), !!question.remarks && React__default["default"].createElement(Tips$1, { text: question.remarks })), React__default["default"].createElement(reactNativeXiaoshu.Space, { head: true, tail: true, gap: 12 }, React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: [...name, 'checkResult', fieldKeyMap[question.type]], rules: maybeRules(question.required, [ () => ({ required: form.strictValidation, message: `请填写[${question.name}]`, }), ]) }, React__default["default"].createElement(reactNativeXiaoshu.NumberInput, { placeholder: "\u8BF7\u586B\u5199", textAlign: "left", limitDecimals: 2, style: { marginVertical: 12 }, bordered: true, ...restProps })), question.isRemark && (React__default["default"].createElement(FileRemarkFormItem$1, { form: form, question: question, namePrefix: namePrefix, name: name, uploadProps: uploadProps }))))); }; var NumberFormItem$1 = NumberFormItem; const Textarea = ({ ...restProps }) => { return (React__default["default"].createElement(reactNativeXiaoshu.TextInput, { type: "textarea", bordered: true, placeholder: "\u8BF7\u586B\u5199\u5907\u6CE8\u4FE1\u606F", ...restProps })); }; var Textarea$1 = Textarea; const RadioFormItem = ({ form, question, namePrefix, name, uploadProps, ...restProps }) => { const options = question.options?.map(option => { return { label: option?.name, value: option?.value, remarkRequired: option?.remarkRequired, isRemark: option?.isRemark, remarks: option?.remarks, }; }) || []; return (React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { shouldUpdate: true }, ({ getFieldValue }) => { const namePath = [...name, 'checkResult', fieldKeyMap[question.type]]; const selectedValue = getFieldValue([...namePrefix, ...namePath]); const selectedOption = options.find(item => item.value === selectedValue); return (React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 0, head: 8, tail: 12 }, React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: namePath, rules: maybeRules(question.required, [ () => ({ required: form.strictValidation, message: `请选择[${question.name}]`, }), ]) }, React__default["default"].createElement(reactNativeXiaoshu.Field.Selector, { options: options.map(option => ({ ...option, render() { return React__default["default"].createElement(Option$1, { option: option }); }, })), title: React__default["default"].createElement(Title$1, { required: question.required, text: question.name }), innerStyle: { marginHorizontal: 0, paddingHorizontal: 0, alignItems: 'center', }, divider: false, clearable: true, placeholder: "\u8BF7\u9009\u62E9", ...restProps })), React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 12 }, !!question.remarks && React__default["default"].createElement(Tips$1, { text: question.remarks }), selectedOption?.isRemark && (React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: [...name, 'remark'], rules: [ ...maybeRules(selectedOption.remarkRequired, [ () => ({ required: form.strictValidation, message: `请输入[${question.name}]备注`, }), ]), ] }, React__default["default"].createElement(Textarea$1, null))), question.isRemark && (React__default["default"].createElement(FileRemarkFormItem$1, { form: form, question: question, namePrefix: namePrefix, name: name, uploadProps: uploadProps }))))); })); }; var RadioFormItem$1 = RadioFormItem; const TextFormItem = ({ form, question, namePrefix, name, uploadProps, ...restProps }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(reactNativeXiaoshu.Space, { head: 16, gap: 8 }, React__default["default"].createElement(Title$1, { required: question.required, text: question.name }), !!question.remarks && React__default["default"].createElement(Tips$1, { text: question.remarks })), React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 12, head: true, tail: true }, React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: [...name, 'checkResult', fieldKeyMap[question.type]], rules: maybeRules(question.required, [ () => ({ required: form.strictValidation, message: `请填写[${question.name}]`, }), ]) }, React__default["default"].createElement(reactNativeXiaoshu.TextInput, { type: "textarea", placeholder: "\u8BF7\u586B\u5199", textAlign: "left", bordered: true, ...restProps })), question.isRemark && (React__default["default"].createElement(FileRemarkFormItem$1, { form: form, question: question, namePrefix: namePrefix, name: name, uploadProps: uploadProps }))))); }; var TextFormItem$1 = TextFormItem; const useSopForm = () => { const [_form] = reactNativeXiaoshu.Form.useForm(); // strictValidation为false时,部分校验规则会被关闭 const form = React.useMemo(() => { return { ..._form, strictValidation: true }; }, [_form]); return form; }; /** SOP业务表单组件 */ const SopForm = ({ uuid, backUpload = true, loading, form, title, data, wrapper, uploadProps = {}, }) => { React.useEffect(() => { form.setFieldsValue({ sopList: data2formValues(data), }); }, [data, form]); return (React__default["default"].createElement(reactNativeXiaoshu.Form, { form: form, initialValues: { sopList: data, } }, React__default["default"].createElement(reactNativeXiaoshu.Form.List, { name: "sopList" }, templateFields => { if (loading) { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(reactNativeXiaoshu.Card, { loading: true }), React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { name: ['__validator__'], rules: [ { required: true, message: '表单数据加载中...', }, ] }))); } return templateFields.map(templateField => { const templateData = form.getFieldValue([ 'sopList', templateField.name, ]); const templateContentJSX = (React__default["default"].createElement(reactNativeXiaoshu.Form.List, { name: [templateField.name, 'sopCheckItems'] }, questionFields => { return questionFields.map((questionField, index) => { const namePrefix = [ 'sopList', templateField.name, 'sopCheckItems', ]; const questionData = form.getFieldValue([ ...namePrefix, questionField.name, ]); const isNotLastAnswer = index !== questionFields.length - 1; const commonProps = { form, question: questionData, namePrefix: namePrefix, name: [questionField.name, 'sopResult'], uploadProps: { groupUuid: uuid, uuid: `${uuid}_${questionData.sopDetailId}`, backUpload, ...uploadProps, }, }; const control = (() => { switch (questionData.type) { case "CHECKBOX_TYPE" /* SopCheckItemEnum.CheckboxType */: return React__default["default"].createElement(CheckboxFormItem$1, { ...commonProps }); case "DATE_TYPE" /* SopCheckItemEnum.DateType */: return React__default["default"].createElement(DateFormItem$1, { ...commonProps }); case "FILE_TYPE" /* SopCheckItemEnum.FileType */: return React__default["default"].createElement(FileFormItem$1, { ...commonProps }); case "RADIO_TYPE" /* SopCheckItemEnum.RadioType */: return React__default["default"].createElement(RadioFormItem$1, { ...commonProps }); case "TEXT_TYPE" /* SopCheckItemEnum.TextType */: if (questionData.inputTextRule === "ONLY_NUMBER" /* InputTextRule.OnlyNumber */) { return React__default["default"].createElement(NumberFormItem$1, { ...commonProps }); } return React__default["default"].createElement(TextFormItem$1, { ...commonProps }); case "UNKNOWN" /* SopCheckItemEnum.Unknown */: case "UNRECOGNIZED" /* SopCheckItemEnum.Unrecognized */: case "UNSPECIFIED" /* SopCheckItemEnum.Unspecified */: break; default: { const exhaustiveCheck = questionData.type; // eslint-disable-next-line no-console console.warn(`SopForm: unknown type of ${exhaustiveCheck}`); } } return null; })(); return (React__default["default"].createElement(React.Fragment, { key: questionField.key }, control, isNotLastAnswer && React__default["default"].createElement(reactNativeXiaoshu.Divider, null))); }); })); if (wrapper) { return wrapper(templateData, templateContentJSX); } return (React__default["default"].createElement(reactNativeXiaoshu.Collapse, { key: templateData.sopId, bodyPadding: false, defaultCollapse: true, title: typeof title === 'function' ? title(templateData) : title, lazyRender: false, titleTextStyle: { fontWeight: 'bold', fontSize: 18 } }, React__default["default"].createElement(reactNative.View, { style: { paddingHorizontal: 12 } }, templateContentJSX))); }); }))); }; var SopForm$1 = SopForm; const ContentPreview = ({ name, namePrefix, question, field }) => { const namePath = [...namePrefix, ...name, 'checkResult', field]; const remarkPath = [...namePrefix, ...name, 'remark']; const mediaPath = [...namePrefix, ...name, 'fileLink']; return (React__default["default"].createElement(reactNativeXiaoshu.Form.Item, { shouldUpdate: true }, ({ getFieldValue }) => { let result = getFieldValue(namePath); const remark = getFieldValue(remarkPath); const media = getFieldValue(mediaPath); // 单选需要将选项的remarks连接 if (question.type === "RADIO_TYPE" /* SopCheckItemEnum.RadioType */) { const option = question.options.find(opt => opt.value === result); result = maybeTips(option?.name, option?.remarks); } if (question.type === "CHECKBOX_TYPE" /* SopCheckItemEnum.CheckboxType */) { result = result ?.map(val => { const option = question.options.find(opt => opt.value === val); return maybeTips(option.name, option.remarks); }) .join('、'); } const updateTime = question?.sopResult?.createTime; return (React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 4, head: true }, question.type !== "FILE_TYPE" /* SopCheckItemEnum.FileType */ && (React__default["default"].createElement(reactNative.View, { style: styles$1.wrap }, React__default["default"].createElement(reactNative.Text, { style: styles$1.text }, maybeTips(result || result === 0 ? result : '未填写', remark)))), question.type === "FILE_TYPE" /* SopCheckItemEnum.FileType */ && !!result && (React__default["default"].createElement(Upload__default$1["default"].Preview, { list: result })), !!media && React__default["default"].createElement(Upload__default$1["default"].Preview, { list: media }), !!updateTime && (React__default["default"].createElement(reactNative.Text, { style: { color: '#B9BEC5', fontSize: 14, lineHeight: 22 } }, `更新时间${timestamp2time(updateTime)}`)))); })); }; const styles$1 = EStyleSheet__default["default"].create({ wrap: { flexDirection: 'row', }, text: { color: '#11151A', fontSize: 15, lineHeight: 21, }, }); var ContentPreview$1 = ContentPreview; const TitlePreview = ({ text }) => { return (React__default["default"].createElement(reactNative.View, { style: styles.wrap }, React__default["default"].createElement(reactNative.Text, { style: styles.text }, text, "\uFF1A"))); }; const styles = EStyleSheet__default["default"].create({ wrap: { flexDirection: 'row', }, text: { color: '#5A6068', fontSize: 15, lineHeight: 21, }, }); var TitlePreview$1 = TitlePreview; const CheckboxPreview = ({ question, namePrefix, name }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(TitlePreview$1, { text: maybeTips(question.name, question.remarks) }), React__default["default"].createElement(ContentPreview$1, { question: question, namePrefix: namePrefix, name: name, field: fieldKeyMap[question.type] }))); }; var CheckboxPreview$1 = CheckboxPreview; const DatePreview = ({ question, namePrefix, name }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(TitlePreview$1, { text: maybeTips(question.name, question.remarks) }), React__default["default"].createElement(ContentPreview$1, { question: question, namePrefix: namePrefix, name: name, field: fieldKeyMap[question.type] }))); }; var DatePreview$1 = DatePreview; const FilePreview = ({ question, namePrefix, name }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(TitlePreview$1, { text: maybeTips(question.name, question.remarks) }), React__default["default"].createElement(ContentPreview$1, { question: question, namePrefix: namePrefix, name: name, field: fieldKeyMap[question.type] }))); }; var FileFormPreview = FilePreview; const NumberPreview = ({ question, namePrefix, name }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(TitlePreview$1, { text: maybeTips(question.name, question.remarks) }), React__default["default"].createElement(ContentPreview$1, { question: question, namePrefix: namePrefix, name: name, field: fieldKeyMap[question.type] }))); }; var NumberPreview$1 = NumberPreview; const RadioPreview = ({ question, namePrefix, name }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(TitlePreview$1, { text: maybeTips(question.name, question.remarks) }), React__default["default"].createElement(ContentPreview$1, { question: question, namePrefix: namePrefix, name: name, field: fieldKeyMap[question.type] }))); }; var RadioPreview$1 = RadioPreview; const TextPreview = ({ question, namePrefix, name }) => { return (React__default["default"].createElement(React__default["default"].Fragment, null, React__default["default"].createElement(TitlePreview$1, { text: maybeTips(question.name, question.remarks) }), React__default["default"].createElement(ContentPreview$1, { question: question, namePrefix: namePrefix, name: name, field: fieldKeyMap[question.type] }))); }; var TextPreview$1 = TextPreview; /** SOP业务预览组件 */ const SopPreview = ({ loading, title, data, wrapper }) => { const [form] = reactNativeXiaoshu.Form.useForm(); React.useEffect(() => { form.setFieldValue('sopList', data2formValues(data, false)); }, [data, form]); return (React__default["default"].createElement(reactNativeXiaoshu.Form, { form: form, initialValues: { sopList: data, } }, React__default["default"].createElement(reactNativeXiaoshu.Form.List, { name: "sopList" }, templateFields => { if (loading) { return React__default["default"].createElement(reactNativeXiaoshu.Card, { loading: true }); } return templateFields.map(templateField => { const templateData = form.getFieldValue([ 'sopList', templateField.name, ]); const templateContentJSX = (React__default["default"].createElement(reactNativeXiaoshu.Form.List, { name: [templateField.name, 'sopCheckItems'] }, questionFields => { return (React__default["default"].createElement(reactNativeXiaoshu.Space, { gap: 24 }, questionFields.map(questionField => { const namePrefix = [ 'sopList', templateField.name, 'sopCheckItems', ]; const questionData = form.getFieldValue([ ...namePrefix, questionField.name, ]); const commonProps = { question: questionData, namePrefix: namePrefix, name: [questionField.name, 'sopResult'], }; const control = (() => { switch (questionData.type) { case "CHECKBOX_TYPE" /* SopCheckItemEnum.CheckboxType */: return React__default["default"].createElement(CheckboxPreview$1, { ...commonProps }); case "DATE_TYPE" /* SopCheckItemEnum.DateType */: return React__default["default"].createElement(DatePreview$1, { ...commonProps }); case "FILE_TYPE" /* SopCheckItemEnum.FileType */: return React__default["default"].createElement(FileFormPreview, { ...commonProps }); case "RADIO_TYPE" /* SopCheckItemEnum.RadioType */: return React__default["default"].createElement(RadioPreview$1, { ...commonProps }); case "TEXT_TYPE" /* SopCheckItemEnum.TextType */: if (questionData.inputTextRule === "ONLY_NUMBER" /* InputTextRule.OnlyNumber */) { return React__default["default"].createElement(NumberPreview$1, { ...commonProps }); } return React__default["default"].createElement(TextPreview$1, { ...commonProps }); case "UNKNOWN" /* SopCheckItemEnum.Unknown */: case "UNRECOGNIZED" /* SopCheckItemEnum.Unrecognized */: case "UNSPECIFIED" /* SopCheckItemEnum.Unspecified */: break; default: { const exhaustiveCheck = questionData.type; // eslint-disable-next-line no-console console.warn(`SopForm: unknown type of ${exhaustiveCheck}`); } } return null; })(); return control; }))); })); if (wrapper) { return wrapper(templateData, templateContentJSX); } return (React__default["default"].createElement(reactNativeXiaoshu.Collapse, { key: templateData.sopId, bodyPadding: false, title: typeof title === 'function' ? title(templateData) : title, defaultCollapse: true, titleTextStyle: { fontWeight: 'bold', fontSize: 18 } }, React__default["default"].createElement(reactNative.View, { style: { paddingHorizontal: 12, paddingVertical: 16 } }, templateContentJSX))); }); }))); }; var SopPreview$1 = SopPreview; exports.SopForm = SopForm$1; exports.SopPreview = SopPreview$1; exports.fieldDefaultValueMap = fieldDefaultValueMap; exports.fieldKeyMap = fieldKeyMap; exports.useSopForm = useSopForm;