文件
yjyf/server/application/admin/view/order/edit.html
linda 4e0c86ca06 feat(sync): 后端功能模块与前端模块数据同源 + 后台13个业务模块可管
前端不再写死运营数据:
- 首页 Banner/保障条/教程卡 改由 /api/home/index 下发(fa_banner + fa_config),
  数据缺失或停用自动回落内置兜底文案
- 订单状态提示改由后端 OrderStatus::tip() 下发 status_tip,前后端一套口径

后台可管(FastAdmin 生成器):
- 新增 13 个业务后台模块:运营位/订单/师傅/商家/优惠券/评价/消息/服务/服务类目/申诉/开票/提现/结算单
  (controller + model + view + fa_auth_rule 菜单 78 条)

修复:
- nginx /admin/* 改为 301 到 /admin.php/*,否则后台菜单点开全部 404

验证:tests/phase5_data_sync.js 新增 16 项联动断言;全量回归 202 项断言 0 失败
2026-10-28 17:06:55 +08:00

326 行
19 KiB
HTML

<form id="edit-form" class="form-horizontal" role="form" data-toggle="validator" method="POST" action="">
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Order_no')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-order_no" data-rule="required" class="form-control" name="row[order_no]" type="text" value="{$row.order_no|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('User_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-user_id" data-rule="required" min="0" data-source="user/user/index" data-field="nickname" class="form-control selectpage" name="row[user_id]" type="text" value="{$row.user_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Master_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-master_id" data-rule="required" min="0" data-source="master/index" class="form-control selectpage" name="row[master_id]" type="text" value="{$row.master_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cat_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cat_id" data-rule="required" min="0" data-source="cat/index" class="form-control selectpage" name="row[cat_id]" type="text" value="{$row.cat_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Service_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-service_id" data-rule="required" min="0" data-source="service/index" class="form-control selectpage" name="row[service_id]" type="text" value="{$row.service_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Service_name')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-service_name" data-rule="required" class="form-control" name="row[service_name]" type="text" value="{$row.service_name|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Service_image')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-service_image" data-rule="required" class="form-control" size="50" name="row[service_image]" type="text" value="{$row.service_image|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-service_image" class="btn btn-danger faupload" data-input-id="c-service_image" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="false" data-preview-id="p-service_image"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-service_image" class="btn btn-primary fachoose" data-input-id="c-service_image" data-mimetype="image/*" data-multiple="false"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-service_image"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-service_image"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Price_type')}:</label>
<div class="col-xs-12 col-sm-8">
<select id="c-price_type" data-rule="required" class="form-control selectpicker" name="row[price_type]">
{foreach name="priceTypeList" item="vo"}
<option value="{$key}" {in name="key" value="$row.price_type"}selected{/in}>{$vo}</option>
{/foreach}
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_images')}:</label>
<div class="col-xs-12 col-sm-8">
<div class="input-group">
<input id="c-goods_images" data-rule="required" class="form-control" size="50" name="row[goods_images]" type="text" value="{$row.goods_images|htmlentities}">
<div class="input-group-addon no-border no-padding">
<span><button type="button" id="faupload-goods_images" class="btn btn-danger faupload" data-input-id="c-goods_images" data-mimetype="image/gif,image/jpeg,image/png,image/jpg,image/bmp,image/webp" data-multiple="true" data-preview-id="p-goods_images"><i class="fa fa-upload"></i> {:__('Upload')}</button></span>
<span><button type="button" id="fachoose-goods_images" class="btn btn-primary fachoose" data-input-id="c-goods_images" data-mimetype="image/*" data-multiple="true"><i class="fa fa-list"></i> {:__('Choose')}</button></span>
</div>
<span class="msg-box n-right" for="c-goods_images"></span>
</div>
<ul class="row list-inline faupload-preview" id="p-goods_images"></ul>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_model')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-goods_model" data-rule="required" class="form-control" name="row[goods_model]" type="text" value="{$row.goods_model|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Goods_num')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-goods_num" data-rule="required" class="form-control" name="row[goods_num]" type="number" value="{$row.goods_num|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Floor')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-floor" data-rule="required" class="form-control" name="row[floor]" type="number" value="{$row.floor|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Has_elevator')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-has_elevator" data-rule="required" class="form-control" name="row[has_elevator]" type="number" value="{$row.has_elevator|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Urgent')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-urgent" data-rule="required" class="form-control" name="row[urgent]" type="number" value="{$row.urgent|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Remark')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-remark" data-rule="required" class="form-control" name="row[remark]" type="text" value="{$row.remark|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Contact')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-contact" data-rule="required" class="form-control" name="row[contact]" type="text" value="{$row.contact|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Mobile')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-mobile" data-rule="required" class="form-control" name="row[mobile]" type="text" value="{$row.mobile|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Province')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-province" data-rule="required" class="form-control" name="row[province]" type="text" value="{$row.province|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('City')}:</label>
<div class="col-xs-12 col-sm-8">
<div class='control-relative'><input id="c-city" data-rule="required" class="form-control" data-toggle="city-picker" name="row[city]" type="text" value="{$row.city|htmlentities}"></div>
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('District')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-district" data-rule="required" class="form-control" name="row[district]" type="text" value="{$row.district|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Address')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-address" data-rule="required" class="form-control" name="row[address]" type="text" value="{$row.address|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Lng')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-lng" data-rule="required" class="form-control" name="row[lng]" type="text" value="{$row.lng|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Lat')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-lat" data-rule="required" class="form-control" name="row[lat]" type="text" value="{$row.lat|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Appoint_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-appoint_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[appoint_time]" type="text" value="{:$row.appoint_time?datetime($row.appoint_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Base_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-base_amount" data-rule="required" class="form-control" step="0.01" name="row[base_amount]" type="number" value="{$row.base_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Floor_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-floor_amount" data-rule="required" class="form-control" step="0.01" name="row[floor_amount]" type="number" value="{$row.floor_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Distance_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-distance_amount" data-rule="required" class="form-control" step="0.01" name="row[distance_amount]" type="number" value="{$row.distance_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Urgent_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-urgent_amount" data-rule="required" class="form-control" step="0.01" name="row[urgent_amount]" type="number" value="{$row.urgent_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Discount_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-discount_amount" data-rule="required" class="form-control" step="0.01" name="row[discount_amount]" type="number" value="{$row.discount_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Total_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-total_amount" data-rule="required" class="form-control" step="0.01" name="row[total_amount]" type="number" value="{$row.total_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pay_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pay_amount" data-rule="required" class="form-control" step="0.01" name="row[pay_amount]" type="number" value="{$row.pay_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Status')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-status" data-rule="required" class="form-control" name="row[status]" type="number" value="{$row.status|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pay_status')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pay_status" data-rule="required" class="form-control" name="row[pay_status]" type="number" value="{$row.pay_status|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pay_type')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pay_type" data-rule="required" class="form-control" name="row[pay_type]" type="text" value="{$row.pay_type|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Pay_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-pay_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[pay_time]" type="text" value="{:$row.pay_time?datetime($row.pay_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Transaction_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-transaction_id" data-rule="required" data-source="transaction/index" class="form-control selectpage" name="row[transaction_id]" type="text" value="{$row.transaction_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Coupon_id')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-coupon_id" data-rule="required" min="0" data-source="coupon/index" class="form-control selectpage" name="row[coupon_id]" type="text" value="{$row.coupon_id|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Accept_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-accept_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[accept_time]" type="text" value="{:$row.accept_time?datetime($row.accept_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Contact_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-contact_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[contact_time]" type="text" value="{:$row.contact_time?datetime($row.contact_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Arrive_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-arrive_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[arrive_time]" type="text" value="{:$row.arrive_time?datetime($row.arrive_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Start_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-start_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[start_time]" type="text" value="{:$row.start_time?datetime($row.start_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Finish_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-finish_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[finish_time]" type="text" value="{:$row.finish_time?datetime($row.finish_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Verify_time')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-verify_time" class="form-control datetimepicker" data-date-format="YYYY-MM-DD HH:mm:ss" data-use-current="true" name="row[verify_time]" type="text" value="{:$row.verify_time?datetime($row.verify_time):''}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Verify_code')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-verify_code" data-rule="required" class="form-control" name="row[verify_code]" type="text" value="{$row.verify_code|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Settle_status')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-settle_status" data-rule="required" class="form-control" name="row[settle_status]" type="number" value="{$row.settle_status|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Settle_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-settle_amount" data-rule="required" class="form-control" step="0.01" name="row[settle_amount]" type="number" value="{$row.settle_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Cancel_reason')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-cancel_reason" data-rule="required" class="form-control" name="row[cancel_reason]" type="text" value="{$row.cancel_reason|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Refund_amount')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-refund_amount" data-rule="required" class="form-control" step="0.01" name="row[refund_amount]" type="number" value="{$row.refund_amount|htmlentities}">
</div>
</div>
<div class="form-group">
<label class="control-label col-xs-12 col-sm-2">{:__('Is_review')}:</label>
<div class="col-xs-12 col-sm-8">
<input id="c-is_review" data-rule="required" class="form-control" name="row[is_review]" type="number" value="{$row.is_review|htmlentities}">
</div>
</div>
<div class="form-group layer-footer">
<label class="control-label col-xs-12 col-sm-2"></label>
<div class="col-xs-12 col-sm-8">
<button type="submit" class="btn btn-primary btn-embossed disabled">{:__('OK')}</button>
</div>
</div>
</form>