1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993 |
- <template>
- <div>
- <Toptitle
- :title="type == 1 ? '新增订单' : type == 2 ? '编辑订单' : '订单详情'"
- >
- <Button @click="back" type="primary" ghost style="margin-right: 10px"
- >返回</Button
- >
- <Button
- @click="showForms = true"
- type="primary"
- v-show="type != 3"
- style="margin-right: 10px"
- >表单设置</Button
- >
- <Button
- type="primary"
- v-show="type != 3"
- @click="handleSubmit('infoOrder')"
- >保存</Button
- >
- </Toptitle>
- <div class="page-edit">
- <!-- 表单项 -->
- <Form
- ref="infoOrder"
- inline
- :label-width="100"
- :model="info"
- style="padding: 10px 0"
- :rules="infoRules"
- >
- <FormItem
- v-if="formSetTableData.filter((v) => v.key == 'order_no')[0].is_show"
- label="订单编号:"
- >
- <Input
- disabled
- v-if="type != 3"
- v-model="info.order_no"
- class="auto-width"
- placeholder="自动生成"
- />
- <span v-else>{{ info.order_no }}</span>
- </FormItem>
- <FormItem
- v-if="
- formSetTableData.filter((v) => v.key == 'residential_name')[0]
- .is_show
- "
- label="项目名称:"
- prop="residential_name"
- >
- <Input
- v-model="info.residential_name"
- v-if="type != 3"
- class="auto-width"
- placeholder="请输入项目名称"
- />
- <span v-else>{{ info.residential_name }}</span>
- </FormItem>
- <FormItem
- v-if="
- formSetTableData.filter((v) => v.key == 'warning_state')[0].is_show
- "
- label="紧急程度:"
- prop="warning_state"
- >
- <Select
- clearable
- class="auto-width"
- v-if="type != 3"
- v-model="info.warning_state"
- >
- <Option
- :label="_item.title"
- v-for="_item in warningList"
- :key="_item.id"
- :value="_item.id"
- ></Option>
- </Select>
- <span v-else>{{
- warningList.length > 0 && info.warning_state
- ? warningList.filter((item) => item.id == info.warning_state)[0]
- .title
- : ""
- }}</span>
- </FormItem>
- <FormItem
- label="项目定金:"
- v-if="
- formSetTableData.filter((v) => v.key == 'front_money')[0].is_show
- "
- >
- <Input
- v-model="info.front_money"
- class="auto-width"
- v-if="type != 3"
- placeholder="请输入项目定金"
- />
- <span v-else>{{ info.front_money }}</span>
- </FormItem>
- <FormItem
- v-if="
- formSetTableData.filter((v) => v.key == 'start_time')[0].is_show
- "
- label="开始日期:"
- >
- <DatePicker
- :options="options"
- v-if="type != 3"
- v-model="info.start_time"
- type="date"
- placeholder="开始日期"
- class="auto-width"
- ></DatePicker>
- <span v-else>{{ info.start_time }}</span>
- </FormItem>
- <FormItem
- label="客户名称:"
- v-if="
- formSetTableData.filter((v) => v.key == 'client_name')[0].is_show
- "
- prop="custom_id"
- >
- <Select
- clearable
- filterable
- v-if="type != 3"
- class="auto-width"
- @on-change="handleClientChange"
- v-model="info.custom_id"
- >
- <Option
- v-for="item in clientList"
- :label="item.title"
- :key="item.id"
- :value="item.id"
- ></Option>
- </Select>
- <span v-else>{{
- clientList.length > 0 && info.custom_id
- ? clientList.filter((item) => item.id == info.custom_id)[0].title
- : ""
- }}</span>
- </FormItem>
- <FormItem
- label="负责人:"
- v-if="
- formSetTableData.filter((v) => v.key == 'custom_detail_name')[0]
- .is_show
- "
- >
- <Select
- placeholder="请选择负责人"
- v-if="type != 3"
- v-model="info.custom_detail_name"
- @on-change="handleClientChargeChange"
- class="auto-width"
- >
- <!-- @on-change="handleClientDetailChange" -->
- <Option
- v-for="item of clientDetailList_respon"
- :key="item.service_name"
- :label="item.service_name"
- :value="item.service_name"
- ></Option>
- </Select>
- <span v-else>{{ info.custom_detail_name }}</span>
- </FormItem>
- <FormItem
- label="手机号:"
- v-if="
- formSetTableData.filter((v) => v.key == 'custom_detail_mobile')[0]
- .is_show
- "
- >
- <Select
- clearable
- filterable
- v-if="type != 3"
- class="auto-width"
- v-model="info.custom_detail_mobile"
- >
- <Option
- v-for="item in clientDetailList_mobile"
- :label="item.mobile"
- :key="item.id"
- :value="item.mobile"
- ></Option>
- </Select>
- <span v-else>{{ info.custom_detail_mobile }}</span>
- </FormItem>
- <FormItem
- label="详细地址:"
- v-if="
- formSetTableData.filter((v) => v.key == 'custom_detail_id')[0]
- .is_show
- "
- >
- <Select
- clearable
- filterable
- v-if="type != 3"
- class="auto-width"
- @on-change="handleClientDetailChange"
- v-model="info.custom_detail_id"
- >
- <Option
- v-for="item in clientDetailList_address"
- :label="item.address"
- :key="item.id"
- :value="item.id"
- ></Option>
- </Select>
- <span v-else>{{ info.custom_detail_id }}</span>
- </FormItem>
- <FormItem
- label="专营业务员:"
- v-if="
- formSetTableData.filter((v) => v.key == 'service_id')[0].is_show
- "
- >
- <Select
- disabled
- v-if="type != 3"
- placeholder="自动带出"
- v-model="info.service_id"
- class="auto-width"
- >
- <Option
- v-for="item of users"
- :key="item.id"
- :label="item.nickname"
- :value="item.id"
- ></Option>
- </Select>
- <span v-else>{{
- users.length > 0 && info.service_id
- ? users.filter((item) => item.id == info.service_id)[0].nickname
- : ""
- }}</span>
- </FormItem>
- <FormItem
- v-if="formSetTableData.filter((v) => v.key == 'end_time')[0].is_show"
- label="交付日期:"
- >
- <DatePicker
- :options="options"
- v-if="type != 3"
- v-model="info.end_time"
- type="date"
- placeholder="交付日期"
- class="auto-width"
- ></DatePicker>
- <span v-else>{{ info.end_time }}</span>
- </FormItem>
- <FormItem
- v-if="
- formSetTableData.filter((v) => v.key == 'predict_price')[0].is_show
- "
- label="产品总价:"
- >
- <Input
- v-model="info.predict_price"
- v-if="type != 3"
- readonly
- class="auto-width"
- placeholder="自动生成"
- />
- <span v-else>{{ info.predict_price }}</span>
- </FormItem>
- <FormItem
- label="折扣金额:"
- v-if="formSetTableData.filter((v) => v.key == 'fax_price')[0].is_show"
- >
- <Input
- v-model="info.fax_price"
- v-if="type != 3"
- readonly
- class="auto-width"
- placeholder="自动生成"
- />
- <span v-else>{{ info.fax_price }}</span>
- </FormItem>
- <FormItem
- label="订单金额:"
- v-if="
- formSetTableData.filter((v) => v.key == 'order_price')[0].is_show
- "
- >
- <Input
- v-model="info.order_price"
- v-if="type != 3"
- readonly
- class="auto-width"
- placeholder="自动生成"
- />
- <span v-else>{{ info.order_price }}</span>
- </FormItem>
- <FormItem
- label="包装:"
- prop="box_id"
- v-if="formSetTableData.filter((v) => v.key == 'box_id')[0].is_show"
- >
- <Select
- clearable
- filterable
- v-if="type != 3"
- v-model="info.box_id"
- class="auto-width"
- >
- <Option
- v-for="item of sub_material_list"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- <span v-else>{{
- sub_material_list.length > 0 && info.box_id
- ? sub_material_list.filter((item) => item.id == info.box_id)[0]
- .title
- : ""
- }}</span>
- </FormItem>
- <FormItem
- label="订单备注:"
- v-if="formSetTableData.filter((v) => v.key == 'remark')[0].is_show"
- >
- <Input
- v-model="info.remark"
- type="textarea"
- v-if="type != 3"
- class="auto-width"
- placeholder="请输入订单备注"
- />
- <span v-else>{{ info.remark }}</span>
- </FormItem>
- <FormItem label="上传附件:">
- <div class="product-img">
- <div class="product-add">
- <div class="items" v-for="(item, index) of info.img" :key="index">
- <img
- @click="looks(item)"
- :src="$store.state.ip + item"
- alt=""
- />
- <Icon
- v-if="type != 3"
- size="20"
- @click="delItems(index, info.img)"
- class="delete-img"
- type="ios-close-circle"
- />
- </div>
- <div class="add-items" v-if="type != 3">
- <div class="item">
- <Icon size="50" type="ios-add" />
- </div>
- <span>支持jpg/png格式</span>
- <input
- @change="changeIpt($event, info.img)"
- type="file"
- class="ipt"
- />
- </div>
- </div>
- </div>
- <!-- <Button type="primary"
- style="margin-right:10px;"
- ghost>上传附件</Button> -->
- <!-- <Upload style="display: inline"
- name="your_file"
- :show-upload-list="false"
- :headers="headers"
- multiple
- :data="uploadData"
- :on-error="uploadError"
- :on-progress="onProgress"
- :on-success="uploadSuccess"
- :action="$store.state.ip + '/api/deep_img_import'">
- <Button type="primary"
- style="margin-right: 10px">上传附件</Button>
- </Upload> -->
- </FormItem>
- <div label="线条:" style="margin-left:20px;width:95%">
- <div style="font-size:20px">
- <span>线条:</span>
- <span v-if="wood_title_count.length < 1">无</span>
- <span
- v-else
- v-for="(item, index) in wood_title_count"
- :key="item.title + index"
- >{{ item.title }}:
- <span v-for="(_item, _index) in item.measure_str" :key="_item.id"
- >{{ _item.measure }}={{ _item.num }}{{ item.unit }}
- <span v-show="_index < item.measure_str.length - 1">;</span>
- </span>
- <span v-show="index < wood_title_count.length - 1">;</span>
- </span>
- </div>
- </div>
- <div label="合计:" style="margin-left:20px;width:95%">
- <div style="font-size:20px">
- <span>合计:</span>
- <span v-if="parts_title_count.length < 1">无</span>
- <span
- v-else
- v-for="(item, index) in parts_title_count"
- :key="item.title + index"
- v-show="item.title.indexOf('线条') == -1"
- >{{ item.title }}:{{ item.num }}{{ item.unit }}
- <span v-show="index < parts_title_count.length - 1">;</span>
- </span>
- </div>
- </div>
- </Form>
- <!-- 户型选择 -->
- <div class="content">
- <vxe-toolbar>
- <template #buttons>
- <div class="content_header">
- <h2>产品信息</h2>
- <div>
- <Button
- type="primary"
- style="margin-right: 10px"
- v-show="!tree_btn_show"
- @click="
- $refs.xTree.setAllTreeExpand(true);
- tree_btn_show = !tree_btn_show;
- "
- >全部展开</Button
- >
- <Button
- type="primary"
- style="margin-right: 10px"
- v-show="tree_btn_show"
- @click="
- $refs.xTree.clearTreeExpand();
- tree_btn_show = !tree_btn_show;
- "
- >全部收缩</Button
- >
- <Button
- type="primary"
- style="margin-right: 10px"
- v-show="type == 3"
- @click="handleShowMaterial"
- >{{ is_material_show ? "收起" : "查看" }}原材料</Button
- >
- <Button
- type="primary"
- style="margin-right: 10px"
- v-show="type != 3"
- @click="handleSet({}, null, 1)"
- >新增产品</Button
- >
- </div>
- </div>
- </template>
- </vxe-toolbar>
- <vxe-table
- resizable
- border
- ref="xTree"
- :tree-config="{ children: 'part' }"
- :data="tableData"
- >
- <vxe-table-column
- field="title"
- title="产品名称"
- align="center"
- min-width="120"
- tree-node
- ></vxe-table-column>
- <vxe-table-column
- field="position"
- title="位置"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="unit"
- title="计量单位"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="process_str"
- title="工艺属性"
- align="center"
- min-width="200"
- ></vxe-table-column>
- <vxe-table-column
- field="measurement"
- title="尺寸"
- align="center"
- min-width="180"
- ></vxe-table-column>
- <vxe-table-column
- field="total_num"
- title="数量"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="num"
- title="核算数量"
- align="center"
- min-width="80"
- >
- <template #default="{ row }">
- {{ row.is_metal ? "" : row.num }}
- </template>
- </vxe-table-column>
- <vxe-table-column
- field="unit_price"
- title="单价"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="ext_price"
- title="附加金额"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="over_price"
- title="超标金额"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="price"
- title="金额"
- align="center"
- min-width="80"
- >
- <template #default="{ row }">
- {{ row.is_metal ? "" : row.price }}
- </template>
- </vxe-table-column>
- <vxe-table-column
- field="url_number"
- title="图号"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="remark"
- title="备注"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="extra"
- title="附加项"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field="date"
- title="其他项"
- align="center"
- min-width="80"
- ></vxe-table-column>
- <vxe-table-column
- field=""
- title="操作"
- align="center"
- min-width="180"
- >
- <template #default="{ row, rowIndex }">
- <a
- @click="handleSet(row, rowIndex, 5)"
- v-show="type == 3 && rowIndex >= 0"
- style="margin: 0 5px"
- >详情</a
- >
- <a
- @click="handleSet(row, rowIndex, 4)"
- v-if="type != 3"
- v-show="rowIndex >= 0"
- style="margin: 0 5px"
- >复制</a
- >
- <a
- @click="handleSet(row, rowIndex, 2)"
- v-if="type != 3"
- v-show="rowIndex >= 0"
- style="margin: 0 5px"
- >编辑</a
- >
- <a
- @click="handleSet(row, rowIndex, 3)"
- v-if="type != 3"
- v-show="rowIndex >= 0"
- style="margin: 0 5px"
- >删除</a
- >
- </template>
- </vxe-table-column>
- </vxe-table>
- <!-- 原材料 -->
- <!-- v-show="type==3" -->
- <div class="original-part" v-show="type == 3 && is_material_show">
- <Table
- border
- show-summary
- :summary-method="handleSummary"
- :span-method="handleSpan"
- :columns="originalTableColumns"
- :data="originalData"
- ></Table>
- </div>
- </div>
- </div>
- <!-- 选择产品弹层--新增框 -->
- <Modal
- :width="1400"
- class-name="vertical-center-modal"
- title="新增产品"
- :mask-closable="false"
- v-model="showAddProduct"
- @on-visible-change="modalVisibleChange"
- >
- <div style="max-height: 800px; overflow: hidden; overflow-y: auto">
- <Tabs v-model="currentTabIndex" ref="tabsRef">
- <Button
- @click="handleProductCopy"
- size="small"
- type="primary"
- style="margin-right: 5px"
- slot="extra"
- >复制产品</Button
- >
- <Button
- @click="handleTabsAdd"
- size="small"
- type="warning"
- style="margin-right: 5px"
- slot="extra"
- >添加</Button
- >
- <Button
- @click="handleProductDele"
- size="small"
- type="primary"
- slot="extra"
- >删除</Button
- >
- <TabPane
- :label="
- (item.position ? item.position : '位置') + '-' + item.type_name
- "
- v-for="(item, index) in modalArray"
- :key="item.id"
- :name="item.index + ''"
- >
- <div class="modal_product_info">
- <div class="modal_product_info_title">产品信息</div>
- <div class="modal_product_info_content modal_product">
- <Form :model="item" :label-width="100">
- <FormItem label="选择产品:">
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- <span
- v-for="_item in productList"
- :key="_item.id"
- v-show="_item.id == item.product_id"
- >{{ _item.title }}</span
- >
- </span>
- <Select
- filterable
- clearable
- transfer
- label-in-value
- size="small"
- v-model="item.product_id"
- @on-change="changeAddProduct($event, index)"
- style="width: 120px"
- >
- <Option
- v-for="item of productList"
- :tag="item.img_url"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- </Tooltip>
- </FormItem>
- <FormItem label="位置:">
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- {{ item.position }}
- </span>
- <Input
- size="small"
- v-model="item.position"
- style="width: 120px"
- placeholder="请输入位置"
- />
- </Tooltip>
- </FormItem>
- <FormItem label="计量单位:">
- <Input
- size="small"
- disabled
- style="width: 120px"
- v-model="item.unit"
- placeholder="自动带出"
- />
- </FormItem>
- <!-- 工艺属性 -->
- <FormItem
- v-for="(ele, idx) in item.process"
- :key="ele.key + '' + item.id"
- :label="ele.title + ':'"
- >
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- <span
- v-for="_item in ele.processList"
- :key="_item.id"
- v-show="_item.id == ele.value"
- >{{ _item.title }}</span
- >
- </span>
- <Select
- style="width: 120px"
- filterable
- clearable
- filter-by-label
- transfer
- label-in-value
- @on-open-change="
- (e) => handleGetProductMeasure(e, idx, item, ele)
- "
- @on-change="
- (e) => handleProductProcessChange(e, idx, item, ele)
- "
- v-model="ele.value"
- size="small"
- >
- <Option
- v-for="option of ele.processList"
- :key="option.id"
- :disabled="option.isDisabled"
- :label="option.title"
- :value="option.id"
- ></Option>
- </Select>
- </Tooltip>
- </FormItem>
- <!-- 测量字段 -->
- <FormItem
- v-for="ele in item.measure"
- :key="ele.id"
- :label="ele.title + ':'"
- >
- <Input
- size="small"
- type="text"
- clearable
- :placeholder="ele.e_title"
- v-model="ele.value"
- @on-change="
- (e) => handleProductMeasureChange(e, item, ele)
- "
- @on-blur="(e) => handleProductMeasureBlur(e, item, ele)"
- style="width: 120px"
- />
- </FormItem>
- <FormItem label="数量:">
- <Input
- size="small"
- @on-change="(e) => handleProductNumChange(e, item)"
- v-model="item.total_num"
- style="width: 120px"
- placeholder="请输入产品数量"
- />
- </FormItem>
- <FormItem label="核算数量:">
- <Input
- size="small"
- v-model="item.num"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="单价:">
- <Input
- size="small"
- v-model="item.unit_price"
- @on-change="(e) => handleProductUnit_priceChange(e, item)"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="附加金额:">
- <Input
- size="small"
- v-model="item.ext_price"
- @on-change="(e) => handleProductExt_priceChange(e, item)"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="超标金额:">
- <Input
- size="small"
- @on-change="(e) => handleProductOver_priceChange(e, item)"
- v-model="item.over_price"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="金额:">
- <Input
- size="small"
- v-model="item.price"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="图号:">
- <Input
- size="small"
- v-model="item.url_number"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem
- v-for="(_customize, customize_key) in item.customize"
- :label="_customize.style + ':'"
- :key="customize_key + 99"
- >
- <Input
- v-show="_customize.type == 1"
- size="small"
- type="text"
- v-model="_customize.value"
- style="width: 120px"
- placeholder="请输入"
- />
- <Select
- v-show="_customize.type == 2"
- style="width: 120px"
- filterable
- clearable
- v-model="_customize.value"
- size="small"
- >
- <Option
- v-for="option of _customize.explain"
- :key="option.value"
- :label="option.value"
- :value="option.value"
- ></Option>
- </Select>
- </FormItem>
- <FormItem
- v-for="(outh, outh_key) in item.outh"
- :label="outh.title"
- :key="outh_key + 21"
- >
- <img
- v-if="outh.key == 'img' || outh.key == 'url'"
- @click="showPreview(item, outh.key)"
- style="
- max-width: 30px;
- max-height: 30px;
- top: 5px;
- position: relative;
- cursor: pointer;
- "
- :src="$store.state.ip + outh.value"
- />
- <Input
- v-if="
- outh.key != 'img' &&
- outh.key != 'url' &&
- outh.key != 'lock'
- "
- disabled
- placeholder="自动生成"
- style="width: 120px"
- size="small"
- v-model="outh.value"
- />
- <Select
- label-in-value
- @on-change="changeLock($event, item, index)"
- size="small"
- clearable
- style="width: 120px"
- v-if="outh.key == 'lock'"
- v-model="item[outh.key]"
- >
- <Option
- v-for="luck of lock_list"
- :key="luck.id"
- :tag="luck.price"
- :value="luck.id"
- :label="luck.title"
- ></Option>
- <Option :value="0" label="无"></Option>
- </Select>
- </FormItem>
- <FormItem label="备注:">
- <Input
- size="small"
- type="textarea"
- v-model="item.remark"
- style="width: 120px"
- placeholder="请输入备注"
- />
- </FormItem>
- <FormItem label="产品图:">
- <!-- v-show="modalData.url && modalData.url.length > 0" -->
- <div class="product-img">
- <div class="product-add">
- <div
- class="items"
- v-for="(item, index) of item.url"
- :key="index"
- >
- <img
- @click="looks(item)"
- :src="$store.state.ip + item"
- alt=""
- />
- </div>
- </div>
- </div>
- </FormItem>
- </Form>
- </div>
- </div>
- <div class="modal_product_info">
- <div class="modal_product_info_title">部件信息</div>
- <div class="modal_product_info_content modal_parts">
- <Form
- :model="element"
- v-for="(element, idx) in item.part"
- :key="element.id + '111' + idx"
- :label-width="50"
- >
- <FormItem :label-width="element.isBP ? 1 : 50">
- <Radio
- v-show="element.isBP"
- @click.native.prevent="handleRadioClick(element)"
- v-model="element.isChoosed"
- ></Radio>
- <span v-show="element.isBP">{{ element.part_title }} </span>
- </FormItem>
- <FormItem label="部件:">
- <Select
- filterable
- clearable
- transfer
- label-in-value
- size="small"
- @on-change="
- handlePartChange(element, item.measure, item.total_num)
- "
- v-model="element.change_id"
- style="width: 180px"
- >
- <Option
- v-for="item of element.change"
- :key="item.id"
- :label="item.part_title"
- :value="item.id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="高:">
- <Input
- size="small"
- clearable
- v-model="element.long"
- style="width: 50px"
- placeholder="请输入厚"
- />
- </FormItem>
- <FormItem label="宽:">
- <Input
- size="small"
- clearable
- v-model="element.wide"
- style="width: 50px"
- placeholder="请输入宽"
- />
- </FormItem>
- <FormItem label="厚:">
- <Input
- size="small"
- clearable
- v-model="element.high"
- style="width: 50px"
- placeholder="请输入高"
- />
- </FormItem>
- <FormItem
- v-for="(process_detail, idx) in element.process"
- :key="process_detail.name + '222' + element.part_id"
- :label="process_detail.name + ':'"
- >
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- <span
- v-for="_item in process_detail.cld"
- :key="_item.id"
- v-show="_item.id == process_detail.procedure_property"
- >{{ _item.title }}</span
- >
- </span>
- <Select
- style="width: 120px"
- filterable
- clearable
- label-in-value
- @on-change="
- (e) => handlePartProcessChange(e, idx, element)
- "
- v-model="process_detail.procedure_property"
- size="small"
- >
- <Option
- v-for="option of process_detail.cld"
- :key="option.id"
- :label="option.title"
- :value="option.id"
- ></Option>
- </Select>
- </Tooltip>
- </FormItem>
- <FormItem>
- <Button
- @click="handlePartsApart(element, idx, item.part)"
- type="primary"
- v-if="element.isBP"
- style="margin-right: 5px"
- size="small"
- >拆分</Button
- >
- <Button
- @click="handlePartsDele(element, idx, item.part)"
- type="primary"
- v-else
- style="margin-right: 5px"
- size="small"
- >删除</Button
- >
- <Button
- @click="handlePartDetailEdit(element, idx)"
- type="primary"
- style="margin-right: 5px"
- size="small"
- >{{
- element.isShowPartDetail ? "收起" : "修改原材料"
- }}</Button
- >
- </FormItem>
- <div
- :class="[
- 'part_detail_form',
- element.isShowPartDetail ? '' : 'hide_part_detail',
- ]"
- :data-index="idx"
- >
- <FormItem>
- <div v-for="ele in element.part_detail" :key="ele.id">
- <Form :model="ele">
- <FormItem>
- <div style="width: 200px">
- <!-- <Tooltip
- :content="
- ele.title || ele.part_detail_title || '请选择'
- "
- > -->
- {{ ele.title || ele.part_detail_title }}
- <!-- </Tooltip> -->
- </div>
- </FormItem>
- <!-- <FormItem label="厚" :label-width="40">
- <Input
- size="small"
- v-model="ele.long"
- style="width: 80px"
- placeholder="请输入厚"
- />
- </FormItem> -->
- <!-- <FormItem label="宽" :label-width="40">
- <Input
- size="small"
- v-model="ele.wide"
- style="width: 80px"
- placeholder="请输入宽"
- />
- </FormItem> -->
- <!-- <FormItem label="高" :label-width="40">
- <Input
- size="small"
- v-model="ele.high"
- style="width: 80px"
- placeholder="请输入高"
- />
- </FormItem> -->
- <!-- <FormItem label="数量" :label-width="40">
- <Input
- size="small"
- v-model="ele.num"
- @on-change="(e) => handleSubpartNumChange(e, ele)"
- style="width: 80px"
- placeholder="请输入数量"
- />
- </FormItem> -->
- <!-- 原材料 -->
- <Form>
- <FormItem>
- <div style="width: 200px">
- <!-- <Tooltip
- :content="
- ele.material_detail_title || '请选择'
- "
- > -->
- {{ ele.material_detail_title || "请选择" }}
- <!-- </Tooltip> -->
- </div>
- </FormItem>
- <FormItem label="高" :label-width="40">
- <Select
- style="width: 80px"
- filterable
- clearable
- v-model="ele.material_detail_id"
- @on-change="(e) => handleMaterialChange(e, ele)"
- placeholder="请选择高"
- size="small"
- >
- <Option
- v-for="option of ele.material_detail_list"
- :key="option.material_detail_id"
- :label="option.long"
- :value="option.material_detail_id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="宽" :label-width="40">
- <Select
- style="width: 80px"
- filterable
- clearable
- v-model="ele.material_detail_id"
- placeholder="请选择宽"
- size="small"
- >
- <Option
- v-for="option of ele.material_detail_list"
- :key="option.material_detail_id"
- :label="option.wide"
- :value="option.material_detail_id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="厚" :label-width="40">
- <Select
- style="width: 80px"
- filterable
- clearable
- v-model="ele.material_detail_id"
- placeholder="请选择厚"
- size="small"
- >
- <Option
- v-for="option of ele.material_detail_list"
- :key="option.material_detail_id"
- :label="option.high"
- :value="option.material_detail_id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="数量" :label-width="40">
- <Input
- size="small"
- v-model="ele.material_detail_num"
- style="width: 80px"
- placeholder="请输入数量"
- />
- </FormItem>
- </Form>
- </Form>
- </div>
- </FormItem>
- </div>
- </Form>
- </div>
- </div>
- <div class="modal_product_info">
- <div class="modal_product_info_title">
- 附加信息
- <Button
- @click="handleExtraAdd(item.metalArray, 1)"
- type="primary"
- style="margin-right: 5px"
- size="small"
- >新增五金</Button
- >
- <Button
- @click="handleExtraAdd(item.extArray, 2)"
- type="primary"
- size="small"
- >新增附加项目</Button
- >
- </div>
- <div class="modal_product_info_content modal_extra">
- <Form
- :model="element"
- v-for="(element, idx) in item.metalArray"
- :key="element.id"
- :label-width="80"
- >
- <FormItem label="五金:">
- <Select
- filterable
- clearable
- transfer
- label-in-value
- size="small"
- @on-change="
- (e) =>
- handleMetalChange(e, element, idx, item.metalArray)
- "
- v-model="element.material_id"
- style="width: 100px"
- >
- <Option
- v-for="item of metalList"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="数量:">
- <Input
- size="small"
- v-model="element.num"
- @on-change="handleTotalPriceCalc(element, item)"
- style="width: 100px"
- placeholder="请输入数量"
- />
- </FormItem>
- <FormItem label="单价:">
- <Input
- size="small"
- v-model="element.price"
- @on-change="handleTotalPriceCalc(element, item)"
- style="width: 100px"
- placeholder="请输入单价"
- />
- </FormItem>
- <FormItem label="金额:">
- <Input
- size="small"
- v-model="element.total_price"
- style="width: 100px"
- placeholder="请输入金额"
- />
- </FormItem>
- <FormItem label="备注:">
- <Input
- size="small"
- v-model="element.remark"
- style="width: 100px"
- placeholder="请输入备注"
- />
- </FormItem>
- <FormItem>
- <a
- style="color: red"
- @click="handleExtraDele(item.metalArray, element, idx)"
- >删除</a
- >
- </FormItem>
- </Form>
- <Form
- :model="element"
- v-for="(element, idx) in item.extArray"
- :key="element.id"
- :label-width="80"
- >
- <FormItem label="附加项目:">
- <Select
- filterable
- clearable
- transfer
- label-in-value
- size="small"
- v-model="element.id"
- @on-change="(e) => handleExtChange(element, e, item)"
- style="width: 100px"
- >
- <Option
- v-for="item of extList"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="数量:">
- <Input
- size="small"
- v-model="element.num"
- @on-change="handleTotalPriceCalc(element, item)"
- style="width: 100px"
- placeholder="请输入数量"
- />
- </FormItem>
- <FormItem label="单价:">
- <Input
- size="small"
- v-model="element.price"
- @on-change="handleTotalPriceCalc(element, item)"
- style="width: 100px"
- placeholder="请输入单价"
- />
- </FormItem>
- <FormItem label="金额:">
- <Input
- size="small"
- v-model="element.total_price"
- style="width: 100px"
- placeholder="请输入金额"
- />
- </FormItem>
- <FormItem label="备注:">
- <Input
- size="small"
- v-model="element.remark"
- style="width: 100px"
- placeholder="请输入备注"
- />
- </FormItem>
- <FormItem>
- <a
- style="color: red"
- @click="handleExtraDele(item.extArray, element, idx)"
- >删除</a
- >
- </FormItem>
- </Form>
- </div>
- </div>
- </TabPane>
- </Tabs>
- </div>
- <div slot="footer">
- <Button @click="cancelModal">取消</Button>
- <Button @click="handleAddProductSubmit" type="primary">确定</Button>
- </div>
- </Modal>
- <!-- 选择产品弹层--编辑框 -->
- <Modal
- :width="1400"
- class-name="vertical-center-modal"
- :title="title_state == 2 ? '编辑产品' : '查看产品'"
- :mask-closable="false"
- v-model="showEditProduct"
- @on-visible-change="modalVisibleChange"
- >
- <div style="max-height: 800px; overflow: hidden; overflow-y: auto">
- <Tabs value="name">
- <TabPane
- :label="
- (modalData.position ? modalData.position : '位置') +
- '-' +
- modalData.type_name
- "
- name="name"
- >
- <div class="modal_product_info">
- <div class="modal_product_info_title">产品信息</div>
- <div class="modal_product_info_content modal_product">
- <Form :model="modalData" :label-width="100">
- <FormItem label="选择产品:">
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- <span
- v-for="_item in productList"
- :key="_item.id"
- v-show="_item.id == modalData.product_id"
- >{{ _item.title }}</span
- >
- </span>
- <Select
- filterable
- clearable
- transfer
- label-in-value
- :disabled="isCheck"
- size="small"
- v-model="modalData.product_id"
- @on-change="changeEditProduct($event)"
- style="width: 120px"
- >
- <Option
- v-for="item of productList"
- :tag="item.img_url"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- </Tooltip>
- </FormItem>
- <FormItem label="位置:">
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- {{ modalData.position }}
- </span>
- <Input
- size="small"
- v-model="modalData.position"
- :disabled="isCheck"
- @on-change="
- (e) => handleProductPositionChange(modalData, e)
- "
- style="width: 120px"
- placeholder="请输入位置"
- />
- </Tooltip>
- </FormItem>
- <FormItem label="计量单位:">
- <Input
- size="small"
- disabled
- style="width: 120px"
- v-model="modalData.unit"
- placeholder="自动带出"
- />
- </FormItem>
- <!-- 工艺属性 -->
- <FormItem
- v-for="(ele, idx) in modalData.process"
- :key="idx + '333' + modalData.id"
- :label="ele.title + ':'"
- >
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- <span
- v-for="_item in ele.processList"
- :key="_item.id"
- v-show="_item.id == ele.value"
- >{{ _item.title }}</span
- >
- </span>
- <Select
- style="width: 120px"
- filterable
- clearable
- transfer
- label-in-value
- :disabled="isCheck"
- @on-open-change="
- (e) => handleGetProductMeasure(e, idx, modalData, ele)
- "
- @on-change="
- (e) =>
- handleProductProcessChange(e, idx, modalData, ele)
- "
- v-model="ele.value"
- size="small"
- >
- <Option
- v-for="option of ele.processList"
- :key="option.id"
- :disabled="option.isDisabled"
- :label="option.title"
- :value="option.id"
- ></Option>
- </Select>
- </Tooltip>
- </FormItem>
- <!-- 测量字段 -->
- <FormItem
- v-for="ele in modalData.measure"
- :key="ele.id"
- :label="ele.title + ':'"
- >
- <Input
- size="small"
- type="text"
- clearable
- :disabled="isCheck"
- :placeholder="ele.e_title"
- v-model="ele.value"
- @on-change="
- (e) => handleProductMeasureChange(e, modalData, ele)
- "
- @on-blur="
- (e) => handleProductMeasureBlur(e, modalData, ele)
- "
- style="width: 120px"
- />
- </FormItem>
- <FormItem label="数量:">
- <Input
- size="small"
- @on-change="(e) => handleProductNumChange(e, modalData)"
- v-model="modalData.total_num"
- :disabled="isCheck"
- style="width: 120px"
- placeholder="请输入产品数量"
- />
- </FormItem>
- <FormItem label="核算数量:">
- <Input
- size="small"
- v-model="modalData.num"
- :disabled="isCheck"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="单价:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="modalData.unit_price"
- @on-change="
- (e) => handleProductUnit_priceChange(e, modalData)
- "
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="附加金额:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="modalData.ext_price"
- @on-change="
- (e) => handleProductExt_priceChange(e, modalData)
- "
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="超标金额:">
- <Input
- :disabled="isCheck"
- size="small"
- @on-change="
- (e) => handleProductOver_priceChange(e, modalData)
- "
- v-model="modalData.over_price"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="金额:">
- <Input
- :disabled="isCheck"
- size="small"
- v-model="modalData.price"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem label="图号:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="modalData.url_number"
- style="width: 120px"
- placeholder="自动带出"
- />
- </FormItem>
- <FormItem
- v-for="(_customize, customize_key) in modalData.customize"
- :label="_customize.style + ':'"
- :key="customize_key + 99"
- >
- <Input
- v-show="_customize.type == 1"
- :disabled="isCheck"
- size="small"
- type="text"
- v-model="_customize.value"
- style="width: 120px"
- placeholder="请输入"
- />
- <Select
- v-show="_customize.type == 2"
- style="width: 120px"
- :disabled="isCheck"
- filterable
- clearable
- v-model="_customize.value"
- size="small"
- >
- <Option
- v-for="option of _customize.explain"
- :key="option.value"
- :label="option.value"
- :value="option.value"
- ></Option>
- </Select>
- </FormItem>
- <FormItem
- v-for="(outh, outh_key) in modalData.outh"
- :label="outh.title"
- :key="outh_key + 21"
- >
- <img
- v-if="outh.key == 'img' || outh.key == 'url'"
- @click="showPreview(modalData, outh.key)"
- style="
- max-width: 30px;
- max-height: 30px;
- top: 5px;
- position: relative;
- cursor: pointer;
- "
- :src="$store.state.ip + outh.value"
- />
- <Input
- v-if="
- outh.key != 'img' &&
- outh.key != 'url' &&
- outh.key != 'lock'
- "
- disabled
- placeholder="自动生成"
- style="width: 120px"
- size="small"
- v-model="outh.value"
- />
- <Select
- label-in-value
- @on-change="changeLock($event, modalData, index)"
- size="small"
- clearable
- style="width: 120px"
- v-if="outh.key == 'lock'"
- v-model="modalData[outh.key]"
- >
- <Option
- v-for="luck of lock_list"
- :key="luck.id"
- :tag="luck.price"
- :value="luck.id"
- :label="luck.title"
- ></Option>
- <Option :value="0" label="无"></Option>
- </Select>
- </FormItem>
- <FormItem label="备注:">
- <Input
- size="small"
- type="textarea"
- :disabled="isCheck"
- v-model="modalData.remark"
- style="width: 120px"
- placeholder="请输入备注"
- />
- </FormItem>
- <FormItem label="产品图:">
- <!-- v-show="modalData.url && modalData.url.length > 0" -->
- <div class="product-img">
- <div class="product-add">
- <div
- class="items"
- v-for="(item, index) of modalData.url"
- :key="index"
- >
- <img
- @click="looks(item)"
- :src="$store.state.ip + item"
- alt=""
- />
- </div>
- </div>
- </div>
- </FormItem>
- </Form>
- </div>
- </div>
- <div class="modal_product_info">
- <div class="modal_product_info_title">部件信息</div>
- <div class="modal_product_info_content modal_parts">
- <Form
- :model="element"
- v-for="(element, idx) in modalData.part"
- :key="element.id + '444' + idx"
- :label-width="50"
- >
- <FormItem :label-width="element.isBP ? 1 : 50">
- <Radio
- v-show="element.isBP"
- :disabled="isCheck"
- @click.native.prevent="handleRadioClick(element)"
- v-model="element.isChoosed"
- ></Radio>
- <span v-show="element.isBP">{{ element.part_title }} </span>
- </FormItem>
- <FormItem label="部件:">
- <Select
- filterable
- clearable
- transfer
- :disabled="isCheck"
- label-in-value
- size="small"
- @on-change="
- handlePartChange(
- element,
- modalData.measure,
- modalData.total_num
- )
- "
- v-model="element.change_id"
- style="width: 180px"
- >
- <Option
- v-for="item of element.change"
- :key="item.id"
- :label="item.part_title"
- :value="item.id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="高:">
- <Input
- size="small"
- clearable
- :disabled="isCheck"
- v-model="element.long"
- style="width: 50px"
- placeholder="请输入厚"
- />
- </FormItem>
- <FormItem label="宽:">
- <Input
- size="small"
- clearable
- :disabled="isCheck"
- v-model="element.wide"
- style="width: 50px"
- placeholder="请输入宽"
- />
- </FormItem>
- <FormItem label="厚:">
- <Input
- size="small"
- clearable
- :disabled="isCheck"
- v-model="element.high"
- style="width: 50px"
- placeholder="请输入高"
- />
- </FormItem>
- <FormItem
- v-for="(process_detail, idx) in element.process"
- :key="idx + '555' + element.part_id"
- :label="process_detail.name + ':'"
- >
- <Tooltip style="width: 120px" transfer>
- <span slot="content">
- <span
- v-for="_item in process_detail.cld"
- :key="_item.id"
- v-show="_item.id == process_detail.procedure_property"
- >{{ _item.title }}</span
- >
- </span>
- <Select
- style="width: 120px"
- filterable
- clearable
- label-in-value
- :disabled="isCheck"
- @on-change="
- (e) => handlePartProcessChange(e, idx, element)
- "
- v-model="process_detail.procedure_property"
- size="small"
- >
- <Option
- v-for="option of process_detail.cld"
- :key="option.id"
- :label="option.title"
- :value="option.id"
- ></Option>
- </Select>
- </Tooltip>
- </FormItem>
- <FormItem>
- <Button
- @click="handlePartsApart(element, idx, modalData.part)"
- type="primary"
- v-show="!isCheck"
- v-if="element.isBP"
- style="margin-right: 5px"
- size="small"
- >拆分</Button
- >
- <Button
- @click="handlePartsDele(element, idx, modalData.part)"
- type="primary"
- v-else
- v-show="!isCheck"
- style="margin-right: 5px"
- size="small"
- >删除</Button
- >
- <Button
- @click="handlePartDetailEdit(element, idx)"
- type="primary"
- style="margin-right: 5px"
- size="small"
- >{{
- element.isShowPartDetail
- ? "收起"
- : isCheck
- ? "查看"
- : "修改原材料"
- }}</Button
- >
- </FormItem>
- <div
- :class="[
- 'part_detail_form',
- element.isShowPartDetail ? '' : 'hide_part_detail',
- ]"
- :data-index="idx"
- >
- <FormItem>
- <div v-for="ele in element.part_detail" :key="ele.id">
- <Form :model="ele">
- <FormItem>
- <div style="width: 200px">
- <!-- <Tooltip
- :content="
- ele.title || ele.part_detail_title || '请选择'
- "
- > -->
- {{ ele.title || ele.part_detail_title }}
- <!-- </Tooltip> -->
- </div>
- </FormItem>
- <!-- <FormItem label="厚" :label-width="40">
- <Input
- size="small"
- v-model="ele.long"
- style="width: 80px"
- placeholder="请输入厚"
- />
- </FormItem> -->
- <!-- <FormItem label="宽" :label-width="40">
- <Input
- size="small"
- v-model="ele.wide"
- style="width: 80px"
- placeholder="请输入宽"
- />
- </FormItem> -->
- <!-- <FormItem label="高" :label-width="40">
- <Input
- size="small"
- v-model="ele.high"
- style="width: 80px"
- placeholder="请输入高"
- />
- </FormItem> -->
- <!-- <FormItem label="数量" :label-width="40">
- <Input
- size="small"
- v-model="ele.num"
- @on-change="(e) => handleSubpartNumChange(e, ele)"
- style="width: 80px"
- placeholder="请输入数量"
- />
- </FormItem> -->
- <!-- 原材料 -->
- <Form>
- <FormItem>
- <div style="width: 200px">
- <!-- <Tooltip
- :content="
- ele.material_detail_title || '请选择'
- "
- > -->
- {{ ele.material_detail_title || "请选择" }}
- <!-- </Tooltip> -->
- </div>
- </FormItem>
- <FormItem label="高" :label-width="40">
- <Select
- style="width: 80px"
- filterable
- clearable
- :disabled="isCheck"
- v-model="ele.material_detail_id"
- @on-change="(e) => handleMaterialChange(e, ele)"
- placeholder="请选择高"
- size="small"
- >
- <Option
- v-for="option of ele.material_detail_list"
- :key="option.material_detail_id"
- :label="option.long"
- :value="option.material_detail_id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="宽" :label-width="40">
- <Select
- style="width: 80px"
- filterable
- clearable
- :disabled="isCheck"
- v-model="ele.material_detail_id"
- placeholder="请选择宽"
- size="small"
- >
- <Option
- v-for="option of ele.material_detail_list"
- :key="option.material_detail_id"
- :label="option.wide"
- :value="option.material_detail_id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="厚" :label-width="40">
- <Select
- style="width: 80px"
- filterable
- clearable
- :disabled="isCheck"
- v-model="ele.material_detail_id"
- placeholder="请选择厚"
- size="small"
- >
- <Option
- v-for="option of ele.material_detail_list"
- :key="option.material_detail_id"
- :label="option.high"
- :value="option.material_detail_id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="数量" :label-width="40">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="ele.material_detail_num"
- style="width: 80px"
- placeholder="请输入数量"
- />
- </FormItem>
- </Form>
- </Form>
- </div>
- </FormItem>
- </div>
- </Form>
- </div>
- </div>
- <div class="modal_product_info">
- <div class="modal_product_info_title">
- 附加信息
- <Button
- @click="handleExtraAdd(modalData.metalArray, 1)"
- type="primary"
- style="margin-right: 5px"
- v-show="!isCheck"
- size="small"
- >新增五金</Button
- >
- <Button
- @click="handleExtraAdd(modalData.extArray, 2)"
- type="primary"
- v-show="!isCheck"
- size="small"
- >新增附加项目</Button
- >
- </div>
- <div class="modal_product_info_content modal_extra">
- <Form
- :model="element"
- v-for="(element, idx) in modalData.metalArray"
- :key="element.id"
- :label-width="80"
- >
- <FormItem label="五金:">
- <Select
- filterable
- clearable
- transfer
- label-in-value
- size="small"
- :disabled="isCheck"
- @on-change="
- (e) =>
- handleMetalChange(
- e,
- element,
- idx,
- modalData.metalArray
- )
- "
- v-model="element.material_id"
- style="width: 100px"
- >
- <Option
- v-for="item of metalList"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="数量:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.num"
- @on-change="handleTotalPriceCalc(element, modalData)"
- style="width: 100px"
- placeholder="请输入数量"
- />
- </FormItem>
- <FormItem label="单价:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.price"
- @on-change="handleTotalPriceCalc(element, modalData)"
- style="width: 100px"
- placeholder="请输入单价"
- />
- </FormItem>
- <FormItem label="金额:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.total_price"
- style="width: 100px"
- placeholder="请输入金额"
- />
- </FormItem>
- <FormItem label="备注:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.remark"
- style="width: 100px"
- placeholder="请输入备注"
- />
- </FormItem>
- <FormItem>
- <a
- style="color: red"
- @click="
- handleExtraDele(modalData.metalArray, element, idx)
- "
- >删除</a
- >
- </FormItem>
- </Form>
- <Form
- :model="element"
- v-for="(element, idx) in modalData.extArray"
- :key="element.id"
- :label-width="80"
- >
- <FormItem label="附加项目:">
- <Select
- filterable
- clearable
- transfer
- label-in-value
- :disabled="isCheck"
- size="small"
- v-model="element.id"
- @on-change="(e) => handleExtChange(element, e, modalData)"
- style="width: 100px"
- >
- <Option
- v-for="item of extList"
- :key="item.id"
- :label="item.title"
- :value="item.id"
- ></Option>
- </Select>
- </FormItem>
- <FormItem label="数量:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.num"
- @on-change="handleTotalPriceCalc(element, modalData)"
- style="width: 100px"
- placeholder="请输入数量"
- />
- </FormItem>
- <FormItem label="单价:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.price"
- @on-change="handleTotalPriceCalc(element, modalData)"
- style="width: 100px"
- placeholder="请输入单价"
- />
- </FormItem>
- <FormItem label="金额:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.total_price"
- style="width: 100px"
- placeholder="请输入金额"
- />
- </FormItem>
- <FormItem label="备注:">
- <Input
- size="small"
- :disabled="isCheck"
- v-model="element.remark"
- style="width: 100px"
- placeholder="请输入备注"
- />
- </FormItem>
- <FormItem>
- <a
- style="color: red"
- @click="handleExtraDele(modalData.extArray, element, idx)"
- >删除</a
- >
- </FormItem>
- </Form>
- </div>
- </div>
- </TabPane>
- </Tabs>
- </div>
- <div slot="footer">
- <Button @click="cancelModal">取消</Button>
- <Button
- @click="handleEditProductSubmit"
- v-show="!isCheck"
- type="primary"
- >确定</Button
- >
- </div>
- </Modal>
- <Modal
- v-model="showForms"
- @on-ok="postForms(1)"
- class-name="vertical-center-modal"
- style="max-height: 700px; overflow: hidden; overflow-y: auto"
- title="表单设置"
- >
- <Table
- :max-height="600"
- border
- :columns="formSetTableColumns"
- :data="formSetTableData"
- >
- </Table>
- <CheckboxGroup v-model="forms_list">
- <Checkbox label="order_no">订单编号</Checkbox>
- <Checkbox label="residential_name">项目名称</Checkbox>
- <Checkbox label="warning_state">紧急程度</Checkbox>
- <Checkbox label="front_money">项目定金</Checkbox>
- <Checkbox label="start_time">开始日期</Checkbox>
- <Checkbox label="client_name">客户名称</Checkbox>
- <Checkbox label="custom_detail_name">负责人</Checkbox>
- <Checkbox label="custom_detail_mobile">手机号</Checkbox>
- <Checkbox label="custom_detail_id">详细地址</Checkbox>
- <Checkbox label="service_id">专营业务员</Checkbox>
- <Checkbox label="end_time">交付日期</Checkbox>
- <Checkbox label="predict_price">产品总价</Checkbox>
- <Checkbox label="order_price">订单金额</Checkbox>
- <Checkbox label="box_id">包装</Checkbox>
- <Checkbox label="remark">订单备注</Checkbox>
- <Checkbox label="pay_state">收款</Checkbox>
- <!-- <Checkbox label="predict_working">预估工期</Checkbox> -->
- <!-- <Checkbox label="predict_time">预估交付日期</Checkbox> -->
- </CheckboxGroup>
- </Modal>
- </div>
- </template>
- <script>
- export default {
- beforeRouteLeave(to, from, next) {
- if (this.type == 1 || this.type == 2) {
- if (to.path != "/cms/ordermannage/businessorderlist/list") {
- this.$Modal.confirm({
- title: "提示",
- content: "切换页面会导致数据丢失,是否确认切换?",
- onOk: () => {
- next(() => {});
- },
- onCancel: () => {},
- });
- } else {
- if (this.isAllowLeave) {
- next(() => {});
- } else {
- this.$Modal.confirm({
- title: "提示",
- content: "切换页面会导致数据丢失,是否确认切换?",
- onOk: () => {
- next(() => {});
- },
- onCancel: () => {},
- });
- }
- }
- } else {
- next(() => {});
- }
- },
- data() {
- const validateMobile = function(rule, value, fn) {
- if (!/^1[3456789]\d{9}$/.test(value)) {
- fn(new Error(" "));
- return false;
- }
- fn();
- };
- return {
- formObjs: {
- order_no: 1,
- residential_name: 1,
- client_name: 1,
- warning_state: 1,
- service_id: 1,
- pay_state: 1,
- address: 1,
- mobile: 1,
- start_time: 1,
- end_time: 1,
- predict_price: 1,
- predict_working: 1,
- predict_time: 1,
- remark: 1,
- },
- formObjs_reset: {
- order_no: 1,
- residential_name: 1,
- warning_state: 1,
- front_money: 1,
- start_time: 1,
- client_name: 1,
- custom_detail_name: 1,
- custom_detail_mobile: 1,
- custom_detail_id: 1,
- service_id: 1,
- end_time: 1,
- predict_price: 1,
- order_price: 1,
- box_id: 1,
- remark: 1,
- pay_state: 1,
- },
- tree_btn_show: false,
- showForms: false,
- forms_list: [],
- type: 1,
- order_no: this.$route.query.order_no,
- modalArray: [
- { type_name: "产品1", num: 1, id: 0, metalArray: [], extArray: [] },
- ],
- modalData: {},
- productList: [],
- metalList: [],
- extList: [],
- coumstList: [],
- tableWidth: null,
- users: [],
- lock_list: [],
- headers: { Authorization: localStorage.getItem("token") },
- uploadData: {
- order_no: this.$route.query.order_no,
- title: "",
- },
- title_state: 0,
- clientList: [],
- clientDetailList: [],
- clientDetailList_mobile: [],
- clientDetailList_respon: [],
- clientDetailList_address: [],
- tableData: [],
- showAddProduct: false,
- showEditProduct: false,
- infoRules: {
- residential_name: [{ required: true, message: " ", trigger: "blur" }],
- warning_state: [{ required: true, message: " " }],
- pay_state: [{ required: true, message: "" }],
- predict_price: [{ required: true, message: " " }],
- fax_price: [{ required: true, message: " " }],
- order_price: [{ required: true, message: " " }],
- custom_id: [{ required: true, message: " " }],
- start_time: [{ required: true, message: " " }],
- end_time: [{ required: true, message: " " }],
- box_id: [{ required: true, message: " " }],
- remark: [{ required: true, message: " " }],
- },
- info: {
- residential_name: "", //项目名称
- order_no: "", //订单号
- client_name: "", //客户名称
- address: "", //
- mobile: "", //手机号
- start_time: new Date().toLocaleDateString().replace(/\//g, "-"), //开始时间
- end_time: "", //结束时间
- pay_state: "", //是否支付
- warning_state: 1, //是否紧急
- predict_time: "", //预估交付日期
- service_id: null, //业务员
- predict_price: null, //预估工价,
- predict_working: null, //预估工期
- remark: "",
- img: [],
- front_money: 0,
- },
- process_match_list: [],
- img: [],
- sub_material_list: [],
- showCurrencyOnly: false,
- options: {
- disabledDate(date) {
- return date && date.valueOf() < Date.now() - 86400000;
- },
- },
- editForm: {},
- is_material_show: false,
- currencyIndex: null,
- currentTabIndex: "0",
- parts_title_count: [],
- wood_title_count: [],
- isCheck: false,
- warningList: [],
- process_Select_match_list: [], //选中的list
- originalTableColumns: [
- { title: "原材料名称", align: "center", key: "title" },
- { title: "原材料库存", align: "center", key: "stock" },
- { title: "所需原材料数量", align: "center", key: "num" },
- // { title: '原材料单价', align: 'center', key: 'price' },
- {
- title: "规格型号",
- align: "center",
- key: "specifications",
- render: (h, params) => {
- const { row } = params;
- let text = "";
- row.long ? (text += "L" + row.long + "*") : "";
- row.wide ? (text += "W" + row.wide + "*") : "";
- row.high ? (text += "H" + row.high + "*") : "";
- text = text.substring(0, text.length - 1);
- return h("span", {}, text);
- },
- },
- { title: "原材料单位", align: "center", key: "unit" },
- {
- title: "原材料预估费用",
- align: "center",
- key: "total_price",
- },
- ],
- originalData: [],
- isAllowLeave: false,
- pre_process_obj: {},
- route_id_at_copy: "",
- formSetTableColumns: [
- {
- title: "是否展示",
- align: "center",
- key: "is_show",
- minWidth: 60,
- render: (h, params) => {
- const { index } = params;
- const currentRow = JSON.parse(
- JSON.stringify(this.formSetTableData[index])
- );
- return h("Checkbox", {
- props: {
- value: currentRow.is_show,
- disabled:
- currentRow.key == "order_no" ||
- currentRow.key == "residential_name" ||
- currentRow.key == "warning_state" ||
- currentRow.key == "start_time" ||
- currentRow.key == "end_time" ||
- currentRow.key == "client_name" ||
- currentRow.key == "predict_price" ||
- currentRow.key == "box_id" ||
- currentRow.key == "predict_price" ||
- currentRow.key == "order_price" ||
- currentRow.key == "fax_price" ||
- currentRow.key == "remark",
- },
- on: {
- "on-change": (e) => {
- currentRow.is_show = e;
- this.formSetTableData.splice(index, 1, currentRow);
- },
- },
- });
- },
- },
- {
- title: "字段名",
- align: "center",
- key: "value",
- minWidth: 100,
- },
- {
- title: "展示名称",
- align: "center",
- key: "title",
- minWidth: 100,
- render: (h, params) => {
- const { index } = params;
- const currentRow = JSON.parse(
- JSON.stringify(this.formSetTableData[index])
- );
- return h("Input", {
- props: {
- value: currentRow.title,
- type: "text",
- },
- on: {
- "on-change": (e) => {
- currentRow.title = e.target.value;
- this.formSetTableData.splice(index, 1, currentRow);
- },
- },
- });
- },
- },
- ],
- formSetTableData: [
- {
- is_show: true,
- key: "order_no",
- value: "订单编号",
- title: "订单编号",
- },
- {
- is_show: true,
- key: "residential_name",
- value: "项目名称",
- title: "项目名称",
- },
- {
- is_show: true,
- key: "warning_state",
- value: "紧急程度",
- title: "紧急程度",
- },
- {
- is_show: true,
- key: "front_money",
- value: "项目定金",
- title: "项目定金",
- },
- {
- is_show: true,
- key: "start_time",
- value: "开始日期",
- title: "开始日期",
- },
- {
- is_show: true,
- key: "client_name",
- value: "客户名称",
- title: "客户名称",
- },
- {
- is_show: true,
- key: "custom_detail_name",
- value: "负责人",
- title: "负责人",
- },
- {
- is_show: true,
- key: "custom_detail_mobile",
- value: "手机号",
- title: "手机号",
- },
- {
- is_show: true,
- key: "custom_detail_id",
- value: "详细地址",
- title: "详细地址",
- },
- {
- is_show: true,
- key: "service_id",
- value: "专营业务员",
- title: "专营业务员",
- },
- {
- is_show: true,
- key: "end_time",
- value: "交付日期",
- title: "交付日期",
- },
- {
- is_show: true,
- key: "predict_price",
- value: "产品总价",
- title: "产品总价",
- },
- {
- is_show: true,
- key: "order_price",
- value: "订单金额",
- title: "订单金额",
- },
- {
- is_show: true,
- key: "fax_price",
- value: "折扣金额",
- title: "折扣金额",
- },
- { is_show: true, key: "box_id", value: "包装", title: "包装" },
- { is_show: true, key: "remark", value: "订单备注", title: "订单备注" },
- ],
- post_formSetTableData:[],
- };
- },
- computed: {
- predict_price_clac() {
- let sum = 0;
- return sum;
- },
- },
- watch: {},
- created() {
- // 获取紧急程度
- this.axios.get("/api/warning_list").then((res) => {
- (this.warningList = res.data.data),
- (this.info.warning_state = this.warningList[0].id);
- });
- // 获取客户列表
- this.axios.get("/api/custom_list").then((res) => {
- this.clientList = res.data.data;
- });
- // 获取五金列表
- this.axios
- .get("/api/material", { params: { sub_type_id: 5 } })
- .then((res) => {
- if (res.code == 200) {
- this.metalList = res.data.data;
- }
- });
- // 获取辅料列表
- this.axios
- .get("/api/material", { params: { sub_type_id: 4 } })
- .then((res) => {
- if (res.code == 200) {
- this.sub_material_list = res.data.data;
- }
- });
- // 获取附加列表
- this.axios.get("/api/project_ext_list").then((res) => {
- if (res.code == 200) {
- this.extList = res.data.data;
- }
- });
- let date1 = new Date();
- let date2 = new Date();
- date2.setDate(date1.getDate() + 30);
- this.info.end_time = date2;
- this.tableWidth = window.innerWidth - 300;
- this.getUsers();
- this.type = this.$route.query.type;
- this.axios("/api/order_get_forms").then((res) => {
- if (res.code == 200) {
- this.forms_list = res.data;
- this.postForms(0);
- }
- });
- this.getCoumstList();
- this.getLockList();
- },
- mounted() {
- if (this.order_no) {
- if (this.order_no) {
- this.info = {};
- }
- this.initData(this.order_no);
- }
- this.getProducts();
- addEventListener("resize", (e) => {
- this.tableWidth = e.target.innerWidth - 300;
- this.$forceUpdate();
- });
- },
- methods: {
- back() {
- // this.$router.go(-1);
- this.$router.push({
- path: "/cms/ordermannage/businessorderlist/list",
- });
- },
- postForms(n) {
- let result = [];
- this.forms_list.map((rows) => {
- for (let i in this.formObjs_reset) {
- // if (i == rows) {
- result.push(i);
- // }
- }
- });
- const news_forms = {};
- this.post_formSetTableData = JSON.parse(JSON.stringify(this.formSetTableData))
- result.forEach((element) => {
- news_forms[element] = 1;
- });
- this.formObjs = news_forms;
- if (n) {
- this.axios
- .post("/api/order_set_form", {
- result: this.post_formSetTableData,
- all: Object.keys(this.formObjs_reset),
- })
- .then((res) => {
- if (res.code == 200) {
- this.$Message.success(res.msg);
- }
- });
- }
- },
- postData() {
- let sendData = JSON.parse(JSON.stringify(this.info));
- // sendData.custom_detail_id = sendData.custom_id
- let sendList = JSON.parse(JSON.stringify(this.tableData));
- sendList.map((item) => {
- delete item.part;
- });
- this.tableData.map((item, index) => {
- item.part.map((it, idx) => {
- if (!it.is_metal) {
- if (!sendList[index].part) {
- sendList[index].part = [];
- }
- sendList[index].part.push(it);
- }
- });
- });
- // sendList= this.tableData.filter(item)
- sendList.map((element) => {
- element.part.map((elem) => {
- if (!elem.is_metal) {
- // elem.part_detail = elem.sub_part;
- if (!elem.part_detail) {
- elem.part_detail = elem.sub_part;
- }
- elem.part_detail.map((el) => {
- el.material_num = el.material_detail_num;
- });
- }
- });
- });
- try {
- sendData.start_time = new Date(sendData.start_time)
- .toLocaleDateString()
- .replace(/\//g, "-");
- sendData.end_time = new Date(sendData.end_time)
- .toLocaleDateString()
- .replace(/\//g, "-");
- } catch (e) {
- console.log(e);
- }
- let params = { ...sendData, product: sendList, renovation_type: 2 };
- this.axios.post("/api/order_save_new", params).then((res) => {
- if (res.code == 200) {
- this.$Message.success(res.msg);
- this.isAllowLeave = true;
- this.back();
- }
- });
- },
- handleProductCopy() {
- let idx = this.$refs.tabsRef.activeKey;
- let obj = JSON.parse(JSON.stringify(this.modalArray[idx]));
- obj.index = JSON.parse(JSON.stringify(this.modalArray.length));
- this.modalArray.push(obj);
- },
- handleProductDele() {
- let idx = this.$refs.tabsRef.activeKey;
- this.modalArray.splice(idx, 1);
- },
- handleTabsAdd() {
- let index = JSON.parse(JSON.stringify(this.modalArray.length));
- this.modalArray.push({
- type_name: "产品" + (this.modalArray.length + 1),
- position: "",
- index,
- extArray: [{ type: 2 }],
- metalArray: [{ type: 1 }],
- });
- },
- handleShowMaterial() {
- this.is_material_show = !this.is_material_show;
- },
- initData(order_no) {
- this.axios("/api/order_detail_new", { params: { order_no } }).then(
- (res) => {
- //获取合计
- // this.wood_title_count = res.data.materials;
- // let total_line = 0;
- // let total_line_unit;
- // this.wood_title_count.forEach((element) => {
- // element.measure_str = element.measure;
- // for (const key in element.measure_str) {
- // const elem = element.measure_str[key];
- // total_line += elem.num;
- // }
- // total_line_unit = element.unit;
- // });
- // this.parts_title_count = res.data.parts;
- // this.parts_title_count.push({
- // title: "线 条",
- // num: total_line,
- // unit: total_line_unit,
- // });
- //获取产品
- this.info = res.data;
- this.info.img = this.info.imgs;
- this.tableData = res.data.product_list;
- this.tableData.forEach((element) => {
- // 数据第一次通过接口获取
- element.get_first_data = true;
- //保存用数据
- element.other = element.customize;
- element.process_str = element.process;
- element.part.forEach((elem) => {
- if (!elem.is_metal) {
- // 表格数据展示字段
- elem.process_str = elem.process;
- elem.measurement = elem.measure;
- let measure_arr = elem.measure.split("*");
- elem.long = measure_arr[0];
- elem.wide = measure_arr[1];
- elem.high = measure_arr[2];
- }
- });
- // 拆分测量字段
- // let product_measure = element.measurement.split('*')
- element.measure.forEach((elem) => {
- element[elem.e_title] = elem.value;
- });
- // 拼五金展示用
- if (element.ext_list && element.ext_list.length > 0) {
- element.ext_list.map((elem) => {
- if (elem.type == 1) {
- elem.total_num = elem.num;
- elem.unit_price = elem.price;
- elem.ext_price = elem.num * elem.price;
- elem.is_metal = true;
- element.part.push(elem);
- } else {
- if (!element.extra) {
- element.extra = "";
- }
- element.extra += `${elem.title}/`;
- }
- });
- if (element.extra) {
- element.extra = element.extra.substring(
- 0,
- element.extra.length - 1
- );
- }
- }
- });
- this.forms_list = res.tableSet || [];
- // 查看详情时获取原材料信息
- this.originalData = res.data.material_list;
- this.originalData.forEach((element) => {
- element.total_price = (element.num * element.price).toFixed(2);
- });
- this.handleCalcCount();
- //获取客户信息
- this.axios
- .get("/api/custom_detail", { params: { id: res.data.custom_id } })
- .then((re) => {
- this.clientDetailList = re.data.list;
- const _temp = this.clientDetailList.filter(
- (item) => item.id == res.data.custom_detail_id
- );
- this.info.custom_detail_name = _temp[0].service_name;
- this.info.custom_detail_mobile = _temp[0].mobile;
- // 去重负责人
- this.clientDetailList_respon = this.unique(re.data.list);
- // 取负责人名字
- // 取出手机号码是该负责人的
- this.clientDetailList_mobile = this.unique(re.data.list);
- this.clientDetailList_mobile = this.clientDetailList.filter(
- (item) => item.service_name == this.info.custom_detail_name
- );
- // 去重手机号码
- this.clientDetailList_mobile = this.unique(
- this.clientDetailList_mobile
- );
- // 取出地址是该负责人的
- this.clientDetailList_address = this.clientDetailList.filter(
- (item) => item.service_name == this.info.custom_detail_name
- );
- this.fax = re.data.detail.fax;
- // 修改价格
- let sum = 0;
- this.tableData.forEach((element) => {
- sum += element.price * 1;
- });
- this.info.service_id = re.data.detail.service_id;
- this.info.predict_price = sum.toFixed(2);
- this.info.order_price = (
- (this.info.predict_price * this.fax) /
- 100
- ).toFixed(2);
- this.info.fax_price = (
- this.info.predict_price - this.info.order_price
- ).toFixed(2);
- this.$forceUpdate();
- });
- }
- );
- },
- addHours(row) {
- row.push({
- unit: null,
- layer: null,
- number: null,
- product: [{ product_id: "" }],
- });
- },
- getProducts() {
- this.axios("/api/product").then(
- (res) => (this.productList = res.data.data)
- );
- },
- cancelModal() {
- // this.modalArray = [{}]
- this.showAddProduct = false;
- this.showEditProduct = false;
- },
- handleSubmit(name) {
- this.$refs[name].validate((valid) => {
- if (valid) {
- this.postData();
- }
- });
- },
- handleAddProductSubmit() {
- this.modalArray.forEach((element) => {
- // 工艺属性
- if (!element.procedure_properties_str) {
- element.procedure_properties_str = [];
- }
- element.process.forEach((elem, index) => {
- const _temp = elem.processList.filter(
- (item) => item.id == elem.value
- );
- element.procedure_properties_str[index] =
- _temp.length > 0 ? _temp[0].title : "";
- });
- element.process_str = element.procedure_properties_str.join("/");
- // 尺寸
- if (!element.measurement) {
- element.measurement = "";
- }
- let tempStr = "";
- element.measure.forEach((elem) => {
- tempStr += elem.measureCalc + elem.value + "*";
- });
- element.measurement = tempStr.substring(0, tempStr.length - 1);
- // 五金、 附加项目
- element.ext = [...element.metalArray, ...element.extArray];
- //其他项
- element.other = element.customize;
- // 部件字段
- element.part.forEach((elem) => {
- if (!elem.is_metal) {
- elem.title ? "" : (elem.title = elem.part_title);
- // if (elem.procedure_properties_str && elem.procedure_properties_str != 0) {
- // elem.process_str = elem.procedure_properties_str.join('/')
- // } else {
- elem.procedure_properties_str = [];
- elem.process.forEach((item, index) => {
- const _temp = item.cld.filter(
- (_cld) => _cld.id == item.procedure_property
- );
- elem.procedure_properties_str[index] =
- _temp.length > 0 ? _temp[0].title : "";
- });
- elem.process_str = elem.procedure_properties_str.join("/");
- // }
- }
- });
- element.ext &&
- element.ext.length > 0 &&
- (element.ext.map((elem) => {
- if (elem.type == 1) {
- elem.total_num = elem.num;
- elem.unit_price = elem.price;
- elem.ext_price = elem.num * elem.price;
- elem.is_metal = true;
- element.part.push(elem);
- } else {
- if (!element.extra) {
- element.extra = "";
- }
- element.extra += `${elem.title}/`;
- }
- }),
- (element.extra = element.extra.substring(
- 0,
- element.extra.length - 1
- )));
- // element.part.push({
- // title: "五金",
- // total_num: "",
- // unit_price: "",
- // });
- });
- this.modalArray.forEach((element) => {
- element.part.forEach((elem) => {
- if (!elem.is_metal) {
- elem.measurement = `${elem.long}*${elem.wide}*${elem.high}`;
- elem.title = elem.part_title;
- }
- });
- });
- this.tableData = [...this.tableData, ...this.modalArray];
- this.currencyIndex = null;
- this.route_id_at_copy = "";
- // 合计 、 线条 统计价格
- this.handleCalcCount();
- this.showAddProduct = false;
- this.$forceUpdate();
- },
- handleEditProductSubmit() {
- // 工艺属性
- if (!this.modalData.procedure_properties_str) {
- this.modalData.procedure_properties_str = [];
- }
- this.modalData.process.forEach((elem, index) => {
- const _temp = elem.processList.filter((item) => item.id == elem.value);
- this.modalData.procedure_properties_str[index] =
- _temp.length > 0 ? _temp[0].title : "";
- });
- this.modalData.process_str = this.modalData.procedure_properties_str.join(
- "/"
- );
- // 尺寸
- if (!this.modalData.measurement) {
- this.modalData.measurement = "";
- }
- let tempStr = "";
- this.modalData.measure.forEach((elem) => {
- tempStr += elem.measureCalc + elem.value + "*";
- });
- this.modalData.measurement = tempStr.substring(0, tempStr.length - 1);
- // 五金、 附加项目
- this.modalData.ext = [
- ...this.modalData.metalArray,
- ...this.modalData.extArray,
- ];
- //其他项
- this.modalData.other = this.modalData.customize;
- // 部件字段
- this.modalData.part.forEach((elem) => {
- if (!elem.is_metal) {
- elem.title ? "" : (elem.title = elem.part_title);
- // if (elem.procedure_properties_str && elem.procedure_properties_str != 0) {
- // elem.process_str = elem.procedure_properties_str.join('/')
- // } else {
- elem.procedure_properties_str = [];
- elem.process.forEach((item, index) => {
- const _temp = item.cld.filter(
- (_cld) => _cld.id == item.procedure_property
- );
- elem.procedure_properties_str[index] =
- _temp.length > 0 ? _temp[0].title : "";
- });
- elem.process_str = elem.procedure_properties_str.join("/");
- // }
- }
- });
- this.modalData.metalArray.map((item) => {
- const obj = {
- total_num: item.num,
- title: item.title,
- unit_price: item.price,
- ext_price: item.num * item.price,
- is_metal: false,
- };
- this.modalData.part.push(obj);
- });
- this.modalData.extra = "";
- this.modalData.extArray.map((item) => {
- const temp = this.extList.filter((it) => it.id == item.ext_id);
- item.title = temp[0].title;
- });
- this.modalData.extra = this.modalData.extArray.reduce((pre, cur) => {
- return pre + `${cur.title}/`;
- }, "");
- this.modalData.extra = this.modalData.extra.substring(
- 0,
- this.modalData.extra.length - 1
- );
- const _temp = this.productList.filter(
- (item) => item.id == this.modalData.product_id
- );
- this.modalData.title = _temp[0].title;
- this.tableData.splice(this.currencyIndex, 1, this.modalData);
- this.route_id_at_copy = "";
- // 合计 、 线条 统计价格
- this.handleCalcCount();
- this.showEditProduct = false;
- this.$forceUpdate();
- },
- // 合计 、 线条 统计价格
- handleCalcCount() {
- let sum = 0;
- this.parts_title_count = [];
- this.wood_title_count = [];
- let total_line_unit = "";
- this.tableData.forEach((element) => {
- sum += element.price * 1;
- element.part.forEach((elem) => {
- if (!elem.is_metal) {
- // 统计部件
- const temp = this.parts_title_count.filter(
- (item) => item.title == elem.title
- );
- if (temp && temp.length > 0) {
- this.parts_title_count.map((v) => {
- v.title == elem.title && v.num++;
- });
- } else {
- this.parts_title_count.push({
- title: elem.title,
- num: elem.num || 1,
- unit: elem.unit,
- });
- }
- // 如果没有点开产品详情的话找不到 part_detail
- if (!elem.part_detail) {
- elem.part_detail = elem.sub_part;
- }
- // 部件中要统计所有线条数量
- elem.part_detail &&
- elem.part_detail.length > 0 &&
- elem.part_detail.forEach((el) => {
- if (el.material_detail_title.indexOf("线条") != -1) {
- const temp = this.wood_title_count.filter(
- (item) => item.title == el.material_detail_title
- );
- if (temp && temp.length > 0) {
- // 匹配规格是否已存在
- const _temp = temp[0].measure_str.filter(
- (item) => item.id == el.material_detail_id
- );
- if (_temp && _temp.length > 0) {
- this.wood_title_count.map((v) => {
- v.title == el.material_detail_title &&
- v.measure_str.map((item) => {
- if (item.id == el.material_detail_id) {
- item.num =
- item.num * 1 + el.material_detail_num * 1;
- }
- });
- });
- } else {
- // 不存在一样规格
- if (
- el.material_detail_list &&
- el.material_detail_list.length > 0
- ) {
- const __temp = el.material_detail_list.filter(
- (item) =>
- item.material_detail_id == el.material_detail_id
- );
- this.wood_title_count.map((v) => {
- v.title == el.material_detail_title &&
- ((v.unit = __temp[0].unit),
- v.measure_str.push({
- num: el.material_detail_num,
- id: __temp[0].material_detail_id,
- measure: `${__temp[0].long || 0}*${__temp[0]
- .wide || 0}*${__temp[0].high || 0}`,
- }));
- });
- } else {
- this.wood_title_count.map((v) => {
- v.title == el.material_detail_title &&
- ((v.unit = el.unit),
- v.measure_str.push({
- num: el.material_detail_num,
- id: el.material_detail_id,
- measure: `${el.long || 0}*${el.wide ||
- 0}*${el.high || 0}`,
- }));
- });
- }
- }
- } else {
- // 不存在就新增
- if (
- el.material_detail_list &&
- el.material_detail_list.length > 0
- ) {
- const _temp = el.material_detail_list.filter(
- (item) =>
- item.material_detail_id == el.material_detail_id
- );
- if (_temp && _temp.length > 0) {
- if (!total_line_unit) {
- total_line_unit = _temp[0].unit;
- }
- this.wood_title_count.push({
- title: el.material_detail_title,
- unit: total_line_unit,
- measure_str: [
- {
- num: el.material_detail_num,
- id: _temp[0].material_detail_id,
- measure: `${_temp[0].long || 0}*${_temp[0].wide ||
- 0}*${_temp[0].high || 0}`,
- unit: _temp[0].unit,
- },
- ],
- });
- }
- } else {
- if (!total_line_unit) {
- total_line_unit = el.unit;
- }
- this.wood_title_count.push({
- title: el.material_detail_title,
- unit: total_line_unit,
- measure_str: [
- {
- num: el.material_detail_num,
- id: el.material_detail_id,
- measure: `${el.long || 0}*${el.wide ||
- 0}*${el.high || 0}`,
- unit: el.unit,
- },
- ],
- });
- }
- }
- }
- });
- }
- });
- });
- // 数线条
- let total_line = 0;
- this.wood_title_count.map((v) => {
- v.measure_str.map((w) => {
- total_line += w.num;
- });
- });
- // 线条合计放进统计
- this.parts_title_count.push({
- title: "线 条",
- num: total_line,
- unit: total_line_unit,
- });
- // 计算价格
- this.info.predict_price = sum.toFixed(2);
- this.info.order_price = (
- (this.info.predict_price * this.fax) /
- 100
- ).toFixed(2);
- this.info.fax_price = (
- this.info.predict_price - this.info.order_price
- ).toFixed(2);
- },
- getUsers() {
- this.axios("/api/employee_list").then((res) => (this.users = res.data));
- },
- handleExtraAdd(array, type) {
- array.push({
- num: 0,
- price: 0,
- total_price: 0,
- type,
- remark: "",
- title: "",
- is_metal: true,
- });
- this.$forceUpdate();
- },
- handleExtraDele(array, row, index) {
- array.splice(index, 1);
- this.$forceUpdate();
- },
- getCoumstList() {
- this.axios("/api/bpp_list").then((res) => {
- res.data.map((v) => {
- if (v.select) {
- v.cld.map((z) => {
- v.select.map((k) => {
- z.show = k == z.id ? true : false;
- });
- });
- } else {
- v.cld.map((v) => (v.show = false));
- }
- });
- this.coumstList = res.data;
- });
- },
- getLockList() {
- this.axios("/api/lock_list").then((res) => (this.lock_list = res.data));
- },
- modalVisibleChange(e) {
- if (!e) {
- this.cancelModal();
- }
- },
- unique(array) {
- let arr = JSON.parse(JSON.stringify(array));
- for (var i = 0; i < arr.length; i++) {
- for (var j = i + 1; j < arr.length; j++) {
- if (arr[i].service_name == arr[j].service_name) {
- //第一个等同于第二个,splice方法删除第二个
- arr.splice(j, 1);
- j--;
- }
- }
- }
- return arr;
- },
- handleClientChange(id) {
- id &&
- this.axios({
- method: "get",
- url: "/api/custom_detail",
- params: { id },
- }).then((res) => {
- this.info.custom_id = id;
- this.clientDetailList = res.data.list;
- // 去重负责人
- this.clientDetailList_respon = this.unique(res.data.list);
- // 赋值默认负责人
- this.info.custom_detail_name = this.clientDetailList_respon[0].service_name;
- // 取出手机号码是该负责人的
- this.clientDetailList_mobile = this.clientDetailList.filter(
- (item) => item.service_name == this.info.custom_detail_name
- );
- // 赋值默认手机号码
- this.info.custom_detail_mobile = this.clientDetailList_mobile[0].mobile;
- // 去重手机号码
- this.clientDetailList_mobile = this.unique(
- this.clientDetailList_mobile
- );
- // 取出地址是该负责人的
- this.clientDetailList_address = this.clientDetailList.filter(
- (item) => item.service_name == this.info.custom_detail_name
- );
- // 赋值默认地址
- this.info.custom_detail_id = this.clientDetailList_respon[0].id || 0;
- this.info.service_id = res.data.detail.service_id;
- this.fax = res.data.detail.fax;
- this.$forceUpdate();
- });
- },
- handleSpan({ row, column, rowIndex, columnIndex }) {
- if (row.end) {
- return [1, 6];
- }
- },
- handleSummary({ columns, data }) {
- const sums = {};
- columns.forEach((column, index) => {
- const key = column.key;
- if (index === 0) {
- sums[key] = {
- key,
- value: "合计",
- };
- return;
- }
- const values = data.map((item) => Number(item[key]));
- if (!values.every((value) => isNaN(value))) {
- const v = values.reduce((prev, curr) => {
- const value = Number(curr);
- if (!isNaN(value)) {
- return prev + curr;
- } else {
- return prev;
- }
- }, 0);
- sums[key] = {
- key,
- value: v,
- };
- } else {
- sums[key] = {
- key,
- value: "",
- };
- }
- });
- return sums;
- },
- handleMetalChange(e, row, n, arr) {
- arr[n].ext_id = e.value;
- arr[n].title = e.label;
- },
- handleClientChargeChange(value) {
- if (value) {
- this.info.custom_detail_name = value;
- // 取出手机号码是该负责人的
- this.clientDetailList_mobile = this.clientDetailList.filter(
- (item) => item.service_name == this.info.custom_detail_name
- );
- // 赋值默认手机号码
- this.info.custom_detail_mobile = this.clientDetailList_mobile[0].mobile;
- // 去重手机号码
- this.clientDetailList_mobile = this.unique(
- this.clientDetailList_mobile
- );
- // 取出地址是该负责人的
- this.clientDetailList_address = this.clientDetailList.filter(
- (item) => item.service_name == this.info.custom_detail_name
- );
- // 赋值默认地址
- this.info.custom_detail_id = this.clientDetailList_respon[0].id || 0;
- }
- },
- handleClientDetailChange(value) {
- if (value) {
- // this.clientDetailList_mobile = this.clientDetailList.filter(
- // (item) => item.service_name == this.info.custom_detail_name
- // );
- this.info.custom_detail_id = value;
- // this.info.address = row[0].address;
- // this.info.address = row[0].address;
- // this.info.mobile = row[0].mobile;
- this.$forceUpdate();
- }
- },
- getEditData(modalData, curData) {
- // console.log("modalData :>> ", modalData);
- // console.log("curData :>> ", curData);
- /////
- modalData.ext_price = curData.ext_price * 1 || 0;
- modalData.model = curData.model;
- modalData.num = curData.num || 1;
- modalData.over_price = curData.over_price * 1 || 0;
- modalData.position = curData.position;
- modalData.price = curData.price;
- modalData.product_id = curData.product_id;
- modalData.remark = curData.remark;
- modalData.route_id = curData.route_id;
- modalData.total_num = curData.total_num;
- modalData.unit = curData.unit;
- modalData.unit_price = curData.unit_price * 1 || 0;
- modalData.url_number = curData.url_number;
- modalData.metalArray = [];
- modalData.extArray = [];
- // 金额=(产品单价)*核算数量+超标金额+附加金额
- modalData.price =
- (modalData.unit_price * 1 || 0) * (modalData.num * 1 || 1) +
- (modalData.over_price * 1 || 0) +
- (modalData.ext_price * 1 || 0);
- modalData.price = modalData.price.toFixed(2);
- // 获取产品 type_name
- const temprow = this.productList.filter(
- (item) => item.id == curData.product_id
- );
- modalData.type_name = temprow[0].title;
- // 获取工艺属性
- this.process_match_list.forEach((element) => {
- if (element.id == curData.route_id) {
- modalData.process_ids = element.detail;
- }
- });
- modalData.process.forEach((element) => {
- //赋值测量字段
- for (const key in modalData.process_ids) {
- const ele = modalData.process_ids[key];
- if (element.key == key) {
- element.value = ele * 1;
- }
- }
- });
- // 产品测量字段
- let product_measure = curData.measurement.split("*");
- for (let index = 0; index < product_measure.length; index++) {
- const item = product_measure[index];
- const product_measure_detail = [
- item.substring(0, 1),
- item.substring(1),
- ];
- modalData.measure.forEach((element) => {
- if (element.measureCalc == product_measure_detail[0]) {
- element.value = product_measure_detail[1];
- }
- });
- }
- // 拆分五金、附加信息
- if (!curData.ext) {
- curData.ext = curData.ext_list;
- }
- curData.ext.forEach((element) => {
- element.type == 1 && modalData.metalArray.push(element);
- element.type == 2 && modalData.extArray.push(element);
- });
- modalData.metalArray.forEach((element) => {
- element.material_id = element.ext_id;
- element.total_price = (element.price * element.num).toFixed(2);
- });
- modalData.extArray.forEach((element) => {
- element.id = element.ext_id;
- element.total_price = (element.price * element.num).toFixed(2);
- });
- // 同步 curData 、 modalData
- // for (
- // let _modal_idx = 0;
- // _modal_idx < modalData.part.length;
- // _modal_idx++
- // ) {
- // const _modal = modalData.part[_modal_idx];
- // //匹配次数
- // let match_idx = -1;
- // // 相同次数
- // let same_idx = 0;
- // for (let _cur_idx = 0; _cur_idx < curData.part.length; _cur_idx++) {
- // const _cur = curData.part[_cur_idx];
- // if (
- // _modal.part_id == _cur.part_id ||
- // _modal.change_id == _cur.change_id
- // ) {
- // match_idx++;
- // }
- // if (match_idx == 1) {
- // _modal.splice(
- // _modal_idx,
- // same_idx,
- // JSON.parse(JSON.stringify(_cur))
- // );
- // match_idx--;
- // same_idx++;
- // _modal_idx++;
- // }
- // }
- // if (match_idx == -1) {
- // //modal存在但是cur不存在数据
- // curData.part.splice(
- // _modal_idx,
- // 0,
- // JSON.parse(JSON.stringify(_modal))
- // );
- // modalData.isChoosed = false;
- // } else if (match_idx == 0) {
- // // modal 与 cur数量一致
- // }
- // }
- // 处理部件
- curData.part.forEach((element, index) => {
- if (!element.is_metal) {
- modalData.part[index].change_id = element.change_id;
- // 部件测量字段
- if (element.measure && element.measure.length > 0) {
- const part_measure_detail = element.measure.split("*");
- modalData.part[index].long = part_measure_detail[0];
- modalData.part[index].wide = part_measure_detail[1];
- modalData.part[index].high = part_measure_detail[2];
- }
- // 替换项相关 如果选了替换项
- if (element.part_id != modalData.part[index].part_id) {
- const change_obj = modalData.part[index].change.filter(
- (item) => item.part_id == element.part_id
- );
- if (change_obj && change_obj.length > 0) {
- change_obj[0].sub_part.forEach((elem, idx) => {
- modalData.part[index].part_detail[idx].material_detail_title =
- elem.material_detail_list[0].title;
- modalData.part[index].part_detail[idx].material_detail_id =
- elem.material_detail_id;
- modalData.part[index].part_detail[idx].material_detail_list =
- elem.material_detail_list;
- });
- }
- }
- element.sub_part.forEach((elem, idx) => {
- // 零部件字段 、 原材料字段
- modalData.part[index].part_detail[idx].long = elem.long;
- modalData.part[index].part_detail[idx].wide = elem.wide;
- modalData.part[index].part_detail[idx].high = elem.high;
- modalData.part[index].part_detail[idx].material_detail_id =
- elem.material_detail_id;
- modalData.part[index].part_detail[idx].material_detail_num =
- elem.material_detail_num;
- modalData.part[index].part_detail[idx].material_id =
- elem.material_id;
- modalData.part[index].part_detail[idx].num = elem.num;
- });
- modalData.part[index].part_id = element.part_id;
- // 工艺属性
- modalData.part[index].procedure_properties = JSON.parse(
- JSON.stringify(element.process)
- );
- for (let idx = 0; idx < element.process.length; idx++) {
- const item = element.process[idx];
- modalData.part[index].process.forEach((elem) => {
- elem.cld.forEach((el) => {
- if (el.id == item) {
- elem.procedure_property = item * 1;
- }
- });
- });
- // modalData.part[index].process[idx].procedure_property = item * 1;
- }
- }
- });
- },
- handleSet(row, index, type) {
- let obj;
- // 1 新增 2 编辑 3 删除 4复制 5详情
- switch (type) {
- case 1:
- this.title_state = 1;
- if (this.info.custom_id) {
- this.modalArray = [
- {
- type_name: "产品1",
- num: 1,
- position: "位置",
- index: "0",
- metalArray: [],
- extArray: [],
- },
- ];
- this.currentTabIndex = "0";
- this.showAddProduct = true;
- } else {
- this.$Message.warning("请先选择客户");
- }
- break;
- case 2:
- this.title_state = 2;
- this.isCheck = false;
- if (this.type == 1) {
- this.showEditProduct = true;
- this.modalData = JSON.parse(JSON.stringify(row));
- this.currencyIndex = index;
- } else if (this.type == 2) {
- if (row.get_first_data) {
- this.axios
- .get("/api/order_product_detail_new", {
- params: { order_product_id: row.order_product_id },
- })
- .then((res) => {
- if (res.code == 200) {
- this.currencyIndex = index;
- this.modalData = JSON.parse(JSON.stringify(row));
- this.editForm = res.data;
- this.changeProductOnEdit(res.data, 0);
- }
- });
- } else {
- this.modalData = JSON.parse(JSON.stringify(row));
- this.currencyIndex = index;
- this.showEditProduct = true;
- }
- }
- break;
- case 3:
- this.tableData.splice(index, 1);
- this.handleCalcCount();
- break;
- case 4:
- obj = JSON.parse(JSON.stringify(row));
- this.route_id_at_copy = row.route_id;
- obj.index = obj.index + 1;
- this.handleSetCopyId(obj, "_XID");
- this.tableData.splice(index, 0, obj);
- this.handleCalcCount();
- break;
- case 5:
- this.title_state = 3;
- this.isCheck = true;
- if (row.get_first_data) {
- this.axios
- .get("/api/order_product_detail_new", {
- params: { order_product_id: row.order_product_id },
- })
- .then((res) => {
- if (res.code == 200) {
- this.currencyIndex = index;
- this.modalData = JSON.parse(JSON.stringify(row));
- this.editForm = res.data;
- this.changeProductOnEdit(res.data, 0);
- }
- });
- } else {
- this.modalData = JSON.parse(JSON.stringify(row));
- this.currencyIndex = index;
- this.showEditProduct = true;
- }
- break;
- }
- },
- handleSetCopyId(obj, key) {
- // 浅拷贝,不需要返回
- const temp = obj[key].split("_");
- temp[1]++;
- obj[key] = temp.join("_");
- },
- async handleBeforeUpload(row) {
- // row.name
- this.uploadData.title = row.name.substring(0, row.name.indexOf("."));
- return true;
- },
- uploadError(err) {
- this.$Message.error(err.msg || "上传失败");
- },
- onProgress(e) {
- console.log(e);
- },
- //导入成功
- uploadSuccess(res) {
- if (res.code == 200) {
- this.$Message.success(res.msg || "上传成功");
- // const temp = res.data;
- // let list = [...this.postInfo.children, ...temp];
- } else {
- this.$Message.warning(res.msg || "上传失败");
- }
- },
- handleExtChange(row, { value, label }, item) {
- row.ext_id = value;
- row.title = label;
- const element = this.extList.filter((item) => item.id == value);
- row.num = element[0].num;
- row.price = element[0].price;
- row.total_price = (row.num * row.price).toFixed(2);
- this.handleTotalPriceCalc(row, item);
- },
- handleSameProcessDisabled(array, currencyChooseValue, currencyChooseIndex) {
- let matchIds = array.selected_ids;
- let target = array.same_process;
- let source = array.same_process_compare;
- let chooseable = [];
- source.forEach((element, index) => {
- element.forEach((elem, idx) => {
- if (elem.id == currencyChooseValue) {
- chooseable = [...chooseable, ...element];
- }
- });
- });
- target.forEach((element) => {
- element.option.forEach((elem) => {
- elem.isAllowSelect = true;
- chooseable.forEach((el) => {
- if (el.id == elem.id) {
- elem.isAllowSelect = false;
- }
- });
- });
- });
- this.$forceUpdate();
- },
- changeLock(value, row, idx) {
- if (row.old_lock_price) {
- row.price = parseInt(row.price) - row.old_lock_price;
- }
- row.old_lock_price = parseInt(value.tag || "0");
- row.price = parseInt(row.price) + parseInt(value.tag || "0");
- this.modalArray[idx] = row;
- this.$forceUpdate();
- },
- handleTotalPriceCalc(row, item) {
- row.total_price = ((row.price || 0) * (row.num || 0)).toFixed(2);
- let sum1 = 0;
- item.metalArray.forEach((element) => {
- sum1 += element.total_price * 1 || 0;
- });
- let sum2 = 0;
- item.extArray.forEach((element) => {
- sum2 += element.total_price * 1 || 0;
- });
- item.ext_price = sum1 * 1 + sum2 * 1;
- item.price =
- (item.unit_price * 1 || 0) * (item.num * 1 || 1) +
- (item.over_price * 1 || 0) +
- (item.ext_price * 1 || 0);
- item.price = item.price.toFixed(2);
- this.$forceUpdate();
- },
- handlePartDetailEdit(element, index) {
- element.isShowPartDetail = !element.isShowPartDetail;
- this.$forceUpdate();
- },
- handlePartsApart(element, index, array) {
- let obj = JSON.parse(JSON.stringify(element));
- obj.isBP = false;
- array.splice(index + 1, 0, obj);
- this.$forceUpdate();
- },
- handlePartsDele(element, index, array) {
- array.splice(index, 1);
- this.$forceUpdate();
- },
- handleProductPositionChange(item, e) {
- item.position = e.target.value;
- this.$forceUpdate();
- },
- changeAddProduct(row, n) {
- // route_id_at_copy
- if (row) {
- let id = row ? row.value : this.productList[0].id;
- this.modalArray[n].type_name = row.label;
- this.modalArray[n].title = row.label;
- this.axios("/api/order_get_product_detail_new", {
- params: { product_id: id, custom_id: this.info.custom_id },
- }).then((res) => {
- if (res.code == 200) {
- this.process_match_list = res.data.process.list;
- // 赋值默认工艺路线
- if (this.modalArray.length == 1) {
- let _temp_obj = {};
- if (res.data.process.list.length > 1) {
- for (const key in res.data.process.list[0].detail) {
- res.data.process.list.reduce((pre, cur) => {
- if (_temp_obj[key] == "") {
- return pre;
- } else {
- if (pre.detail[key] == cur.detail[key]) {
- _temp_obj[key] = pre.detail[key];
- return pre;
- } else {
- _temp_obj[key] = "";
- return pre;
- }
- }
- });
- }
- } else {
- _temp_obj = res.data.process.list[0].detail;
- }
- this.pre_process_obj = JSON.parse(JSON.stringify(_temp_obj));
- console.log("this.pre_process_obj :>> ", this.pre_process_obj);
- }
- let modalData = this.modalArray[n];
- modalData.route_id = res.data.process.list[0].id;
- modalData.url = res.data.url;
- modalData.total_num = res.data.total_num || 1;
- modalData.ext_price = res.data.ext_price || 0;
- modalData.unit_price = res.data.price || 0;
- modalData.num = res.data.num || 1;
- modalData.over_price = res.data.over_price || 0;
- modalData.position = res.data.position || "";
- modalData.unit = res.data.unit || "";
- modalData.remark = res.data.remark || "";
- modalData.url_number = res.data.url_number || "";
- modalData.overdraft = res.data.overdraft;
- modalData.num_formula = res.data.num_formula;
- // 金额=(产品单价)*核算数量 +附加金额 + 超标金额
- modalData.price =
- (modalData.unit_price * 1 || 0) * (modalData.num * 1 || 1) +
- (modalData.over_price * 1 || 0) +
- (modalData.ext_price * 1 || 0);
- modalData.price = modalData.price.toFixed(2);
- // modalData.model = res.data.model || ''
- // modalData.same_process_compare = JSON.parse(JSON.stringify(res.data.intermediate.same_process || []))
- modalData.selected_ids = [];
- modalData.part = res.data.part;
- modalData.part.forEach((element, index) => {
- if (!element.is_metal) {
- element.isChoosed = true;
- element.part_detail = element.sub_part;
- //展示非拆分部件
- element.isBP = true;
- // 默认替换部件
- element.change_id = element.change[0].id;
- //存计算公式
- element.long ? "" : (element.long = 0);
- element.wide ? "" : (element.wide = 0);
- element.high ? "" : (element.high = 0);
- element.longCalc = JSON.parse(JSON.stringify(element.long));
- element.wideCalc = JSON.parse(JSON.stringify(element.wide));
- element.highCalc = JSON.parse(JSON.stringify(element.high));
- element.part_detail.forEach((elem) => {
- elem.org_num = JSON.parse(JSON.stringify(elem.num));
- elem.material_detail_id = 0;
- elem.material_detail_title =
- elem.material_detail_list[0].title;
- elem.material_detail_id =
- elem.material_detail_list[0].material_detail_id;
- elem.material_detail_num = elem.num || 0;
- elem.material_detail_org_num = JSON.parse(
- JSON.stringify(elem.num || 0)
- );
- elem.long ? "" : (elem.long = 0);
- elem.wide ? "" : (elem.wide = 0);
- elem.high ? "" : (elem.high = 0);
- elem.longCalc = JSON.parse(JSON.stringify(elem.long || ""));
- elem.wideCalc = JSON.parse(JSON.stringify(elem.wide || ""));
- elem.highCalc = JSON.parse(JSON.stringify(elem.high || ""));
- elem.material_detail_list.forEach((el) => {
- el.long = el.long || "0";
- el.wide = el.wide || "0";
- el.high = el.high || "0";
- });
- });
- }
- });
- //测量字段
- modalData.measure = res.data.measure;
- modalData.measure.forEach((element) => {
- element.value = "";
- element.measureCalc = JSON.parse(JSON.stringify(element.e_title));
- });
- //工艺属性
- modalData.process = [];
- this.axios({
- method: "get",
- url: "/api/bpp_list",
- }).then((re) => {
- re.data.forEach((element) => {
- for (const key in res.data.process.title) {
- const ele = res.data.process.title[key];
- if (element.name == ele) {
- if (this.route_id_at_copy) {
- const compare_copy = res.data.process.list.filter(
- (item) => item.id == this.route_id_at_copy
- );
- if (compare_copy && compare_copy.length > 0) {
- modalData.process.push({
- key: key,
- title: ele,
- value: compare_copy[0].detail[key] * 1,
- processList: element.cld,
- });
- } else {
- modalData.process.push({
- key: key,
- title: ele,
- value: "",
- processList: element.cld,
- });
- }
- } else {
- const compare = res.data.process.list.filter(
- (item) => item.detail[key] == this.pre_process_obj[key]
- );
- if (compare.length > 0) {
- modalData.process.push({
- key: key,
- title: ele,
- value: this.pre_process_obj[key] * 1,
- processList: element.cld,
- });
- } else {
- modalData.process.push({
- key: key,
- title: ele,
- value: "",
- processList: element.cld,
- });
- }
- }
- }
- }
- });
- modalData.part.forEach((element) => {
- if (!element.is_metal) {
- //赋值默认工艺属性
- element.process = JSON.parse(JSON.stringify(re.data));
- element.process.forEach((elem, index) => {
- for (const key in res.data.process.title) {
- const ele = res.data.process.title[key];
- if (elem.name == ele) {
- elem.procedure_property = this.pre_process_obj[key] * 1;
- if (!element.procedure_properties) {
- element.procedure_properties = [];
- }
- element.procedure_properties[index] =
- this.pre_process_obj[key] * 1;
- }
- }
- });
- }
- });
- // 是否有上一个的工艺属性ID
- // 因为现在出现2个入口 方法弃用
- // 在列表复制时需要被复制对象的工艺,在新增复制时同理
- // this.chooseLastRouteId(modalData, res);
- this.$forceUpdate();
- });
- }
- });
- }
- },
- changeEditProduct(row) {
- if (row) {
- let id = row ? row.value : this.productList[0].id;
- this.modalData.type_name = row.label;
- this.modalData.title = row.label;
- this.axios("/api/order_get_product_detail_new", {
- params: { product_id: id, custom_id: this.info.custom_id },
- }).then((res) => {
- if (res.code == 200) {
- this.process_match_list = res.data.process.list;
- // 赋值默认工艺路线
- let _temp_obj = {};
- if (res.data.process.list.length > 1) {
- for (const key in res.data.process.list[0].detail) {
- res.data.process.list.reduce((pre, cur) => {
- if (_temp_obj[key] == "") {
- return pre;
- } else {
- if (pre.detail[key] == cur.detail[key]) {
- _temp_obj[key] = pre.detail[key];
- return pre;
- } else {
- _temp_obj[key] = "";
- return pre;
- }
- }
- });
- }
- } else {
- _temp_obj = res.data.process.list[0].detail;
- }
- this.pre_process_obj = JSON.parse(JSON.stringify(_temp_obj));
- this.modalData.url = res.data.url;
- this.modalData.route_id = res.data.process.list[0].id;
- this.modalData.total_num = res.data.total_num || 1;
- this.modalData.ext_price = res.data.ext_price || 0;
- this.modalData.unit_price = res.data.price || 0;
- this.modalData.num = res.data.num || 1;
- this.modalData.over_price = res.data.over_price || 0;
- this.modalData.position = res.data.position || "";
- this.modalData.unit = res.data.unit || "";
- this.modalData.remark = res.data.remark || "";
- this.modalData.url_number = res.data.url_number || "";
- this.modalData.overdraft = res.data.overdraft;
- this.modalData.num_formula = res.data.num_formula;
- // 金额=(产品单价)*核算数量 +附加金额 + 超标金额
- this.modalData.price =
- (this.modalData.unit_price * 1 || 0) *
- (this.modalData.num * 1 || 1) +
- (this.modalData.over_price * 1 || 0) +
- (this.modalData.ext_price * 1 || 0);
- this.modalData.price = this.modalData.price.toFixed(2);
- // this.modalData.model = res.data.model || ''
- // this.modalData.same_process_compare = JSON.parse(JSON.stringify(res.data.intermediate.same_process || []))
- this.modalData.selected_ids = [];
- this.modalData.part = res.data.part;
- // 数据第一次通过接口获取
- this.modalData.get_first_data = false;
- this.modalData.part.forEach((element, index) => {
- if (!element.is_metal) {
- element.isChoosed = true;
- element.part_detail = element.sub_part;
- //展示非拆分部件
- element.isBP = true;
- // 默认替换部件
- element.change_id = element.change[0].id;
- //存计算公式
- element.long ? "" : (element.long = 0);
- element.wide ? "" : (element.wide = 0);
- element.high ? "" : (element.high = 0);
- element.longCalc = JSON.parse(JSON.stringify(element.long));
- element.wideCalc = JSON.parse(JSON.stringify(element.wide));
- element.highCalc = JSON.parse(JSON.stringify(element.high));
- element.part_detail.forEach((elem) => {
- elem.material_detail_id = 0;
- elem.material_detail_title =
- elem.material_detail_list[0].title;
- elem.material_detail_id =
- elem.material_detail_list[0].material_detail_id;
- elem.org_num = JSON.parse(JSON.stringify(elem.num));
- elem.material_detail_org_num = JSON.parse(
- JSON.stringify(elem.num || 0)
- );
- elem.material_detail_num = elem.num || 0;
- elem.long ? "" : (elem.long = 0);
- elem.wide ? "" : (elem.wide = 0);
- elem.high ? "" : (elem.high = 0);
- elem.longCalc = JSON.parse(JSON.stringify(elem.long || ""));
- elem.wideCalc = JSON.parse(JSON.stringify(elem.wide || ""));
- elem.highCalc = JSON.parse(JSON.stringify(elem.high || ""));
- elem.material_detail_list.forEach((el) => {
- el.long = el.long || "0";
- el.wide = el.wide || "0";
- el.high = el.high || "0";
- });
- });
- }
- });
- //测量字段
- this.modalData.measure = res.data.measure;
- this.modalData.measure.forEach((element) => {
- element.value = "";
- element.measureCalc = JSON.parse(JSON.stringify(element.e_title));
- });
- //工艺属性
- this.modalData.process = [];
- this.axios({
- method: "get",
- url: "/api/bpp_list",
- }).then((re) => {
- re.data.forEach((element) => {
- for (const key in res.data.process.title) {
- const ele = res.data.process.title[key];
- if (element.name == ele) {
- const compare = res.data.process.list.filter(
- (item) => item.detail[key] == this.pre_process_obj[key]
- );
- if (compare.length > 0) {
- this.modalData.process.push({
- key: key,
- title: ele,
- value: this.pre_process_obj[key] * 1,
- processList: element.cld,
- });
- } else {
- this.modalData.process.push({
- key: key,
- title: ele,
- value: "",
- processList: element.cld,
- });
- }
- }
- }
- });
- this.modalData.part.forEach((element) => {
- if (!element.is_metal) {
- //赋值默认工艺属性
- element.process = JSON.parse(JSON.stringify(re.data));
- element.process.forEach((elem, index) => {
- for (const key in res.data.process.title) {
- const ele = res.data.process.title[key];
- if (elem.name == ele) {
- elem.procedure_property = this.pre_process_obj[key] * 1;
- if (!element.procedure_properties) {
- element.procedure_properties = [];
- }
- element.procedure_properties[index] =
- this.pre_process_obj[key] * 1;
- }
- }
- });
- }
- });
- // 是否有上一个的工艺属性ID
- this.chooseLastRouteId(this.modalData, res);
- this.$forceUpdate();
- });
- }
- });
- }
- },
- chooseLastRouteId(modalData, res) {
- // 匹配
- modalData.process.forEach((element) => {
- for (const key in this.pre_process_obj) {
- const item = this.pre_process_obj[key];
- const compare = res.data.process.list.filter(
- (_process) => _process.detail[key] == this.pre_process_obj[key]
- );
- if (element.key == key) {
- if (compare.length > 0) {
- element.value = item * 1;
- } else {
- element.value = "";
- }
- }
- }
- });
- this.$forceUpdate();
- },
- changeProductOnEdit(row, n) {
- if (row) {
- this.modalData.type_name = row.label;
- this.modalData.title = row.label;
- this.axios("/api/order_get_product_detail_new", {
- params: {
- product_id: row.product_id,
- custom_id: this.info.custom_id,
- },
- }).then((res) => {
- if (res.code == 200) {
- this.process_match_list = res.data.process.list;
- //获取产品
- this.modalData.total_num = res.data.total_num || 1;
- this.modalData.ext_price = res.data.ext_price || 0;
- this.modalData.unit_price = res.data.price || 0;
- this.modalData.num = res.data.num || 1;
- this.modalData.over_price = res.data.over_price || 0;
- this.modalData.position = res.data.position | "";
- this.modalData.unit = res.data.unit || "";
- this.modalData.remark = res.data.remark || "";
- this.modalData.url = res.data.url || [];
- this.modalData.url_number = res.data.url_number || "";
- this.modalData.overdraft = res.data.overdraft;
- // this.modalData.same_process_compare = JSON.parse(JSON.stringify(res.data.intermediate.same_process || []))
- this.modalData.selected_ids = [];
- this.modalData.customize = row.customize;
- this.modalData.get_first_data = false;
- this.modalData.part = res.data.part;
- this.modalData.part.forEach((element) => {
- if (!element.is_metal) {
- element.isChoosed = true;
- element.part_detail = element.sub_part;
- // 数据第一次通过接口获取
- //展示非拆分部件
- element.isBP = true;
- //存计算公式
- element.longCalc = JSON.parse(
- JSON.stringify(element.long || "")
- );
- element.wideCalc = JSON.parse(
- JSON.stringify(element.wide || "")
- );
- element.highCalc = JSON.parse(
- JSON.stringify(element.high || "")
- );
- element.part_detail.forEach((elem) => {
- elem.org_num = JSON.parse(JSON.stringify(elem.num));
- elem.material_detail_id = 0;
- elem.material_detail_title =
- elem.material_detail_list[0].title;
- elem.material_detail_num = elem.num || 0;
- elem.material_detail_org_num = JSON.parse(
- JSON.stringify(elem.num || 0)
- );
- elem.longCalc = JSON.parse(JSON.stringify(elem.long || ""));
- elem.wideCalc = JSON.parse(JSON.stringify(elem.wide || ""));
- elem.highCalc = JSON.parse(JSON.stringify(elem.high || ""));
- elem.material_detail_list.forEach((el) => {
- el.long = el.long || "0";
- el.wide = el.wide || "0";
- el.high = el.high || "0";
- });
- });
- }
- });
- //测量字段
- this.modalData.measure = res.data.measure;
- this.modalData.measure.forEach((element) => {
- element.measureCalc = JSON.parse(JSON.stringify(element.e_title));
- });
- //工艺属性
- this.modalData.process = [];
- this.axios({
- method: "get",
- url: "/api/bpp_list",
- }).then((re) => {
- this.modalData.part.forEach((element) => {
- if (!element.is_metal) {
- element.process = JSON.parse(JSON.stringify(re.data));
- element.process.forEach((elem) => {
- elem.procedure_property = "";
- });
- }
- });
- re.data.forEach((element) => {
- for (const key in res.data.process.title) {
- const ele = res.data.process.title[key];
- if (element.name == ele) {
- element.cld.forEach((elem) => {
- elem.isDisabled = false;
- });
- this.modalData.process.push({
- key: key,
- title: ele,
- value: "",
- processList: element.cld,
- });
- }
- }
- });
- (this.type == 2 || this.type == 3) &&
- this.getEditData(this.modalData, this.editForm);
- this.showEditProduct = true;
- this.$forceUpdate();
- });
- }
- });
- }
- },
- handlePartChange(row, measure, product_num) {
- if (row.change_id) {
- let cur = row.change.filter((item) => item.id == row.change_id);
- row.part_id = cur[0].part_id;
- row.high = cur[0].high;
- row.highCalc = JSON.parse(JSON.stringify(row.high));
- row.long = cur[0].long;
- row.longCalc = JSON.parse(JSON.stringify(row.long));
- row.wide = cur[0].wide;
- row.wideCalc = JSON.parse(JSON.stringify(row.wide));
- row.part_detail = cur[0].sub_part;
- row.part_detail.forEach((elem) => {
- elem.longCalc = JSON.parse(JSON.stringify(elem.long || ""));
- elem.wideCalc = JSON.parse(JSON.stringify(elem.wide || ""));
- elem.highCalc = JSON.parse(JSON.stringify(elem.high || ""));
- elem.org_num = JSON.parse(JSON.stringify(elem.num));
- elem.material_detail_org_num = JSON.parse(
- JSON.stringify(elem.num || 0)
- );
- elem.num =
- ((elem.material_detail_org_num || elem.num) * product_num) | 0;
- elem.material_detail_num = elem.material_detail_org_num * product_num;
- });
- measure.forEach((element) => {
- if ((row.long || "").indexOf(element.measureCalc) != -1) {
- if (typeof (element.value * 1) == "number") {
- row.long = row.long.replace(
- new RegExp(element.measureCalc, "g"),
- element.value
- );
- row.long = eval(row.long);
- row.long += "";
- }
- }
- if ((row.wide || "").indexOf(element.measureCalc) != -1) {
- if (typeof (element.value * 1) == "number") {
- row.wide = row.wide.replace(
- new RegExp(element.measureCalc, "g"),
- element.value
- );
- row.wide = eval(row.wide);
- row.wide += "";
- }
- }
- if ((row.high || "").indexOf(element.measureCalc) != -1) {
- if (typeof (element.value * 1) == "number") {
- row.high = row.high.replace(
- new RegExp(element.measureCalc, "g"),
- element.value
- );
- row.high = eval(row.high);
- row.high += "";
- }
- }
- row.part_detail.forEach((item) => {
- item.num =
- row.material_detail_org_num || item.material_detail_org_num;
- if ((item.long || "").indexOf(element.measureCalc) != -1) {
- if (typeof (element.value * 1) == "number") {
- item.long = item.long.replace(
- new RegExp(element.measureCalc, "g"),
- element.value
- );
- item.long = eval(item.long);
- item.long += "";
- }
- }
- if ((item.wide || "").indexOf(element.measureCalc) != -1) {
- if (typeof (element.value * 1) == "number") {
- item.wide = item.wide.replace(
- new RegExp(element.measureCalc, "g"),
- element.value
- );
- item.wide = eval(item.wide);
- item.wide += "";
- }
- }
- if ((item.high || "").indexOf(element.measureCalc) != -1) {
- if (typeof (element.value * 1) == "number") {
- item.high = item.high.replace(
- new RegExp(element.measureCalc, "g"),
- element.value
- );
- item.high = eval(item.high);
- item.high += "";
- }
- }
- item.material_detail_list.forEach((it) => {
- it.long = it.long || "0";
- it.wide = it.wide || "0";
- it.high = it.high || "0";
- });
- item.long = item.long || "0";
- item.wide = item.wide || "0";
- item.high = item.high || "0";
- item.material_detail_title = item.material_detail_list[0].title;
- item.material_detail_id =
- item.material_detail_list[0].material_detail_id;
- item.material_detail_org_num = item.num || 0;
- });
- });
- this.$forceUpdate();
- }
- },
- handleProductNumChange(e, product) {
- product.part.map((element) => {
- element.part_detail.map((elem) => {
- elem.material_detail_num =
- e.target.value * elem.material_detail_org_num;
- });
- });
- product.num = product.total_num = e.target.value;
- product.price =
- (product.unit_price * 1 || 0) * (product.num * 1 || 1) +
- (product.over_price * 1 || 0) +
- (product.ext_price * 1 || 0);
- product.price = product.price.toFixed(2);
- this.$forceUpdate();
- },
- handleProductUnit_priceChange(e, product) {
- product.unit_price = e.target.value * 1;
- product.price =
- (product.unit_price * 1 || 0) * (product.num * 1 || 1) +
- (product.over_price * 1 || 0) +
- (product.ext_price * 1 || 0);
- product.price = product.price.toFixed(2);
- this.$forceUpdate();
- },
- handleProductExt_priceChange(e, product) {
- product.ext_price = e.target.value * 1;
- product.price =
- (product.unit_price * 1 || 0) * (product.num * 1 || 1) +
- (product.over_price * 1 || 0) +
- (product.ext_price * 1 || 0);
- product.price = product.price.toFixed(2);
- this.$forceUpdate();
- },
- handleProductOver_priceChange(e, product) {
- product.over_price = e.target.value;
- product.price =
- (product.unit_price * 1 || 0) * (product.num * 1 || 1) +
- (product.over_price * 1 || 0) +
- (product.ext_price * 1 || 0);
- product.price = product.price.toFixed(2);
- this.$forceUpdate();
- },
- handleGetProductMeasure(val, index, product, ele) {
- if (val) {
- let list = product.process.map((item) => {
- return { type_id: item.key, value: item.value || "" };
- });
- ele.processList = [];
- this.axios({
- method: "post",
- url: "/api/order_get_product_process",
- data: {
- product_id: product.product_id,
- type_id: ele.key,
- list,
- },
- }).then((res) => {
- if (res.code == 200) {
- ele.processList = res.data;
- this.$forceUpdate();
- }
- });
- }
- },
- handleProductMeasureBlur(e, product, measure_detail) {
- try {
- measure_detail.value = eval(e.target.value);
- } catch (error) {
- console.log("error :>> ", error);
- }
- this.$forceUpdate();
- },
- handleProductMeasureChange(e, product, measure_detail) {
- if (e.target.value) {
- let cur_measure = measure_detail.measureCalc;
- let cur_value = measure_detail.value;
- product.over_price = 0;
- //当前测量字段 L W H 修改部件测量字段
- product.part.forEach((element) => {
- if (!element.is_metal) {
- //处理公式
- if (element.highCalc.indexOf(cur_measure) != -1) {
- element.high = element.highCalc.replace(
- new RegExp(cur_measure, "g"),
- cur_value || ""
- );
- }
- if (element.longCalc.indexOf(cur_measure) != -1) {
- element.long = element.longCalc.replace(
- new RegExp(cur_measure, "g"),
- cur_value || ""
- );
- }
- if (element.wideCalc.indexOf(cur_measure) != -1) {
- element.wide = element.wideCalc.replace(
- new RegExp(cur_measure, "g"),
- cur_value || ""
- );
- }
- //判断测量字段公式中是否还含有字母
- let flag_high = false;
- let flag_long = false;
- let flag_wide = false;
- for (let index = 0; index < product.measure.length; index++) {
- const item = product.measure[index];
- if (element.high.indexOf(item.measureCalc) != -1) {
- flag_high = true;
- }
- if (element.long.indexOf(item.measureCalc) != -1) {
- flag_long = true;
- }
- if (element.wide.indexOf(item.measureCalc) != -1) {
- flag_wide = true;
- }
- }
- if (flag_high) {
- element.high = JSON.parse(JSON.stringify(element.high));
- } else {
- element.high = eval(element.high);
- element.high += "";
- }
- if (flag_long) {
- element.long = JSON.parse(JSON.stringify(element.long));
- } else {
- element.long = eval(element.long);
- element.long += "";
- }
- if (flag_wide) {
- element.wide = JSON.parse(JSON.stringify(element.wide));
- } else {
- element.wide = eval(element.wide);
- element.wide += "";
- }
- element.part_detail.forEach((elem) => {
- if (!elem.high) {
- } else if (elem.highCalc.indexOf(cur_measure) != -1) {
- elem.high = elem.highCalc.replace(
- new RegExp(cur_measure, "g"),
- cur_value || ""
- );
- }
- if (!elem.long) {
- } else if (elem.longCalc.indexOf(cur_measure) != -1) {
- elem.long = elem.longCalc.replace(
- new RegExp(cur_measure, "g"),
- cur_value || ""
- );
- }
- if (!elem.wide) {
- } else if (elem.wideCalc.indexOf(cur_measure) != -1) {
- elem.wide = elem.wideCalc.replace(
- new RegExp(cur_measure, "g"),
- cur_value || ""
- );
- }
- //判断测量字段公式中是否还含有字母
- let _flag_high = false;
- let _flag_long = false;
- let _flag_wide = false;
- // Number类型无法使用indexOf
- elem.high += "";
- elem.long += "";
- elem.wide += "";
- for (let index = 0; index < product.measure.length; index++) {
- const item = product.measure[index];
- if (!elem.high) {
- } else if (elem.high.indexOf(item.measureCalc) != -1) {
- _flag_high = true;
- }
- if (!elem.long) {
- } else if (elem.long.indexOf(item.measureCalc) != -1) {
- _flag_long = true;
- }
- if (!elem.wide) {
- } else if (elem.wide.indexOf(item.measureCalc) != -1) {
- _flag_wide = true;
- }
- }
- if (_flag_high) {
- elem.high = JSON.parse(JSON.stringify(elem.high));
- } else {
- elem.high = eval(elem.high);
- elem.high += "";
- elem.high == "null" && (elem.high = 0);
- }
- if (_flag_long) {
- elem.long = JSON.parse(JSON.stringify(elem.long));
- } else {
- elem.long = eval(elem.long);
- elem.long += "";
- elem.long == "null" && (elem.long = 0);
- }
- if (_flag_wide) {
- elem.wide = JSON.parse(JSON.stringify(elem.wide));
- } else {
- elem.wide = eval(elem.wide);
- elem.wide += "";
- elem.wide == "null" && (elem.wide = 0);
- }
- });
- }
- });
- product.part.map((item) => {
- const cur_part = product.overdraft.filter(
- (v) => v.part_id == item.part_id
- );
- cur_part.length > 0 &&
- cur_part.map((element) => {
- // 1 高 2 宽 3 厚
- if (
- element.type == 1 &&
- item.long > element.min &&
- item.long < element.max
- ) {
- item.formula_temp = JSON.parse(JSON.stringify(element.formula));
- item.formula_temp = item.formula_temp.replace(/H/g, item.long);
- item.formula_temp = item.formula_temp.replace(/W/g, item.wide);
- item.formula_temp = item.formula_temp.replace(/T/g, item.high);
- item.formula_value = eval(item.formula_temp);
- product.over_price += item.formula_value * 1 || 0;
- }
- if (
- element.type == 2 &&
- item.wide > element.min &&
- item.wide < element.max
- ) {
- item.formula_temp = JSON.parse(JSON.stringify(element.formula));
- item.formula_temp = item.formula_temp.replace(/H/g, item.long);
- item.formula_temp = item.formula_temp.replace(/W/g, item.wide);
- item.formula_temp = item.formula_temp.replace(/T/g, item.high);
- item.formula_value = eval(item.formula_temp);
- product.over_price += item.formula_value * 1 || 0;
- }
- if (
- element.type == 3 &&
- item.high > element.min &&
- item.high < element.max
- ) {
- item.formula_temp = JSON.parse(JSON.stringify(element.formula));
- item.formula_temp = item.formula_temp.replace(/H/g, item.long);
- item.formula_temp = item.formula_temp.replace(/W/g, item.wide);
- item.formula_temp = item.formula_temp.replace(/T/g, item.high);
- item.formula_value = eval(item.formula_temp);
- product.over_price += item.formula_value * 1 || 0;
- }
- });
- });
- //修改核算数量
- // 如果没有核算数量公式,核算数量取产品数量
- if (product.num_formula == "") {
- product.total_num = product.num;
- } else {
- product.num_formula_temp = JSON.parse(
- JSON.stringify(product.num_formula)
- );
- product.measure.forEach((element) => {
- if (product.num_formula.indexOf(element.e_title) != -1) {
- product.num_formula_temp = product.num_formula_temp.replace(
- new RegExp(element.e_title, "g"),
- element.value || 0
- );
- }
- });
- product.num = eval(product.num_formula_temp);
- product.num = product.num.toFixed(2);
- product.over_price = product.over_price.toFixed(2);
- product.price =
- (product.unit_price * 1 || 0) * (product.num * 1 || 1) +
- (product.over_price * 1 || 0) +
- (product.ext_price * 1 || 0);
- product.price = product.price.toFixed(2);
- }
- this.$forceUpdate();
- }
- },
- handleSubpartNumChange(e, row) {
- row.material_detail_num = e.target.value;
- this.$forceUpdate();
- },
- //修改材质/颜/工艺的disbled
- handleProductProcessChange(e, n, modelData, ele) {
- if (e) {
- this.pre_process_obj[n + 1] = e.value;
- if (!modelData.procedure_properties_str) {
- modelData.procedure_properties_str = [];
- }
- modelData.procedure_properties_str[ele.key - 1] = e.label;
- if (!modelData.procedure_properties) {
- modelData.procedure_properties = [];
- }
- modelData.procedure_properties[ele.key - 1] = +e.value;
- let isStart = true;
- let match_list = []; //当前选中的list
- this.process_match_list.map((item) => {
- if (item.detail[ele.key] == e.value) {
- match_list.push(item.detail);
- }
- });
- this.process_Select_match_list = match_list;
- modelData.process.forEach((element) => {
- if (element.value == "") {
- isStart = false;
- }
- });
- //匹配工艺路线
- if (isStart) {
- let _target = [];
- let _sorce = JSON.parse(JSON.stringify(this.process_match_list));
- modelData.process.forEach((element) => {
- _target.push(element.value);
- });
- _sorce.forEach((element) => {
- let _str = [];
- for (const key in element.detail) {
- const item = element.detail[key];
- _str.push(item);
- }
- element.new_detail = _str.join(",");
- });
- let target = _target.join(",");
- _sorce.forEach((element) => {
- if (element.new_detail == target) {
- modelData.route_id = element.id;
- }
- });
- }
- // 产品 - 部件 工艺属性联动
- modelData.part.forEach((element) => {
- if (!element.is_metal) {
- element.process.forEach((elem) => {
- if (elem.name == ele.title) {
- elem.procedure_property = e.value;
- if (!element.procedure_properties) {
- element.procedure_properties = [];
- }
- if (!element.procedure_properties_str) {
- element.procedure_properties_str = [];
- }
- element.procedure_properties[n] = e.value;
- element.procedure_properties_str[n] = e.label;
- }
- });
- }
- });
- }
- this.$forceUpdate();
- },
- handleMaterialChange(val, row) {
- if (val) {
- let tempRow = row.material_detail_list.filter(
- (item) => item.material_detail_id == val
- );
- row.material_detail_title = tempRow[0].title;
- // row.material_detail_id = tempRow.length > 0 ? tempRow[0].id : 0
- this.$forceUpdate();
- }
- },
- handleRadioClick(row) {
- row.isChoosed = !row.isChoosed;
- this.$forceUpdate();
- },
- handlePartProcessChange(val, n, row) {
- if (!row.procedure_properties) {
- row.procedure_properties = [];
- }
- if (!row.procedure_properties_str) {
- row.procedure_properties_str = [];
- }
- if (val) {
- row.procedure_properties[n] = val.value;
- row.procedure_properties_str[n] = val.label;
- }
- this.$forceUpdate();
- },
- looks(img) {
- const array = [{ img_url: img }];
- this.$previewImg({
- list: array,
- baseUrl: this.$store.state.ip,
- baseImgField: "img_url",
- baseTitleField: "",
- });
- },
- delItems(n, arr) {
- arr.splice(n, 1);
- this.$forceUpdate();
- },
- changeIpt(e, row) {
- if (this.info.img.length >= 3) {
- return this.$Message.warning("图片最多上传3张");
- }
- let file = e.target.files[0];
- this.postImg(file, row);
- e.target.value = null;
- },
- postImg(file, row) {
- let formData = new FormData();
- formData.append("file", file);
- this.axios.post("/api/upload_pic", formData).then((res) => {
- row.push(res.data.url);
- this.$forceUpdate();
- });
- },
- },
- };
- </script>
- <style lang="scss" scoped>
- .product-img {
- padding-top: 10px;
- }
- .product-add {
- padding: 10px 0;
- display: flex;
- flex-wrap: wrap;
- .ipt {
- position: absolute;
- width: 100%;
- height: 100%;
- opacity: 0;
- cursor: pointer;
- outline: none;
- top: 0;
- left: 0;
- }
- .add-items {
- width: 120px;
- height: 120px;
- border: 1px dotted #e7e7e7;
- border-radius: 5px;
- display: flex;
- justify-content: center;
- align-items: center;
- overflow: hidden;
- position: relative;
- flex-direction: column;
- background: #f4f5f7;
- .item {
- width: 46px;
- height: 46px;
- background: #3764ff;
- opacity: 0.6;
- display: flex;
- justify-content: center;
- align-items: center;
- border-radius: 50%;
- color: #fff;
- }
- }
- .items {
- width: 120px;
- height: 120px;
- margin-bottom: 10px;
- display: flex;
- justify-content: center;
- align-items: center;
- background: #e7e7e7;
- margin-right: 10px;
- border-radius: 5px;
- position: relative;
- img {
- max-width: 108px;
- max-height: 108px;
- }
- }
- }
- .delete-img {
- position: absolute;
- right: 0px;
- top: 0px;
- color: red;
- }
- /deep/.ivu-tooltip-rel {
- width: 200px;
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap;
- }
- .page-edit {
- overflow: hidden;
- overflow-y: auto;
- position: relative;
- top: 20px;
- height: 85%;
- padding-bottom: 20px;
- /deep/ .ivu-form-item {
- min-width: 300px;
- }
- }
- .auto-width {
- width: 200px;
- }
- .items {
- // box-shadow: 0 2px 7px rgba(0, 0, 0, 0.15);
- border-color: transparent;
- position: relative;
- border-radius: 5px;
- .items-header {
- padding: 10px 20px;
- display: flex;
- justify-content: space-between;
- align-items: center;
- border-bottom: 1px solid #f4f4f4;
- .header-left {
- span {
- margin-left: 10px;
- }
- }
- }
- .form-item {
- padding: 20px;
- }
- }
- .modal-scroll {
- height: 600px;
- overflow: scroll;
- }
- .modal-items {
- border-radius: 5px;
- border: 1px solid #dedede;
- padding: 0px 10px;
- margin-bottom: 40px;
- }
- .modal-footer-button {
- display: flex;
- justify-content: flex-end;
- padding: 10px 0;
- }
- .items-table {
- width: 100%;
- overflow-x: scroll;
- }
- /deep/ .ivu-table-wrapper {
- overflow: visible;
- color: red;
- } //穿透iview
- .original-part {
- padding-top: 20px;
- }
- .column-li {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 2px 5px;
- }
- .hierarchy {
- display: flex;
- justify-content: flex-start;
- align-items: flex-start;
- flex-wrap: wrap;
- .radio-g {
- padding: 10px 0;
- width: 700px;
- display: flex;
- justify-content: flex-start;
- // align-items: flex-start;
- flex-wrap: wrap;
- .radio-us {
- background: #f4f5f7;
- padding: 5px 20px;
- margin-right: 18px;
- margin-bottom: 10px;
- color: #999999;
- border-radius: 15px;
- border: 1px solid #dedede;
- cursor: pointer;
- }
- .radio-us-foc {
- color: #3764ff;
- background: #fff;
- border: 1px solid #3764ff;
- }
- }
- }
- .nav-product {
- width: 100%;
- height: 50px;
- display: flex;
- align-items: center;
- }
- /deep/.ivu-poptip-inner {
- max-width: 90%;
- // display: flex;
- // justify-content: center;
- }
- /deep/.ivu-poptip-body {
- max-height: 600px;
- overflow: hidden;
- overflow-y: auto;
- }
- .content {
- .content_header {
- display: flex;
- justify-content: space-between;
- padding: 0 10px;
- }
- }
- .modal_product_info {
- background-color: #f5f5f5;
- border-radius: 10px;
- padding: 10px;
- margin-bottom: 10px;
- .modal_product_info_title {
- font-size: 20px;
- font-weight: 700;
- margin-bottom: 10px;
- }
- .modal_product_info_content {
- .part_detail_form {
- /deep/.ivu-form {
- display: flex;
- justify-content: flex-start;
- flex-wrap: wrap;
- }
- /deep/ .ivu-form-item {
- display: inline-block;
- min-width: 150px;
- }
- }
- }
- .modal_product {
- /deep/.ivu-form {
- display: flex;
- justify-content: flex-start;
- flex-wrap: wrap;
- }
- /deep/ .ivu-form-item {
- display: inline-block;
- min-width: 200px;
- }
- }
- .modal_parts {
- /deep/.ivu-form {
- display: flex;
- justify-content: flex-start;
- flex-wrap: wrap;
- }
- /deep/ .ivu-form-item {
- display: inline-block;
- min-width: 80px;
- }
- }
- .modal_extra {
- /deep/.ivu-form {
- display: flex;
- justify-content: flex-start;
- flex-wrap: wrap;
- }
- /deep/ .ivu-form-item {
- display: inline-block;
- min-width: 100px;
- }
- }
- }
- /deep/.ivu-modal-body {
- max-height: 800px;
- }
- .hide_part_detail {
- display: none;
- }
- /deep/.ivu-form-item-content {
- span {
- vertical-align: middle;
- }
- }
- </style>
|