|
|
@@ -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);
|