Explorar o código

feat: 产品反馈

liujt hai 1 día
pai
achega
eae1319ec4
Modificáronse 2 ficheiros con 402 adicións e 2 borrados
  1. 303 2
      hybrid/html/a.html
  2. 99 0
      hybrid/html/c.html

+ 303 - 2
hybrid/html/a.html

@@ -288,6 +288,105 @@
 					</div>
 				</template>
 
+				<template v-slot:blank_product_specification="scope">
+					<div style="width: 100%;">
+						<view v-for="(item, index) in scope.model.blank_product_specification" :key="index" class="seal-card">
+							<div class="seal-card-header">
+								<span class="seal-card-index">{{ index + 1 }}.</span>
+								<span class="seal-card-type">{{ item.specification || '未填写规格' }}</span>
+								<div class="seal-card-actions">
+									<van-button size="mini" type="primary" plain @click="openSpecEditDialog(scope, 'edit', index)">编辑</van-button>
+									<van-button size="mini" type="danger" plain @click="delNewRow('blank_product_specification', index)">删除</van-button>
+								</div>
+							</div>
+							<div class="seal-card-body">
+								<div class="seal-card-row">
+									<span class="seal-card-label">规格</span>
+									<span class="seal-card-value">{{ item.specification || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">数量</span>
+									<span class="seal-card-value">{{ item.num || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">批号</span>
+									<span class="seal-card-value">{{ item.batchNo || '-' }}</span>
+								</div>
+							</div>
+						</view>
+						<van-button type="primary" size="small" block @click="openSpecEditDialog(scope, 'add', scope.model.blank_product_specification?scope.model.blank_product_specification.length:0)" style="margin-bottom:10px">+ 添加产品规格</van-button>
+					</div>
+				</template>
+
+				<template v-slot:blank_event_component="scope">
+					<div style="width: 100%;">
+						<view v-for="(item, index) in scope.model.blank_event_component" :key="index" class="seal-card">
+							<div class="seal-card-header">
+								<span class="seal-card-index">{{ index + 1 }}.</span>
+								<span class="seal-card-type">{{ item.eventHospital || '未填写医院' }}</span>
+								<div class="seal-card-actions">
+									<van-button size="mini" type="primary" plain @click="openEventEditDialog(scope, 'edit', index)">编辑</van-button>
+									<van-button size="mini" type="danger" plain @click="delNewRow('blank_event_component', index)">删除</van-button>
+								</div>
+							</div>
+							<div class="seal-card-body">
+								<div class="seal-card-row">
+									<span class="seal-card-label">时间</span>
+									<span class="seal-card-value">{{ item.eventTime || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">描述</span>
+									<span class="seal-card-value">{{ item.eventDesc || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">附件</span>
+									<div style="flex:1">
+										<van-badge v-if="item.files && item.files.length" :content="item.files.length">
+											<van-button size="small" type="primary" @click="handleUploadLocal('blank_event_component', index)">上传附件</van-button>
+										</van-badge>
+										<van-button v-else size="small" type="primary" @click="handleUploadLocal('blank_event_component', index)">上传附件</van-button>
+									</div>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">意见</span>
+									<span class="seal-card-value">{{ item.eventOpinion || '-' }}</span>
+								</div>
+							</div>
+						</view>
+						<van-button type="primary" size="small" block @click="openEventEditDialog(scope, 'add', scope.model.blank_event_component?scope.model.blank_event_component.length:0)" style="margin-bottom:10px">+ 添加事件</van-button>
+					</div>
+				</template>
+
+				<template v-slot:blank_reissue_component="scope">
+					<div style="width: 100%;">
+						<view v-for="(item, index) in scope.model.blank_reissue_component" :key="index" class="seal-card">
+							<div class="seal-card-header">
+								<span class="seal-card-index">{{ index + 1 }}.</span>
+								<span class="seal-card-type">{{ item.reissueType || '未填写类型' }}</span>
+								<div class="seal-card-actions">
+									<van-button size="mini" type="primary" plain @click="openReissueEditDialog(scope, 'edit', index)">编辑</van-button>
+									<van-button size="mini" type="danger" plain @click="delNewRow('blank_reissue_component', index)">删除</van-button>
+								</div>
+							</div>
+							<div class="seal-card-body">
+								<div class="seal-card-row">
+									<span class="seal-card-label">规格</span>
+									<span class="seal-card-value">{{ item.reissueOtherType || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">收件</span>
+									<span class="seal-card-value">{{ item.reissueContact || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">要求</span>
+									<span class="seal-card-value">{{ item.reissueOtherReq || '-' }}</span>
+								</div>
+							</div>
+						</view>
+						<van-button type="primary" size="small" block @click="openReissueEditDialog(scope, 'add', scope.model.blank_reissue_component?scope.model.blank_reissue_component.length:0)" style="margin-bottom:10px">+ 添加补发</van-button>
+					</div>
+				</template>
+
 			</fm-generate-vant-form>
 
 			<!-- 印章选择弹窗(根层级,避免被 form overflow 裁剪) -->
@@ -504,6 +603,104 @@
 				/>
 			</van-popup>
 
+			<!-- 产品规格编辑弹窗 -->
+			<van-popup v-model:show="specEditVisible" position="bottom" :style="{ height: '60%' }" round>
+				<div style="padding:16px">
+					<h4 style="text-align:center;margin-bottom:12px">{{ specEditTitle }}</h4>
+					<div class="seal-form-row">
+						<span class="seal-form-label">产品规格型号</span>
+						<input class="seal-form-input" v-model="specEditForm.specification" placeholder="请输入" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">数量</span>
+						<input class="seal-form-input" v-model="specEditForm.num" placeholder="请输入" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">批号</span>
+						<input class="seal-form-input" v-model="specEditForm.batchNo" placeholder="请输入" />
+					</div>
+					<div style="display:flex;justify-content:space-between;padding:20px 0">
+						<van-button style="width:48%" @click="specEditVisible = false">取消</van-button>
+						<van-button style="width:48%" type="primary" @click="onSpecEditSave">保存</van-button>
+					</div>
+				</div>
+			</van-popup>
+
+			<!-- 事件编辑弹窗 -->
+			<van-popup v-model:show="eventEditVisible" position="bottom" :style="{ height: '75%' }" round>
+				<div style="padding:16px">
+					<h4 style="text-align:center;margin-bottom:12px">{{ eventEditTitle }}</h4>
+					<div class="seal-form-row">
+						<span class="seal-form-label">发生时间</span>
+						<input class="seal-form-input" type="datetime-local" v-model="eventEditForm.eventTime" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">医院及科室</span>
+						<input class="seal-form-input" v-model="eventEditForm.eventHospital" placeholder="请输入" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">详细描述</span>
+						<input class="seal-form-input" v-model="eventEditForm.eventDesc" placeholder="请输入" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">图片上传</span>
+						<div style="flex:1;text-align:right">
+							<van-badge v-if="eventEditForm.files && eventEditForm.files.length" :content="eventEditForm.files.length">
+								<van-button size="small" type="primary" @click="handleUploadLocal('blank_event_component', eventEditIndex)">上传图片</van-button>
+							</van-badge>
+							<van-button v-else size="small" type="primary" @click="handleUploadLocal('blank_event_component', eventEditIndex)">上传图片</van-button>
+						</div>
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">其他意见</span>
+						<input class="seal-form-input" v-model="eventEditForm.eventOpinion" placeholder="请输入" />
+					</div>
+					<div style="display:flex;justify-content:space-between;padding:20px 0">
+						<van-button style="width:48%" @click="eventEditVisible = false">取消</van-button>
+						<van-button style="width:48%" type="primary" @click="onEventEditSave">保存</van-button>
+					</div>
+				</div>
+			</van-popup>
+
+			<!-- 补发编辑弹窗 -->
+			<van-popup v-model:show="reissueEditVisible" position="bottom" :style="{ height: '65%' }" round>
+				<div style="padding:16px">
+					<h4 style="text-align:center;margin-bottom:12px">{{ reissueEditTitle }}</h4>
+					<div class="seal-form-row" @click="reissueTypePopVisible = true">
+						<span class="seal-form-label">补发型号规格</span>
+						<span class="seal-form-val">{{ reissueEditForm.reissueType || '请选择' }}</span>
+						<span class="seal-form-arrow">›</span>
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">其他规格型号</span>
+						<input class="seal-form-input" v-model="reissueEditForm.reissueOtherType" placeholder="请输入" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">收件地址</span>
+						<input class="seal-form-input" v-model="reissueEditForm.reissueContact" placeholder="地址/联系人/电话" />
+					</div>
+					<div class="seal-form-row">
+						<span class="seal-form-label">其他要求</span>
+						<input class="seal-form-input" v-model="reissueEditForm.reissueOtherReq" placeholder="请输入" />
+					</div>
+					<div style="display:flex;justify-content:space-between;padding:20px 0">
+						<van-button style="width:48%" @click="reissueEditVisible = false">取消</van-button>
+						<van-button style="width:48%" type="primary" @click="onReissueEditSave">保存</van-button>
+					</div>
+				</div>
+			</van-popup>
+
+			<!-- 补发型号规格选择弹窗 -->
+			<van-popup v-model:show="reissueTypePopVisible" position="bottom" :style="{ height: '30%' }">
+				<van-picker
+					show-toolbar
+					title="选择补发型号规格"
+					:columns="reissueTypeList"
+					@confirm="onReissueTypeConfirm"
+					@cancel="reissueTypePopVisible = false"
+				/>
+			</van-popup>
+
 			<div>
 
 				<div v-if='isEdit'
@@ -741,8 +938,35 @@
 						businessEditMode: 'add',
 						businessEditScope: null,
 						businessEditIndex: null,
-						businessTransportPopVisible: false,
-					}
+				businessTransportPopVisible: false,
+					// 产品规格
+					specEditVisible: false,
+					specEditTitle: '添加产品规格',
+					specEditForm: { specification: '', num: '', batchNo: '' },
+					specEditMode: 'add',
+					specEditScope: null,
+					specEditIndex: null,
+					// 事件
+					eventEditVisible: false,
+					eventEditTitle: '添加事件',
+					eventEditForm: { eventTime: '', eventHospital: '', eventDesc: '', files: [], eventOpinion: '' },
+					eventEditMode: 'add',
+					eventEditScope: null,
+					eventEditIndex: null,
+					// 补发
+					reissueEditVisible: false,
+					reissueEditTitle: '添加补发',
+					reissueEditForm: { reissueType: '', reissueOtherType: '', reissueContact: '', reissueOtherReq: '' },
+					reissueEditMode: 'add',
+					reissueEditScope: null,
+					reissueEditIndex: null,
+					reissueTypeList: [
+						{ value: '同规格型号', text: '同规格型号' },
+						{ value: '其他规格型号', text: '其他规格型号' },
+						{ value: '无', text: '无' },
+					],
+					reissueTypePopVisible: false,
+				}
 				},
 				created() {
 					let _this = this
@@ -1128,6 +1352,83 @@
 							number_06fgz5gs: totalPrice + zsf + snjtpt + cfbt + snjtf + zdf + qtfy
 						})
 					},
+					// ===== 产品规格 =====
+					openSpecEditDialog(scope, mode, index) {
+						this.specEditScope = scope
+						this.specEditIndex = index
+						this.specEditMode = mode
+						if (mode === 'edit' && scope.model.blank_product_specification[index]) {
+							var r = scope.model.blank_product_specification[index]
+							this.specEditForm = { specification: r.specification||'', num: r.num||'', batchNo: r.batchNo||'' }
+							this.specEditTitle = '编辑产品规格'
+						} else {
+							this.specEditForm = { specification: '', num: '', batchNo: '' }
+							this.specEditTitle = '添加产品规格'
+						}
+						this.specEditVisible = true
+					},
+					async onSpecEditSave() {
+						var scope = this.specEditScope, idx = this.specEditIndex, key = 'blank_product_specification'
+						var data = await this.$refs.generateForm.getData(false)
+						if (!data[key]) data[key] = []
+						if (this.specEditMode === 'edit') data[key][idx] = JSON.parse(JSON.stringify(this.specEditForm))
+						else data[key].push(JSON.parse(JSON.stringify(this.specEditForm)))
+						await this.$refs.generateForm.setData({ [key]: data[key] })
+						this.specEditVisible = false
+					},
+					// ===== 事件 =====
+					openEventEditDialog(scope, mode, index) {
+						this.eventEditScope = scope
+						this.eventEditIndex = index
+						this.eventEditMode = mode
+						if (mode === 'edit' && scope.model.blank_event_component[index]) {
+							var r = scope.model.blank_event_component[index]
+							this.eventEditForm = { eventTime: r.eventTime||'', eventHospital: r.eventHospital||'', eventDesc: r.eventDesc||'', files: r.files||[], eventOpinion: r.eventOpinion||'' }
+							this.eventEditTitle = '编辑事件'
+						} else {
+							this.eventEditForm = { eventTime: '', eventHospital: '', eventDesc: '', files: [], eventOpinion: '' }
+							this.eventEditTitle = '添加事件'
+						}
+						this.eventEditVisible = true
+					},
+					async onEventEditSave() {
+						var scope = this.eventEditScope, idx = this.eventEditIndex, key = 'blank_event_component'
+						var data = await this.$refs.generateForm.getData(false)
+						if (!data[key]) data[key] = []
+						if (this.eventEditMode === 'edit') data[key][idx] = JSON.parse(JSON.stringify(this.eventEditForm))
+						else data[key].push(JSON.parse(JSON.stringify(this.eventEditForm)))
+						await this.$refs.generateForm.setData({ [key]: data[key] })
+						this.eventEditVisible = false
+					},
+					// ===== 补发 =====
+					openReissueEditDialog(scope, mode, index) {
+						this.reissueEditScope = scope
+						this.reissueEditIndex = index
+						this.reissueEditMode = mode
+						if (mode === 'edit' && scope.model.blank_reissue_component[index]) {
+							var r = scope.model.blank_reissue_component[index]
+							this.reissueEditForm = { reissueType: r.reissueType||'', reissueOtherType: r.reissueOtherType||'', reissueContact: r.reissueContact||'', reissueOtherReq: r.reissueOtherReq||'' }
+							this.reissueEditTitle = '编辑补发'
+						} else {
+							this.reissueEditForm = { reissueType: '', reissueOtherType: '', reissueContact: '', reissueOtherReq: '' }
+							this.reissueEditTitle = '添加补发'
+						}
+						this.reissueEditVisible = true
+					},
+					async onReissueEditSave() {
+						var scope = this.reissueEditScope, idx = this.reissueEditIndex, key = 'blank_reissue_component'
+						var data = await this.$refs.generateForm.getData(false)
+						if (!data[key]) data[key] = []
+						if (this.reissueEditMode === 'edit') data[key][idx] = JSON.parse(JSON.stringify(this.reissueEditForm))
+						else data[key].push(JSON.parse(JSON.stringify(this.reissueEditForm)))
+						await this.$refs.generateForm.setData({ [key]: data[key] })
+						this.reissueEditVisible = false
+					},
+					onReissueTypeConfirm(picker) {
+						var sel = (picker && picker.selectedOptions && picker.selectedOptions[0]) ? picker.selectedOptions[0].text : picker
+						this.reissueEditForm.reissueType = sel
+						this.reissueTypePopVisible = false
+					},
 					async handleUploadLocal (model, rowIndex) {
 						console.log('上传本地文件按钮被点击,字段模型:', model, '行索引:', rowIndex)
 						let data = await this.$refs.generateForm.getData(false);

+ 99 - 0
hybrid/html/c.html

@@ -260,6 +260,105 @@
 						<!-- <van-button type="primary" size="small" block @click="openBusinessEditDialog(scope, 'add', scope.model.blank_business_component?scope.model.blank_business_component.length:0)" style="margin-bottom:10px">+ 添加交通费用</van-button> -->
 					</div>
 				</template>
+
+				<template v-slot:blank_product_specification="scope">
+					<div style="width: 100%;">
+						<view v-for="(item, index) in scope.model.blank_product_specification" :key="index" class="seal-card">
+							<div class="seal-card-header">
+								<span class="seal-card-index">{{ index + 1 }}.</span>
+								<span class="seal-card-type">{{ item.specification || '未填写规格' }}</span>
+								<!-- <div class="seal-card-actions">
+									<van-button size="mini" type="primary" plain @click="openSpecEditDialog(scope, 'edit', index)">编辑</van-button>
+									<van-button size="mini" type="danger" plain @click="delNewRow('blank_product_specification', index)">删除</van-button>
+								</div> -->
+							</div>
+							<div class="seal-card-body">
+								<div class="seal-card-row">
+									<span class="seal-card-label">规格</span>
+									<span class="seal-card-value">{{ item.specification || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">数量</span>
+									<span class="seal-card-value">{{ item.num || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">批号</span>
+									<span class="seal-card-value">{{ item.batchNo || '-' }}</span>
+								</div>
+							</div>
+						</view>
+						<!-- <van-button type="primary" size="small" block @click="openSpecEditDialog(scope, 'add', scope.model.blank_product_specification?scope.model.blank_product_specification.length:0)" style="margin-bottom:10px">+ 添加产品规格</van-button> -->
+					</div>
+				</template>
+
+				<template v-slot:blank_event_component="scope">
+					<div style="width: 100%;">
+						<view v-for="(item, index) in scope.model.blank_event_component" :key="index" class="seal-card">
+							<div class="seal-card-header">
+								<span class="seal-card-index">{{ index + 1 }}.</span>
+								<span class="seal-card-type">{{ item.eventHospital || '未填写医院' }}</span>
+								<!-- <div class="seal-card-actions">
+									<van-button size="mini" type="primary" plain @click="openEventEditDialog(scope, 'edit', index)">编辑</van-button>
+									<van-button size="mini" type="danger" plain @click="delNewRow('blank_event_component', index)">删除</van-button>
+								</div> -->
+							</div>
+							<div class="seal-card-body">
+								<div class="seal-card-row">
+									<span class="seal-card-label">时间</span>
+									<span class="seal-card-value">{{ item.eventTime || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">描述</span>
+									<span class="seal-card-value">{{ item.eventDesc || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">附件</span>
+									<div style="flex:1">
+										<van-badge v-if="item.files && item.files.length" :content="item.files.length">
+											<van-button size="small" type="primary" @click="handleUploadLocal('blank_event_component', index)">上传附件</van-button>
+										</van-badge>
+										<van-button v-else size="small" type="primary" @click="handleUploadLocal('blank_event_component', index)">上传附件</van-button>
+									</div>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">意见</span>
+									<span class="seal-card-value">{{ item.eventOpinion || '-' }}</span>
+								</div>
+							</div>
+						</view>
+						<!-- <van-button type="primary" size="small" block @click="openEventEditDialog(scope, 'add', scope.model.blank_event_component?scope.model.blank_event_component.length:0)" style="margin-bottom:10px">+ 添加事件</van-button> -->
+					</div>
+				</template>
+
+				<template v-slot:blank_reissue_component="scope">
+					<div style="width: 100%;">
+						<view v-for="(item, index) in scope.model.blank_reissue_component" :key="index" class="seal-card">
+							<div class="seal-card-header">
+								<span class="seal-card-index">{{ index + 1 }}.</span>
+								<span class="seal-card-type">{{ item.reissueType || '未填写类型' }}</span>
+								<!-- <div class="seal-card-actions">
+									<van-button size="mini" type="primary" plain @click="openReissueEditDialog(scope, 'edit', index)">编辑</van-button>
+									<van-button size="mini" type="danger" plain @click="delNewRow('blank_reissue_component', index)">删除</van-button>
+								</div> -->
+							</div>
+							<div class="seal-card-body">
+								<div class="seal-card-row">
+									<span class="seal-card-label">规格</span>
+									<span class="seal-card-value">{{ item.reissueOtherType || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">收件</span>
+									<span class="seal-card-value">{{ item.reissueContact || '-' }}</span>
+								</div>
+								<div class="seal-card-row">
+									<span class="seal-card-label">要求</span>
+									<span class="seal-card-value">{{ item.reissueOtherReq || '-' }}</span>
+								</div>
+							</div>
+						</view>
+						<!-- <van-button type="primary" size="small" block @click="openReissueEditDialog(scope, 'add', scope.model.blank_reissue_component?scope.model.blank_reissue_component.length:0)" style="margin-bottom:10px">+ 添加补发</van-button> -->
+					</div>
+				</template>
 				
 			</fm-generate-vant-form>
 			<div v-if="type!='view'" style='position: fixed; bottom: 0;background: #f9fafb;width:100%;height:20%'>