123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626 |
- <!DOCTYPE html><html><head>
- <title>app技师端</title>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
-
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css">
-
-
- <script src="https://cdn.jsdelivr.net/npm/mermaid@11.1.1/dist/mermaid.min.js"></script>
-
-
- <style>
- code[class*=language-],pre[class*=language-]{color:#333;background:0 0;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.4;-moz-tab-size:8;-o-tab-size:8;tab-size:8;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:.8em;overflow:auto;border-radius:3px;background:#f5f5f5}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal;background:#f5f5f5}.token.blockquote,.token.comment{color:#969896}.token.cdata{color:#183691}.token.doctype,.token.macro.property,.token.punctuation,.token.variable{color:#333}.token.builtin,.token.important,.token.keyword,.token.operator,.token.rule{color:#a71d5d}.token.attr-value,.token.regex,.token.string,.token.url{color:#183691}.token.atrule,.token.boolean,.token.code,.token.command,.token.constant,.token.entity,.token.number,.token.property,.token.symbol{color:#0086b3}.token.prolog,.token.selector,.token.tag{color:#63a35c}.token.attr-name,.token.class,.token.class-name,.token.function,.token.id,.token.namespace,.token.pseudo-class,.token.pseudo-element,.token.url-reference .token.variable{color:#795da3}.token.entity{cursor:help}.token.title,.token.title .token.punctuation{font-weight:700;color:#1d3e81}.token.list{color:#ed6a43}.token.inserted{background-color:#eaffea;color:#55a532}.token.deleted{background-color:#ffecec;color:#bd2c00}.token.bold{font-weight:700}.token.italic{font-style:italic}.language-json .token.property{color:#183691}.language-markup .token.tag .token.punctuation{color:#333}.language-css .token.function,code.language-css{color:#0086b3}.language-yaml .token.atrule{color:#63a35c}code.language-yaml{color:#183691}.language-ruby .token.function{color:#333}.language-markdown .token.url{color:#795da3}.language-makefile .token.symbol{color:#795da3}.language-makefile .token.variable{color:#183691}.language-makefile .token.builtin{color:#0086b3}.language-bash .token.keyword{color:#0086b3}pre[data-line]{position:relative;padding:1em 0 1em 3em}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}html body{font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ol,html body>ul{margin-bottom:16px}html body ol,html body ul{padding-left:2em}html body ol.no-list,html body ul.no-list{padding:0;list-style-type:none}html body ol ol,html body ol ul,html body ul ol,html body ul ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:700;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::after,html body code::before{letter-spacing:-.2em;content:'\00a0'}html body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:0 0;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:after,html body pre code:before,html body pre tt:after,html body pre tt:before{content:normal}html body blockquote,html body dl,html body ol,html body p,html body pre,html body ul{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body code,html body pre{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview ul{list-style:disc}.markdown-preview ul ul{list-style:circle}.markdown-preview ul ul ul{list-style:square}.markdown-preview ol{list-style:decimal}.markdown-preview ol ol,.markdown-preview ul ol{list-style-type:lower-roman}.markdown-preview ol ol ol,.markdown-preview ol ul ol,.markdown-preview ul ol ol,.markdown-preview ul ul ol{list-style-type:lower-alpha}.markdown-preview .newpage,.markdown-preview .pagebreak{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center!important}.markdown-preview:not([data-for=preview]) .code-chunk .code-chunk-btn-group{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .status{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .output-div{margin-bottom:16px}.markdown-preview .md-toc{padding:0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link div,.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}.markdown-preview .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0;min-height:100vh}@media screen and (min-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{font-size:14px!important;padding:1em}}@media print{html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc{padding:0 16px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link div,html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 300px / 2);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
- /* Please visit the URL below for more information: */
- /* https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */
- </style>
- <!-- The content below will be included at the end of the <head> element. --><script type="text/javascript">
- document.addEventListener("DOMContentLoaded", function () {
- // your code here
- });
- </script></head><body for="html-export">
-
-
- <div class="crossnote markdown-preview ">
-
- <h1 id="技师端-todolistmd">技师端 <a href="http://todolist.md">todolist.md</a> </h1>
- <h2 id="首页">首页 </h2>
- <ul>
- <li>上下班</li>
- <li>实时刷新定位技师经纬度</li>
- <li>简单版的个人信息
- <ul>
- <li>–Marked-- 工作照、星星等级、昵称、简介</li>
- <li>个人信息修改的静态页
- <ul>
- <li>昵称、手机号(可修改)、身份证、身份证正反面、手持身份证、营业执照、健康证、按摩证、合同</li>
- </ul>
- </li>
- <li>跳转到一个升星规则静态页面</li>
- <li>预览个人主页静态页</li>
- </ul>
- </li>
- <li>昵称 固定位置 所属店铺 星星等级(可跳转星星规则静态页) 工作状态 简介 资质审核状态 已完成订单数目 取消掉打卡 定位</li>
- <li>简介的接单设置信息
- <ul>
- <li>接单时间(排班,讨论) 接单距离 固定接单位置</li>
- <li>修改接单设置静态页
- <ul>
- <li>接单时间(排班,讨论) 客户性别 接单距离 固定接单位置</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>简洁版项目设置
- <ul>
- <li>五大类平台定好的项目
- <ul>
- <li>项目名称 时长 价格</li>
- </ul>
- </li>
- <li>跳转到项目设置静态页</li>
- <li>展示五个项目的简洁版的信息,每个项目��以进行设置(漏了一个静态页UI)</li>
- <li>跳转到单个项目设置的静态页
- <ul>
- <li>项目价格 项目名称 时长 以及项目简单介绍</li>
- <li>设置的信息
- <ul>
- <li>服务客户 服务性别 代金卷设置(10 20 30 50) 免路费设置(单程、双程、全免)</li>
- </ul>
- </li>
- <li>项目描述:时长等等,预约须知</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>我的订单
- <ul>
- <li>待抢订单 待接订单</li>
- <li>可以跳转到订单列表静态页</li>
- <li>补充抢单逻辑 全部显示抢单池数据,分两类 可抢订单排在上面 不可抢订单排在下面</li>
- </ul>
- </li>
- </ul>
- <h2 id="技师注册">技师注册 </h2>
- <ul>
- <li>第一步:用户端申请成为技师填写基本的个人信息</li>
- <li>第二步:客服登录后台管理进行审核
- <ul>
- <li>审核中:申请页面显示正在审核</li>
- <li>拒绝:可以修改个人信息重新申请</li>
- <li>通过:申请页面变成切换身份进入技师端</li>
- </ul>
- </li>
- <li>第三步:进入技师端进行支付宝实名认证、上传按摩证、营业执照、健康证、身份证正反面、手持身份证</li>
- <li>第四步:客服再次对技师进行审核</li>
- <li>第五步:签合同、生活照、工作照、个人简介</li>
- </ul>
- <div class="mermaid">graph TD
- A[用户端申请成为技师] --> B[客服登录后台管理进行审核]
- B -->|审核中| C[申请页面显示正在审核]
- B -->|拒绝| D[可以修改个人信息重新申请]
- B -->|通过| E[申请页面变成切换身份进入技��端]
- E --> F[进入技师端]
- F --> G[支付宝实名认证]
- G --> H[上传按摩证、营业执照、健康证、身份证正反面、手持身份证,上传生活照、工作照、个人简介]
- H --> I[客服再次对技师进行审核]
- I --> J[签合同]
- J --> Z[初始化项目设置、接单设置默认值,后台]
- </div><h2 id="接单流程技师角度">接单流程(技师角度) </h2>
- <h3 id="抢单">抢单 </h3>
- <ol>
- <li>用户:选项目,点下单</li>
- <li>后台:创一个不指定技师的项目订单 未支付 无技师</li>
- <li>技师:点抢单 显示全抢单池,不可抢得置灰,可以抢单的正常显示</li>
- <li>后台:查询某个技师抢单列表的逻辑,接单设置固定位置、距离、排班、实时位置,项目设置中性别、项目是否开通,开启抢单 关闭抢单。按照下单日期倒序排列</li>
- <li>技师: 点击立即抢单 作出个提示 ,显示已抢单,等待反选</li>
- <li>后台:将当前技师和订单加入抢单池,并记录状态 未反选状态</li>
- <li>用户:实时显示所有的抢单技师,点击某个技师</li>
- <li>后台:在抢单池中记录订单用户反选技师</li>
- <li>用户:复用支付流程</li>
- <li>技师:消息通知,消息通知静态页</li>
- </ol>
- <div class="mermaid">sequenceDiagram
- participant Alice
- participant John
- link Alice: Dashboard @ https://dashboard.contoso.com/alice
- link Alice: Wiki @ https://wiki.contoso.com/alice
- link John: Dashboard @ https://dashboard.contoso.com/john
- link John: Wiki @ https://wiki.contoso.com/john
- Alice->>John: Hello John, how are you?
- John-->>Alice: Great!
- Alice-)John: See you later!
- </div><div class="mermaid">sequenceDiagram
- participant 用户
- participant 后台
- participant 技师
- autonumber
- 用户->>+后台: 选项目,点下单
- 后台->>后台: 1创建抢单订单
- 后台-->>用户: 订单创建成功
- 后台->>技师: 显示抢单列表(通过抢单逻辑)
- 技师->>后台: 点击立即抢单,作出提示
- 后台->>后台: 2-技师抢单创建抢单池
- 用户->>后台: 实时显示所有的抢单技师,点击某个技师
- 后台->>后台: 3.用户反选技师
- 后台-->>用户: 订单反选成功
- 用户->>后台: 复用支付流程
- 后台->>技师: 消息通知
- </div><h4 id="1创建抢单订单">1.创建抢单订单 </h4>
- <p><strong>用户端</strong>:<br>
- <img src="assets\170_1725348471_hd.jpeg" alt=""></p>
- <p><strong>参数</strong>:<br>
- - user_id, project_id, address_id</p>
- <p><strong>涉及表和关键列</strong>:</p>
- <ul>
- <li>
- <p>订单表:service_order</p>
- <ul>
- <li>
- <p>必填字段:id,order_sn, user_id, user_name,mobile, address,real_address,address_lng,address_lat, adcode, project_id, project_name, project_sub_title,project_icon,service_price, type,status, created_at, updated_at</p>
- </li>
- <li>
- <p>订单类型字段: type</p>
- <ul>
- <li>0: 正常订单</li>
- <li>1: 抢单订单</li>
- </ul>
- </li>
- <li>
- <p>状态机字段:status</p>
- <ul>
- <li>0: 待抢单</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>
- <p>用户表: member_user</p>
- </li>
- <li>
- <p>用户地址表: member_address</p>
- </li>
- <li>
- <p>项目表: service_project</p>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>根据用户编号和地址编号查询详情数据,通过项目编号获取项目数据。
- <ul>
- <li>用户数据存在,并且用户状态为正常(status = 1)</li>
- <li>地址数据存在</li>
- <li>项目数据存在,并且项目状态为正常(status = 1)</li>
- </ul>
- </li>
- <li>通过已上查询的数据,创建订单数据,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>type = 1</li>
- <li>status = 0</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h4 id="2技师抢单创建抢单池">2.技师抢单创建抢单池 </h4>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id, coach_id</li>
- <li>user_id 通过 Auth::id() 获取</li>
- </ul>
- <p><strong>涉及表和关键列</strong>:</p>
- <ul>
- <li>抢单池:service_order_grab
- <ul>
- <li>必填字段:id, order_id, coach_id, status, created_at, updated_at</li>
- <li>状态字段:status
- <ul>
- <li>0: 参与抢单</li>
- <li>1: 抢单成功</li>
- <li>2: 抢单失败</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,type,status</li>
- <li>订单类型字段: type
- <ul>
- <li>0: 正常订单</li>
- <li>1: 抢单订单</li>
- </ul>
- </li>
- <li>状态字段:status
- <ul>
- <li>0: 待抢单</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>技师:coach_users
- <ul>
- <li>字段:user_id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为待抢单</li>
- <li>订单没有指派技师</li>
- <li>订单类型为抢单订单</li>
- </ul>
- </li>
- <li>通过用户编号查技师,条件是:
- <ul>
- <li>技师数据存在,并且技师状态为正常</li>
- </ul>
- </li>
- <li>通过以上数据,创建订单池,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>订单池状态为参与抢单</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h4 id="3-用户反选技师指定抢单池">3. 用户反选技师(指定抢单池) </h4>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id, coach_id</li>
- <li>user_id 通过 Auth::id() 获取</li>
- </ul>
- <p><strong>涉及表和关键列</strong>:</p>
- <ul>
- <li>抢单池:service_order_grab_pool
- <ul>
- <li>必填字段:id, order_id, coach_id, status, created_at, updated_at</li>
- <li>状态字段:status
- <ul>
- <li>0: 参与抢单</li>
- <li>1: 抢单成功</li>
- <li>2: 抢单失败</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,type,status</li>
- <li>订单类型字段: type
- <ul>
- <li>0: 正常订单</li>
- <li>1: 抢单订单</li>
- </ul>
- </li>
- <li>状态字段:status
- <ul>
- <li>0: 待抢单</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为待抢单</li>
- <li>订单没有指派技师</li>
- <li>订单类型为抢单订单</li>
- </ul>
- </li>
- <li>通过编号查技师,条件是:
- <ul>
- <li>技师数据存在,并且技师状态为正常</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单池,要求:
- <ul>
- <li>技师编号来自参数</li>
- <li>订单池状态改为抢单成功</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <hr>
- <h3 id="服务流程">服务流程 </h3>
- <ol>
- <li>技师:技师接单成功 显示 取消订单 开始出发,点开始出发</li>
- <li>后台:记录技师开始出发时间,经纬度以及当前位置 订单状态变为已出发</li>
- <li>用户:显示该订单技师已出发 取消订单</li>
- <li>技师:点击已到达,并拍照 已到达</li>
- <li>后台:记录技师经纬度和到达时间 订单状态改为已到达</li>
- <li>用户:显示已到达显示服务二维码</li>
- <li>技师:开始服务方式:扫码用户的服务二维码</li>
- <li>后台:订单状态改为 服务中</li>
- <li>用户:显示倒计时,结束订单 确认技师离开 再次购买 删除订单</li>
- <li>技师: 拍单元楼上传 拍照结束 按钮</li>
- <li>后台:订单状态改为 服务结束 已撤离</li>
- </ol>
- <div class="mermaid">sequenceDiagram
- participant 用户
- participant 后台
- participant 技师
- 技师->>后台: 技师接单成功
- 后台->>后台: 1. 技师接单
- 技师-->>技师: 显示 开始出发
- 技师->>后台: 点开始出发
- 后台->>后台: 记录技师开始出发时间,经纬度以及当前位置,订单状态变为已出发[^1]
- 后台-->>用户: 订单状态变为已出发
- 技师->>后台: 点击已到达,并拍照
- 后台->>后台: 记录技师经纬度和到达时间,订单状态改为已到达[^2]
- 后台-->>用户: 订单状态改为已到达
- 用户-->>用户: 显示状态已到达(显示二维码页面)
- 技师->>用户: 扫用户的二维码
- 技师->>后台: 扫码发起开始服务请求
- 后台->>后台: 订单状态改为 服务中[^3]
- 用户-->>用户: 显示服务倒计时(自动跳转服务详情页面)
- 后台-->>用户: 订单状态改为 服务中
- 用户->>后台: 显示倒计时,点击结束订单
- 用户->>后台: 在结束订单页面,点击"确认技师离开"
- 后台-->>技师: 收到订单结束通知
- 技师->>后台: 拍照,点确认撤离
- 后台->>后台: 订单状态改为 服务结束[^4]
- </div><hr>
- <h3 id="接单">接单 </h3>
- <ol>
- <li>用户: 指定技师下单,立即结算</li>
- <li>后台: 创建一个新的订单</li>
- <li>技师: 确认接单</li>
- <li>后台: 改变订单状态为已接单</li>
- <li>用户: 已接单</li>
- <li>技师: 开始出发</li>
- <li>后台: 改变订单状态为已出发</li>
- <li>用户: 技师已出发</li>
- <li>技师: 已到达,拍照</li>
- <li>后台: 改变订单状态为已到达</li>
- <li>用户: 已到达,显示二维码</li>
- <li>技师: 扫描二维码</li>
- <li>后台: 订单状态改为开始服务</li>
- <li>用户: 结束订单</li>
- <li>后台: 订单改为服务结束</li>
- <li>用户: 确认技师离开</li>
- <li>技师: 撤离,拍照</li>
- <li>后台: 自动服务结束</li>
- <li>用户: 确认技师离开</li>
- <li>技师: 撤离,拍照</li>
- </ol>
- <div class="mermaid">sequenceDiagram
- participant 用户
- participant 后台
- participant 技师
- 用户->>后台: 指定技师下单,点击立即结算
- 后台->>后台: 1. 创建订单
- 后台-->>用户: 订单创建成功
- 技师->>后台: 确认接单
- 后台->>后台: 2. 改变订单状态为已接单
- 后台-->>用户: 订单状态变为已接单
- 技师->>后台: 开始出发
- 后台->>后台: 3. 改变订单状态为已出发
- 后台-->>用户: 订单状态变为已出发
- 技师->>后台: 已到达,拍照
- 后台->>后台: 4. 改变订单状态为已到达
- 后台-->>用户: 订单状态变为已到达
- 用户->>用户: 已到达,显示二维码
- 技师->>用户: 扫描二维码
- 后台->>后台: 5. 订单状态改为服务中
- 后台-->>用户: 订单状态变为服务中
- 后台-->>技师: 订单状态变为服务中
- 用户->>后台: 第一种:结束订单
- 后台->>后台: 6. 订单改为服务结束
- 后台-->>技师: 订单改为服务结束
- 后台-->>用户: 订单状态变为服务结束
- 用户->>用户: 确认技师离开
- 用户->>后台: 技师离开
- 后台->>后台: 7.订单更改状态为技师离开
- 技师->>后台: 点击撤离,拍照
- 后台->>后台: 8. 第二种:服务时间结束
- 后台-->>用户: 服务结束
- 后台-->>技师: 服务结束
- 用户->>后台: 确认技师离开
- 技师->>后台: 撤离,拍照
- 后台->>后台: 9. 技师撤离
- 后台-->>用户: 技师撤离 订单完成
- 后台-->>技师: 技师撤离 订单完成
- </div><h4 id="1-创建订单">1. 创建订单 </h4>
- <p><strong>参数</strong>:<br>
- - user_id, project_id, address_id, coach_id, pay_type, is_balance<br>
- - user_id 通过 Auth::id() 获取</p>
- <p><strong>涉及表和关键列</strong>:</p>
- <ul>
- <li>
- <p>订单表:service_order</p>
- <ul>
- <li>
- <p>必填字段:id,order_sn, user_id, user_name,mobile, address,real_address,address_lng,address_lat, adcode, project_id, project_name, project_sub_title,project_icon,service_price, coach_id, pay_type, type,status, created_at, updated_at</p>
- </li>
- <li>
- <p>订单类型字段: type</p>
- <ul>
- <li>0: 正常订单</li>
- <li>1: 抢单订单</li>
- </ul>
- </li>
- <li>
- <p>状态机字段:status</p>
- <ul>
- <li>0: 待抢单</li>
- </ul>
- </li>
- <li>
- <p>支付类型字段:pay_type</p>
- <ul>
- <li>0: 余额支付</li>
- <li>1: 微信支付</li>
- <li>2: 支付宝支付</li>
- </ul>
- </li>
- <li>
- <p>订单类型:type</p>
- <ul>
- <li>0:常规订单</li>
- <li>1:抢单订单</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>
- <p>用户表: member_user</p>
- <ul>
- <li>字段:balance, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>
- <p>用户地址表: member_address</p>
- </li>
- <li>
- <p>项目表: service_project</p>
- <ul>
- <li>字段:id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>
- <p>技师表:coach_users</p>
- <ul>
- <li>字段:user_id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>根据用户编号和地址编号、技师编号查询详情数据,通过项目编号获取项目数据。
- <ul>
- <li>用户数据存在,并且用户状态为正常</li>
- <li>地址数据存在</li>
- <li>项目数据存在,并且项目状态为正常</li>
- <li>技师数据存在,并且项目状态为正常</li>
- </ul>
- </li>
- <li>通过已上查询的数据,创建订单数据,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>订单类型为常规订单</li>
- <li>如果使用余额支付
- <ul>
- <li>用户余额足够支付项目金额
- <ul>
- <li>则订单状态为已支付</li>
- <li>否则订单状态为未支付</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>如果使用微信支付或支付宝支付
- <ul>
- <li>订单状态为未支付</li>
- </ul>
- </li>
- <li>指定技师</li>
- </ul>
- </li>
- </ol>
- <div class="mermaid">flowchart TD
- A[开始] --> B[获取用户数据]
- B --> C{用户状态正常?}
- C -->|是| D[获取地址数据]
- C -->|否| Z[结束]
- D --> E[获取项目数据]
- E --> F{项目状态正常?}
- F -->|是| G[获取技师数据]
- F -->|否| Z
- G --> H{技师状态正常?}
- H -->|是| I[创建订单]
- H -->|否| Z
- I --> J{支付类型}
- J -->|余额支付| K{余额足够?}
- J -->|微信支付或支付宝支付| M[订单状态: 未支付]
- K -->|是| L[订单状态: 已支付]
- K -->|否| M
- L --> N[指定技师]
- M --> N
- N --> O[发送异步抢单通知]
- O --> Z[结束]
- </div><ol start="3">
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h4 id="2-改变订单状态为已接单技师端">2. 改变订单状态为已接单(技师端) </h4>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取</li>
- </ul>
- <p><strong>涉及表和关键列</strong>:</p>
- <ul>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,status,coach_id</li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>技师:coach_users
- <ul>
- <li>字段:user_id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为已支付</li>
- <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
- <li>订单类型为常规订单</li>
- </ul>
- </li>
- <li>通过用户编号查技师,条件是:
- <ul>
- <li>技师数据存在,并且技师状态为正常</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单数据,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>订单状态为已接单</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <div class="mermaid">flowchart TD
- A[开始] --> B[通过编号查订单]
- B --> C{订单状态为已支付?}
- C -->|是| D{订单有指派技师?}
- C -->|否| Z[结束]
- D -->|是| E{技师用户编号匹配?}
- D -->|否| Z
- E -->|是| F[通过用户编号查技师]
- E -->|否| Z
- F --> G{技师状态为正常?}
- G -->|是| H[修改订单数据]
- G -->|否| Z
- H --> I[订单状态改为已接单]
- I --> J[发送异步抢单通知]
- J --> Z[结束]
- </div><h3 id="3-改变订单状态为已出发技师端">3. 改变订单状态为已出发(技师端) </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取</li>
- </ul>
- <p><strong>涉及表和关键列</strong>:</p>
- <ul>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,status,coach_id</li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>技师:coach_users
- <ul>
- <li>字段:user_id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为已接单</li>
- <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
- </ul>
- </li>
- <li>通过用户编号查技师,条件是:
- <ul>
- <li>技师数据存在,并且技师状态为正常</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单数据,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>订单状态为已出发</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <div class="mermaid">flowchart TD
- A[开始] --> B[通过编号查订单]
- B --> C{订单状态为已接单?}
- C -->|是| D{订单有指派技师?}
- C -->|否| Z[结束]
- D -->|是| E{技师用户编号匹配?}
- D -->|否| Z
- E -->|是| F[通过用户编号查技师]
- E -->|否| Z
- F --> G{技师状态为正常?}
- G -->|是| H[修改订单数据]
- G -->|否| Z
- H --> I[订单状态改为已出发]
- I --> J[发送异步抢单通知]
- J --> Z[结束]
- </div><h3 id="4-改变订单状态为已到达">4. 改变订单状态为已到达 </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取<br>
- <strong>涉及表和关键列</strong>:</li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,status,coach_id</li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- <li>4: 已到达</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>技师:coach_users
- <ul>
- <li>字段:user_id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为已出发</li>
- <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
- </ul>
- </li>
- <li>通过用户编号查技师,条件是:
- <ul>
- <li>技师数据存在,并且技师状态为正常</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单数据,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>订单状态为已到达</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h3 id="5-订单状态改为服务中技师端">5. 订单状态改为服务中(技师端) </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取<br>
- <strong>涉及表和关键列</strong>:</li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,status,coach_id,time_long</li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- <li>4: 已到达</li>
- <li>5: 服务中</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>技师:coach_users
- <ul>
- <li>字段:user_id, status</li>
- <li>状态字段:status
- <ul>
- <li>0: 禁用</li>
- <li>1: 正常</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为已到达</li>
- <li>订单有指派技师,并且技师的用户编号等于参数中的用户编号</li>
- </ul>
- </li>
- <li>通过用户编号查技师,条件是:
- <ul>
- <li>技师数据存在,并且技师状态为正常</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单数据,要求:
- <ul>
- <li>请自动填写相同名称的字段</li>
- <li>订单状态为服务中</li>
- <li>订单服务开始时间</li>
- <li>根据服务时长计算订单服务结束时间</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h3 id="6-订单改为服务结束用户端结束订单">6. 订单改为服务结束(用户端结束订单) </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取<br>
- <strong>涉及表和关键列</strong>:</li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id, status, coach_id, user_end</li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- <li>4: 已到达</li>
- <li>5: 服务中</li>
- <li>6: 服务结束</li>
- </ul>
- </li>
- <li>状态字段:user_end
- <ul>
- <li>0: 未结束</li>
- <li>1: 结束</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号及用户编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为服务中</li>
- <li>订单有指派技师</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单数据,要求:
- <ul>
- <li>订单状态为服务结束</li>
- <li>订单服务结束时间</li>
- <li>用户确认结束</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h3 id="7-订单更改状态为技师离开用户端确认技师离开">7. 订单更改状态为技师离开(用户端确认技师离开) </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取<br>
- <strong>涉及表和关键列</strong>:</li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,user_confirm_leave,user_confirm_leave_time</li>
- <li>用户确认技师撤离字段:user_confirm_leave
- <ul>
- <li>0: 未确认</li>
- <li>1: 已确认</li>
- </ul>
- </li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- <li>4: 已到达</li>
- <li>5: 服务中</li>
- <li>6: 服务结束<br>
- <strong>后台逻辑</strong>:</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <ol>
- <li>通过编号及用户编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为服务结束</li>
- <li>订单有指派技师</li>
- </ul>
- </li>
- <li>通过以上数据,修改订单数据,要求:
- <ul>
- <li>订单用户确认离开</li>
- <li>订单用户确认离开时间</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <div class="mermaid">flowchart TD
- A[开始] --> B[通过编号及用户编号查订单]
- B --> C{订单状态为服务结束?}
- C -->|是| D{订单有指派技师?}
- C -->|否| Z[结束]
- D -->|是| E[修改订单数据]
- D -->|否| Z
- E --> F[订单用户确认离开]
- F --> G[订单用户确认离开时间]
- G --> H[发送异步抢单通知]
- H --> Z[结束]
- </div><h3 id="8-第二种服务时间结束后台自动服务结束">8. 第二种:服务时间结束(后台自动服务结束) </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>order_id<br>
- <strong>涉及表和关键列</strong>:</li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id, end_time</li>
- <li>用户确认技师撤离字段:user_confirm_leave
- <ul>
- <li>0: 未确认</li>
- <li>1: 已确认</li>
- </ul>
- </li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- <li>4: 已到达</li>
- <li>5: 服务中</li>
- <li>6: 服务结束</li>
- <li>7: 已撤离</li>
- <li>8: 已评价</li>
- <li>9: 已取消(退款中)</li>
- <li>10: 已退款</li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- <p><strong>后台逻辑</strong>:</p>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为服务中</li>
- <li>订单有指派技师</li>
- </ul>
- </li>
- <li>通过订单服务结束时间,判断是否结束
- <ul>
- <li>如果服务结束时间小于等于当前时间,则订单状态为服务结束</li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h3 id="9-技师撤离技师端">9. 技师撤离(技师端) </h3>
- <p><strong>参数</strong>:</p>
- <ul>
- <li>user_id, order_id</li>
- <li>user_id 通过 Auth::id() 获取<br>
- <strong>涉及表和关键列</strong>:</li>
- <li>订单:service_order
- <ul>
- <li>必填字段:id,status,coach_id, user_confirm_leave, leave_time, service_price</li>
- <li>状态字段:status
- <ul>
- <li>0: 未支付</li>
- <li>1: 已支付</li>
- <li>2: 已接单</li>
- <li>3: 已出发</li>
- <li>4: 已到达</li>
- <li>5: 服务中</li>
- <li>6: 服务结束</li>
- <li>7: 已撤离</li>
- </ul>
- </li>
- <li>用户确认技师撤离字段:user_confirm_leave
- <ul>
- <li>0: 未确认</li>
- <li>1: 已确认</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>收益:member_benefit
- <ul>
- <li>必填字段:order_id, user_id, benefit, balance, type, created_at, updated_at</li>
- <li>类型字段:type
- <ul>
- <li>1: 支付</li>
- <li>2: 退款</li>
- <li>3: 扣除</li>
- <li>4: 提现</li>
- <li>5: 返还</li>
- <li>6: 收益</li>
- <li>8: 赠送</li>
- <li>9: 路费</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>用户:member_users
- <ul>
- <li>必填字段:id, balance</li>
- <li>余额字段:balance<br>
- <strong>后台逻辑</strong>:</li>
- </ul>
- </li>
- </ul>
- <ol>
- <li>通过编号查订单,条件是:
- <ul>
- <li>订单数据存在,并且状态为服务结束</li>
- <li>订单有指派技师</li>
- <li>订单用户确认技师撤离为已确认</li>
- </ul>
- </li>
- <li>通过以上数据,开启事务,修改订单数据,创建收益数据
- <ul>
- <li>修改订单数据,要求:
- <ul>
- <li>订单状态为已撤离</li>
- <li>订单撤离时间</li>
- </ul>
- </li>
- <li>创建收益数据,要求:
- <ul>
- <li>收益用户为技师</li>
- <li>收益订单为当前订单</li>
- <li>收益类型为收益</li>
- <li>收益金额为订单服务金额乘以百分之50</li>
- <li>收益余额为当前技师用户金额</li>
- </ul>
- </li>
- </ul>
- </li>
- <li>发送异步抢单通知(比如对接极光推送)</li>
- </ol>
- <h2 id="分帐方案优化">分帐方案优化 </h2>
- <h3 id="背景说明">背景说明 </h3>
- <ul>
- <li>平台作为服务商,为技师提供订单服务,技师为服务提供者,用户为服务接受者。业务员主要负责推广渠道,渠道用于推广用户,也可以推荐技师加入平台。</li>
- <li>店铺是一个综合服务门店:
- <ul>
- <li>店铺入驻平台,需支付入驻费</li>
- <li>店铺可以推荐用户下载APP,获取推广费</li>
- <li>店铺可以推荐技师加入平台,获取推荐费</li>
- <li>店铺是一个线下服务场所,用户在平台下单后,可以选择到店服务或上门服务</li>
- </ul>
- </li>
- <li>代理基于店铺,代理的业绩基于店铺的业绩,代理的业绩分成基于店铺营业额,代理的业绩提成基于店铺利润</li>
- <li>需要设计一个分帐方案,技师、业务员、渠道、店铺、代理和平台之间如何分帐,每种角色的分帐算法不同,分帐基于订单金额或剩余利润</li>
- <li>订单完成时,通过平台设置的角色分帐算法和比例,自动计算出每个角色应得的金额,并生成按角色分类的分帐数据表</li>
- <li>一个订单上,每个角色可能同时存在,也可能不存在,角色之间是相加关系,不是相乘关系</li>
- <li>分帐方案需要灵活,比例需要有配置的地方,方便后续调整</li>
- <li>分帐方案需要考虑订单取消、退款情况</li>
- </ul>
- <h3 id="分帐业务逻辑">分帐业务逻辑 </h3>
- <h4 id="技师上门">技师上门 </h4>
- <blockquote>
- <p>技师通过平台接单,到用户指定地点提供服务</p>
- </blockquote>
- <ol>
- <li>如果订单上的用户是某个渠道(技师、店铺、业务员等)推广来的,则渠道获得订单项目金额(不含优惠、路费)的百分之几,推广最大2级,第一级渠道获得20%,第二级渠道获得10%</li>
- <li>如果订单上的技师是由推荐渠道(店铺、业务员等)推荐的,则推荐渠道获得订单项目金额(不含优惠、路费)的1%。如果推荐渠道为技师,则渠道获得订单金额(不含优惠、路费)的3%,上限为1000元封顶</li>
- <li>接单技师作为服务提供者,获得订单项目金额(不含优惠)的50%至55%,路费另算,技师获得90%,平台10%</li>
- </ol>
- <h4 id="用户到店">用户到店 </h4>
- <blockquote>
- <p>用户通过平台下单,选择店铺中的技师,或直接选择店铺服务项目,到店消费</p>
- </blockquote>
- <ol>
- <li>用户到店核销完成,店铺获得80%,店铺线下与技师分帐</li>
- <li>如果用户是某个渠道(技师、店铺、业务员等)推广来的,则渠道获得与店铺分帐后的20%中的10%</li>
- </ol>
- <h4 id="平台技师到店">平台技师到店 </h4>
- <blockquote>
- <p>救急订单,调技师去店铺,用户到店消费,店铺替到店客户下单</p>
- </blockquote>
- <p>如果店铺技师不足,则店铺在平台正常下单,且技师为平台技师(非店铺自有技师),店铺创建的订单可设置报销路费或不报销路费,技师到店核销后,平台从店铺余额中扣除此订单服务费价格的10%</p>
- <div class="mermaid">flowchart TD
- A[技师上门] --> B[用户是渠道推广]
- B --> C{推广级别}
- C -->|第一级| D[渠道获得20%]
- C -->|第二级| E[渠道获得10%]
- A --> F[技师由推荐渠道推荐]
- F --> G{推荐渠道类型}
- G -->|店铺/业务员| H[推荐渠道获得1%]
- G -->|技师| I[推荐渠道获得3% 上限1000元]
- A --> J[接单技师]
- J --> K[技师获得50%至55%]
- K --> L[路费技师获得90% 平台10%]
- </div><div class="mermaid">flowchart TD
- M[用户到店] --> N[订单有店铺]
- N --> O[店铺获得80%]
- O --> P[店铺线下与技师分帐]
- M --> Q[用户是渠道推广]
- Q --> R[渠道获得店铺分帐后20%中的10%]
- </div><div class="mermaid">flowchart TD
- S[平台技师到店] --> T[店铺技师不足]
- T --> U[店铺正常下单]
- U --> V{路费设置}
- V -->|报销| W[店铺订单核销后]
- V -->|不报销| W
- W --> X[平台从店铺余额中扣除10%]
- </div><h3 id="程序设计">程序设计 </h3>
- <ol>
- <li>创建分帐配置表,存储各角色的分帐比例和算法</li>
- <li>创建分帐数据表,存储每个订单的分帐结果</li>
- <li>在订单完成时,调用分帐逻辑,计算各角色应得金额,并写入分帐数据表</li>
- <li>考虑订单取消和退款情况,调整分帐数据</li>
- </ol>
- <h4 id="分帐配置表">分帐配置表 </h4>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>类型</th>
- <th>说明</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>int</td>
- <td>主键</td>
- </tr>
- <tr>
- <td>role</td>
- <td>string</td>
- <td>角色</td>
- </tr>
- <tr>
- <td>percentage</td>
- <td>decimal</td>
- <td>分帐比例</td>
- </tr>
- <tr>
- <td>algorithm</td>
- <td>string</td>
- <td>分帐算法</td>
- </tr>
- <tr>
- <td>created_at</td>
- <td>datetime</td>
- <td>创建时间</td>
- </tr>
- <tr>
- <td>updated_at</td>
- <td>datetime</td>
- <td>更新时间</td>
- </tr>
- </tbody>
- </table>
- <h4 id="分帐数据表">分帐数据表 </h4>
- <table>
- <thead>
- <tr>
- <th>字段名</th>
- <th>类型</th>
- <th>说明</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>id</td>
- <td>int</td>
- <td>主键</td>
- </tr>
- <tr>
- <td>order_id</td>
- <td>int</td>
- <td>订单ID</td>
- </tr>
- <tr>
- <td>role</td>
- <td>string</td>
- <td>角色</td>
- </tr>
- <tr>
- <td>amount</td>
- <td>decimal</td>
- <td>分帐金额</td>
- </tr>
- <tr>
- <td>created_at</td>
- <td>datetime</td>
- <td>创建时间</td>
- </tr>
- <tr>
- <td>updated_at</td>
- <td>datetime</td>
- <td>更新时间</td>
- </tr>
- </tbody>
- </table>
- <h3 id="分帐算法设计">分帐算法设计 </h3>
- <h4 id="技师上门分帐算法">技师上门分帐算法 </h4>
- <ol>
- <li>获取订单项目金额(不含优惠、路费)</li>
- <li>计算渠道推广分成:
- <ul>
- <li>第一级渠道:订单项目金额 * 20%</li>
- <li>第二级渠道:订单项目金额 * 10%</li>
- </ul>
- </li>
- <li>计算推荐渠道分成:
- <ul>
- <li>推荐渠道:订单项目金额 * 1%</li>
- <li>如果推荐渠道为技师:订单项目金额 * 3%,上限1000元</li>
- </ul>
- </li>
- <li>计算技师分成:
- <ul>
- <li>技师:订单项目金额 * 50%至55%</li>
- <li>路费:技师获得90%,平台10%</li>
- </ul>
- </li>
- </ol>
- <h4 id="用户到店分帐算法">用户到店分帐算法 </h4>
- <ol>
- <li>获取订单项目金额(不含优惠、路费)</li>
- <li>计算店铺分成:
- <ul>
- <li>店铺:订单项目金额 * 80%</li>
- </ul>
- </li>
- <li>计算渠道推广分成:
- <ul>
- <li>渠道:店铺分成后的20%中的10%</li>
- </ul>
- </li>
- </ol>
- <h4 id="平台技师到店分帐算法">平台技师到店分帐算法 </h4>
- <ol>
- <li>获取订单项目金额(不含优惠、路费)</li>
- <li>计算分成:
- <ul>
- <li>平台:订单项目金额 * 10%</li>
- </ul>
- </li>
- </ol>
- <h3 id="分帐逻辑">分帐逻辑 </h3>
- <ol>
- <li>获取订单信息,判断订单状态是否为完成</li>
- <li>根据订单信息,获取相关角色(技师、店铺、渠道等)</li>
- <li>根据分帐配置表,计算各角色应得金额</li>
- <li>将计算结果写入分帐数据表</li>
- <li>如果订单取消或退款,调整分帐数据</li>
- </ol>
- <h2 id="二-下单流程图">二、下单流程图 </h2>
- <p></p><h1 id="下单流程图">下单流程图 </h1>
- <h2 id="项目下单反选技师流程图">项目下单反选技师流程图 </h2>
- <div class="mermaid">graph TD
- A[项目下单反选技师] --> B{是否反选技师?}
- B -->|没反选技师| C{有技师抢单?}
- B -->|反选技师| D[用户锁定技师]
-
- C -->|没有技师抢单| E{客服介入?}
- C -->|有技师抢单但客户没去反选| F[半小时后自动取消订单]
-
- E -->|是| G[指定可接单技师服务]
- E -->|否| H[半小时后自动取消订单]
-
- F --> I[技师端不显示订单]
- F --> J[用户端保留订单]
- J --> K[再次购买直接进入反选技师页面]
-
- D --> L{三分钟内付款?}
- L -->|是| M[正常订单流程]
- L -->|否| N[技师自动释放]
-
- M --> O[技师显示为忙碌中]
- N --> P[用户可再次锁定和付款]
-
- D --> Q[其他用户可见技师,显示已被锁]
- D --> R[正常订单不可选该技师]
-
- S[技师角度:被锁定] --> T{用户是否付款?}
- T -->|未付款| U[可抢其他订单]
- T -->|已付款| V[不可抢单,显示忙碌中]
-
- W[技师角度:未被锁] --> X[可抢任何订单]
- W --> Y[可被正常订单选择]
- Y --> Z[下单成功后显示忙碌中]
- </div><p></p>
- <h2 id="分帐及钱包todolist">分帐及钱包todolist </h2>
- <p></p><pre class="language-text">EntryNotFound (FileSystemError): Error: ENOENT: no such file or directory, open 'd:\didong\系统设计\详细设计\分帐及钱包todolist.md'</pre> <p></p>
- <p><img src="assets\168_1725348468_hd.jpeg" alt=""></p>
- <h3 id="前端设计稿">前端设计稿 </h3>
- <h4 id="平台审核">平台审核 </h4>
- <p><img src="%E6%B5%81%E7%A8%8B%E5%9B%BE\%E6%8A%80%E5%B8%88%E6%B3%A8%E5%86%8C\%E5%B9%B3%E5%8F%B0%E5%AE%A1%E6%A0%B8.png" alt=""></p>
- </div>
- <div class="md-sidebar-toc">
- <div class="md-toc">
- <details style="padding:0;;padding-left:0px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#技师端-todolistmd" class="md-toc-link"></a><p><a href="#技师端-todolistmd" class="md-toc-link">技师端 </a><a href="http://todolist.md">todolist.md</a></p>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#首页" class="md-toc-link">
- <p>首页</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#技师注册" class="md-toc-link">
- <p>技师注册</p>
- </a></div><details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#接单流程技师角度" class="md-toc-link"><p>接单流程(技师角度)</p>
- </a>
- </summary>
- <div>
- <details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#抢单" class="md-toc-link"><p>抢单</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#1创建抢单订单" class="md-toc-link">
- <p>1.创建抢单订单</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#2技师抢单创建抢单池" class="md-toc-link">
- <p>2.技师抢单创建抢单池</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#3-用户反选技师指定抢单池" class="md-toc-link">
- <ol start="3">
- <li>用户反选技师(指定抢单池)</li>
- </ol>
- </a></div>
- </div>
- </details>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#服务流程" class="md-toc-link">
- <p>服务流程</p>
- </a></div><details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#接单" class="md-toc-link"><p>接单</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#1-创建订单" class="md-toc-link">
- <ol>
- <li>创建订单</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#2-改变订单状态为已接单技师端" class="md-toc-link">
- <ol start="2">
- <li>改变订单状态为已接单(技师端)</li>
- </ol>
- </a></div>
- </div>
- </details>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#3-改变订单状态为已出发技师端" class="md-toc-link">
- <ol start="3">
- <li>改变订单状态为已出发(技师端)</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#4-改变订单状态为已到达" class="md-toc-link">
- <ol start="4">
- <li>改变订单状态为已到达</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#5-订单状态改为服务中技师端" class="md-toc-link">
- <ol start="5">
- <li>订单状态改为服务中(技师端)</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#6-订单改为服务结束用户端结束订单" class="md-toc-link">
- <ol start="6">
- <li>订单改为服务结束(用户端结束订单)</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#7-订单更改状态为技师离开用户端确认技师离开" class="md-toc-link">
- <ol start="7">
- <li>订单更改状态为技师离开(用户端确认技师离开)</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#8-第二种服务时间结束后台自动服务结束" class="md-toc-link">
- <ol start="8">
- <li>第二种:服务时间结束(后台自动服务结束)</li>
- </ol>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#9-技师撤离技师端" class="md-toc-link">
- <ol start="9">
- <li>技师撤离(技师端)</li>
- </ol>
- </a></div>
- </div>
- </details>
- <details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#分帐方案优化" class="md-toc-link"><p>分帐方案优化</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#背景说明" class="md-toc-link">
- <p>背景说明</p>
- </a></div><details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#分帐业务逻辑" class="md-toc-link"><p>分帐业务逻辑</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#技师上门" class="md-toc-link">
- <p>技师上门</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#用户到店" class="md-toc-link">
- <p>用户到店</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#平台技师到店" class="md-toc-link">
- <p>平台技师到店</p>
- </a></div>
- </div>
- </details>
- <details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#程序设计" class="md-toc-link"><p>程序设计</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#分帐配置表" class="md-toc-link">
- <p>分帐配置表</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#分帐数据表" class="md-toc-link">
- <p>分帐数据表</p>
- </a></div>
- </div>
- </details>
- <details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#分帐算法设计" class="md-toc-link"><p>分帐算法设计</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#技师上门分帐算法" class="md-toc-link">
- <p>技师上门分帐算法</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#用户到店分帐算法" class="md-toc-link">
- <p>用户到店分帐算法</p>
- </a></div><div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#平台技师到店分帐算法" class="md-toc-link">
- <p>平台技师到店分帐算法</p>
- </a></div>
- </div>
- </details>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#分帐逻辑" class="md-toc-link">
- <p>分帐逻辑</p>
- </a></div>
- </div>
- </details>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#二-下单流程图" class="md-toc-link">
- <p>二、下单流程图</p>
- </a></div>
- </div>
- </details>
- <details style="padding:0;;padding-left:0px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#下单流程图" class="md-toc-link"><p>下单流程图</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#项目下单反选技师流程图" class="md-toc-link">
- <p>项目下单反选技师流程图</p>
- </a></div><details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#分帐及钱包todolist" class="md-toc-link"><p>分帐及钱包todolist</p>
- </a>
- </summary>
- <div>
- <details style="padding:0;;padding-left:24px;" open="">
- <summary class="md-toc-link-wrapper">
- <a href="#前端设计稿" class="md-toc-link"><p>前端设计稿</p>
- </a>
- </summary>
- <div>
- <div class="md-toc-link-wrapper" style="padding:0;;display:list-item;list-style:square;margin-left:42px">
- <a href="#平台审核" class="md-toc-link">
- <p>平台审核</p>
- </a></div>
- </div>
- </details>
-
- </div>
- </details>
-
- </div>
- </details>
-
- </div>
- </div>
- <a id="sidebar-toc-btn">≡</a>
-
-
- <script type="module">
- // TODO: If ZenUML gets integrated into mermaid in the future,
- // we can remove the following lines.
- var MERMAID_CONFIG = ({"startOnLoad":true,"securityLevel":"loose"});
- if (typeof MERMAID_CONFIG !== 'undefined') {
- MERMAID_CONFIG.startOnLoad = false
- MERMAID_CONFIG.cloneCssStyles = false
- MERMAID_CONFIG.theme = "default"
- }
- mermaid.initialize(MERMAID_CONFIG || {})
- if (typeof(window['Reveal']) !== 'undefined') {
- function mermaidRevealHelper(event) {
- var currentSlide = event.currentSlide
- var diagrams = currentSlide.querySelectorAll('.mermaid')
- for (var i = 0; i < diagrams.length; i++) {
- var diagram = diagrams[i]
- if (!diagram.hasAttribute('data-processed')) {
- mermaid.init(null, diagram, ()=> {
- Reveal.slide(event.indexh, event.indexv)
- })
- }
- }
- }
- Reveal.addEventListener('slidetransitionend', mermaidRevealHelper)
- Reveal.addEventListener('ready', mermaidRevealHelper)
- await mermaid.run({
- nodes: document.querySelectorAll('.mermaid')
- })
- } else {
- await mermaid.run({
- nodes: document.querySelectorAll('.mermaid')
- })
- }
- </script>
-
-
-
- <script>
- document.body.setAttribute('html-show-sidebar-toc', true)
- var sidebarTOCBtn = document.getElementById('sidebar-toc-btn')
- sidebarTOCBtn.addEventListener('click', function(event) {
- event.stopPropagation()
- if (document.body.hasAttribute('html-show-sidebar-toc')) {
- document.body.removeAttribute('html-show-sidebar-toc')
- } else {
- document.body.setAttribute('html-show-sidebar-toc', true)
- }
- })
- </script>
-
-
- </body></html>
|