Editinventory.vue 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <!-- 扫码 -->
  2. <template>
  3. <div class="">
  4. <el-button type="primary" @click="editFun(props.row)">编辑</el-button>
  5. <el-button type="danger" @click="delClick(props.row)">删除</el-button>
  6. <el-dialog v-model="dialogFormVisible" title="编辑" :append-to-body="true" draggable width="60%">
  7. <el-form ref="ruleFormRef" :rules="rules" :model="initParam" :inline="true">
  8. <el-divider content-position="center">药品信息</el-divider>
  9. <el-form-item :label="item.name" :label-width="formLabelWidth" v-for="(item,index) in data.showDiaData" :key="index" :prop="'medicineInfo.'+item.field_name">
  10. <el-select v-model="initParam.medicineInfo[item.field_name]" :placeholder="'请选择'+item.name" class="inputWidth" v-if="[1,2,3,4,5].includes(item.type)">
  11. <el-option :label="itemIt.name" :value="itemIt.id" v-for="itemIt,i in item.list" :key="i"/>
  12. </el-select>
  13. <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==6"/>
  14. <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==7"/>
  15. <el-input v-model="initParam.medicineInfo[item.field_name]" autocomplete="off" :placeholder="'请输入'+item.name" class="inputWidth" v-if="item.type==8"/>
  16. <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="date" value-format="YYYY-MM-DD" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==9"/>
  17. <el-date-picker v-model="initParam.medicineInfo[item.field_name]" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" :placeholder="'请输入'+item.name" clearable style="width: 200px;" v-if="item.type==10"/>
  18. </el-form-item>
  19. <el-divider content-position="center">入库信息</el-divider>
  20. <el-form-item class="el-form-item-main" label="数量" :label-width="formLabelWidth" prop="quantity">
  21. <el-input v-model.number="initParam.quantity" autocomplete="off" class="inputWidth" />
  22. </el-form-item>
  23. <el-form-item class="el-form-item-main" label="购进单价" :label-width="formLabelWidth">
  24. <el-input v-model="initParam.unit_price" autocomplete="off" class="inputWidth"/>
  25. </el-form-item>
  26. <el-form-item class="el-form-item-main" label="入库日期" :label-width="formLabelWidth" prop="date">
  27. <el-date-picker v-model="initParam.date" type="date" placeholder="疫苗效期" value-format="YYYY-MM-DD" clearable style="width: 200px;" />
  28. </el-form-item>
  29. <el-form-item class="el-form-item-main" label="发货单位" :label-width="formLabelWidth">
  30. <el-select v-model="initParam.forwarding_unit" placeholder="请选择发货单位" class="inputWidth">
  31. <el-option :value="it" v-for="it,j in data.itemPir" :key="j" />
  32. </el-select>
  33. </el-form-item>
  34. <el-form-item label="经办人" :label-width="formLabelWidth" prop="operator">
  35. <el-select v-model="initParam.operator" placeholder="请选择经办人" class="inputWidth">
  36. <el-option :label="it" :value="it" v-for="(it,j) in data.itemOpen" :key="j+Math.random()" />
  37. </el-select>
  38. </el-form-item>
  39. </el-form>
  40. <template #footer>
  41. <span class="dialog-footer">
  42. <el-button @click="dialogFormVisible = false">取消</el-button>
  43. <el-button type="primary" @click="submitForm(ruleFormRef)">提交</el-button>
  44. </span>
  45. </template>
  46. </el-dialog>
  47. </div>
  48. </template>
  49. <script setup lang="ts">
  50. import { reactive, ref } from 'vue'
  51. import type { FormInstance} from 'element-plus'
  52. import { syrulesData } from "@/plugins/rulesData";
  53. const dialogFormVisible = ref(false)
  54. const ruleFormRef = ref<FormInstance>()
  55. let rules:any = reactive({})
  56. const props = defineProps({
  57. row: {
  58. type: Object,
  59. default: () => { },
  60. },
  61. })
  62. import {
  63. medicListStock,
  64. stockunit,//发货单位
  65. operatorList,//经办人
  66. stockoutedit,//编辑
  67. stockoutdel,//删除
  68. } from "@/api";
  69. import { ElMessage, ElMessageBox } from 'element-plus'
  70. const formLabelWidth = '110px'
  71. //提交参数
  72. let initParam:any = reactive({
  73. "id":"",
  74. "date": "",
  75. "forwarding_unit": "",
  76. "medicineInfo": {},
  77. "operator":'',
  78. "quantity": null,
  79. "unit_price":Number(null)
  80. })
  81. let data:any = reactive({
  82. tableData:[],
  83. showDiaData:[],
  84. itemPir:[],
  85. itemOpen:[],
  86. rules1:{},
  87. columns:[],// 渲染表格
  88. selectType:[],//表格的下拉对应
  89. editStrot:false,
  90. editIndex:null
  91. })
  92. //显示编辑
  93. const editFun = async (row:any)=>{
  94. console.log('编辑',row)
  95. dialogFormVisible.value = true
  96. await medicListStockFun()//获取入库表单
  97. await itemPirFun()//发货单位
  98. await operatorListApi()//经办人
  99. }
  100. const emit:any = defineEmits(['scanCode','editinvent'])
  101. //重置
  102. const resetForm = (formEl: FormInstance | undefined) => {
  103. if (!formEl) return
  104. formEl.resetFields()
  105. }
  106. //提交
  107. const submitForm = async (formEl: FormInstance | undefined) => {
  108. console.log('tijiao',initParam)
  109. if (!formEl) return
  110. await formEl.validate((valid, fields) => {
  111. if (valid) {
  112. stockouteditApi()
  113. } else {
  114. ElMessage.error('请完善必填项')
  115. }
  116. })
  117. }
  118. //提交编辑
  119. const stockouteditApi = async ()=>{
  120. let param = {...initParam}
  121. param.unit_price = Number(param.unit_price)
  122. const reslut:any = await stockoutedit(param)
  123. if(reslut.code==200 && reslut.msg=='修改出库信息成功'){
  124. emit('editinvent', '');
  125. dialogFormVisible.value = false;
  126. ElMessage.success(reslut.msg)
  127. }
  128. }
  129. //收发货单位Api
  130. const itemPirFun = async()=>{
  131. const reslut:any = await stockunit({ type: 3 })
  132. data.itemPir = reslut.data?.list
  133. }
  134. //经办人Api
  135. const operatorListApi = async()=>{
  136. const reslut:any = await operatorList({})
  137. data.itemOpen = reslut.data?.list
  138. }
  139. //获取入库表单Api
  140. const medicListStockFun = async ()=>{
  141. data.columns = []
  142. const reslut:any = await medicListStock({})
  143. if(reslut.code==200 && reslut.msg=='查询成功'){
  144. data.showDiaData = reslut.data?.list
  145. data.rules1 = {}
  146. data.columns = []
  147. data.selectType = []
  148. reslut.data?.list.forEach((value:any) => { //value设置成key
  149. data.selectType.push({type:value.type,list:value.list})
  150. data.columns.push({ prop: value.field_name, label: value.name, list:value.list})
  151. initParam.medicineInfo[value.field_name] = ''; // 这里可以根据需要设置其他值作为键的内容
  152. if(['product_id','enterprise_id','spec_id','batch_number','expiry_date','approval_number'].includes(value.field_name)){
  153. if(value.type==6){
  154. data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^([1-9]\d*|0)(\.\d{1,2})?$/, message: '请输入>=0,(最多两位小数)', trigger: "blur" },]
  155. }else if(value.type==7){
  156. data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change'},{ pattern: /^(?:[1-9]\d*)$/, message: '请输入正整数', trigger: "blur" },]
  157. }else{
  158. data.rules1['medicineInfo.'+value.field_name] = [{required: true,message: '必填项',trigger: 'change',}]
  159. }
  160. }
  161. });
  162. Object.assign(rules,{...data.rules1,...syrulesData})
  163. let obj = {...props.row}
  164. Object.keys(initParam).forEach(key => {
  165. if(key!='medicineInfo'){
  166. initParam[key] = obj[key]
  167. }else{
  168. Object.keys(initParam.medicineInfo).forEach(key => {
  169. initParam.medicineInfo[key] = obj[key]
  170. })
  171. }
  172. })
  173. console.log('rules',initParam,obj)
  174. dialogFormVisible.value = true
  175. }
  176. }
  177. /**
  178. * 删除
  179. * @param row
  180. */
  181. const delClick = (row:any) => {
  182. ElMessageBox.confirm('删除一条信息,是否继续?','删除',{
  183. confirmButtonText: '确认删除',
  184. cancelButtonText: 'Cancel',
  185. type: 'warning',
  186. center: true,
  187. }).then(async() => {
  188. const reslut:any = await stockoutdel({id:row.id})
  189. console.log('删除成功',reslut)
  190. if(reslut.code==200 && reslut.msg=='删除出库信息成功'){ emit('editinvent', '');ElMessage.success(reslut.msg)}
  191. }).catch(() => {
  192. ElMessage.info('已取消删除')
  193. })
  194. }
  195. </script>
  196. <style lang="scss">
  197. .inputWidth {
  198. width: 200px;
  199. }
  200. </style>