Agreement.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <script setup lang="ts">
  2. import {
  3. Storehouse_IotCard_List,
  4. Storehouse_IotCard_Add,
  5. Storehouse_IotCard_Edit,
  6. Storehouse_IotCard_Del
  7. } from '@/api/storehouse/index'
  8. import { GlobalStore } from '@/stores/index'
  9. import { ref, reactive, nextTick } from 'vue'
  10. import Drawer from '@/components/Drawer/index.vue'
  11. import TableBase from '@/components/TableBase/index.vue'
  12. import type { FormInstance, FormRules } from 'element-plus'
  13. import { Edit, Delete } from '@element-plus/icons-vue'
  14. import type { ColumnProps } from '@/components/TableBase/interface/index'
  15. import { ElMessageBox, ElMessage } from 'element-plus'
  16. const isNew = ref(true)
  17. const globalStore = GlobalStore()
  18. const formLabelWidth = ref('120px')
  19. const ruleFormRef = ref<FormInstance>()
  20. const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
  21. const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
  22. const columns: ColumnProps[] = [
  23. { type: 'index', label: '序号', width: 80 },
  24. { prop: 'T_iccid', label: '物联网卡号' },
  25. { prop: 'T_sn', label: '关联SN' },
  26. { prop: 'T_State', label: '状态', name: 'T_State' },
  27. { prop: 'T_type', label: '类型' },
  28. { prop: 'operation', label: '操作', width: 200, fixed: 'right' }
  29. ]
  30. // 添加仓库名称
  31. type Fn = () => void
  32. const form = reactive({
  33. T_id: '',
  34. T_sn: '',
  35. T_type: '',
  36. T_state: null,
  37. T_iccid: ''
  38. })
  39. const validate_T_sn = (rule: any, value: any, callback: any) => {
  40. if (form.T_state === 2 && value === '') {
  41. callback(new Error('请输入关联SN'))
  42. } else {
  43. callback()
  44. }
  45. }
  46. const rules = reactive<FormRules>({
  47. T_iccid: [{ required: true, message: '请输入物联网卡号', trigger: 'blur' }],
  48. T_state: [{ required: true, message: '请选择状态', trigger: 'blur' }],
  49. T_type: [{ required: true, message: '请输入型号', trigger: 'blur' }],
  50. T_sn: [{ validator: validate_T_sn, trigger: 'blur' }]
  51. })
  52. const callbackDrawer = (done: Fn) => {
  53. resetForm(ruleFormRef.value)
  54. done()
  55. }
  56. const openDrawer = (type: string, row?: any) => {
  57. isNew.value = type === 'new' ? true : false
  58. nextTick(() => {
  59. form.T_id = row.Id
  60. form.T_sn = row.T_sn
  61. form.T_type = row.T_type
  62. form.T_state = row.T_State
  63. form.T_iccid = row.T_iccid
  64. })
  65. drawerRef.value?.openDrawer()
  66. }
  67. const resetForm = (formEl: FormInstance | undefined) => {
  68. if (!formEl) return
  69. formEl.resetFields()
  70. }
  71. const AddUserName = (formEl: FormInstance | undefined) => {
  72. if (!formEl) return
  73. formEl.validate(async valid => {
  74. if (valid) {
  75. let res: any = {}
  76. if (isNew.value) {
  77. console.log(form)
  78. res = await Storehouse_IotCard_Add({ User_tokey: globalStore.GET_User_tokey, ...form })
  79. } else {
  80. res = await Storehouse_IotCard_Edit({
  81. User_tokey: globalStore.GET_User_tokey,
  82. ...form
  83. })
  84. }
  85. if (res.Code === 200) {
  86. ElMessage.success(`${isNew.value ? '添加' : '修改'}物联网卡成功!!`)
  87. nextTick(() => {
  88. drawerRef.value?.closeDrawer()
  89. TableRef.value?.getTableList()
  90. resetForm(ruleFormRef.value)
  91. isNew.value = true
  92. })
  93. }
  94. } else {
  95. return false
  96. }
  97. })
  98. }
  99. // 删除
  100. const UserDelete = (row: any) => {
  101. ElMessageBox.confirm('您确定要删除该物联网卡号吗?', '警告', {
  102. confirmButtonText: '确定',
  103. cancelButtonText: '取消',
  104. type: 'warning'
  105. })
  106. .then(async () => {
  107. const res: any = await Storehouse_IotCard_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
  108. if (res.Code === 200) {
  109. ElMessage.success('删除成功!')
  110. nextTick(() => {
  111. TableRef.value?.getTableList()
  112. })
  113. }
  114. })
  115. .catch(() => {
  116. ElMessage.warning('取消成功!')
  117. })
  118. }
  119. // 搜索
  120. const options = reactive([
  121. { name: '未使用', id: 1 },
  122. { name: '已使用', id: 2 },
  123. { name: '已作废', id: 3 }
  124. ])
  125. const initParam = reactive({
  126. User_tokey: globalStore.GET_User_tokey,
  127. T_name: '',
  128. T_state: ''
  129. })
  130. const searchHandle = () => {
  131. TableRef.value?.searchTable()
  132. }
  133. </script>
  134. <template>
  135. <div class="agreement">
  136. <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_IotCard_List" :initParam="initParam">
  137. <template #table-header>
  138. <div class="input-suffix">
  139. <el-row :gutter="20" style="margin-bottom: 0">
  140. <el-col :xl="6" :lg="8" :md="10">
  141. <span class="inline-flex items-center">关键词:</span>
  142. <el-input
  143. v-model="initParam.T_name"
  144. type="text"
  145. class="w-50 m-2"
  146. placeholder="按物联网卡号或SN搜索"
  147. @change="searchHandle"
  148. />
  149. </el-col>
  150. <el-col :xl="10" :md="12">
  151. <span class="inline-flex items-center">产品分类:</span>
  152. <el-select v-model="initParam.T_state" class="w-50 m-2" clearable placeholder="请选择状态~">
  153. <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
  154. </el-select>
  155. <el-button type="primary" @click="searchHandle">搜索</el-button>
  156. </el-col>
  157. <el-col :xl="6" :md="2" class="btn"
  158. ><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col
  159. >
  160. </el-row>
  161. </div>
  162. </template>
  163. <template #T_State="{ row }">
  164. <el-tag v-if="row.T_State === 2" type="success" effect="dark"> 已使用 </el-tag>
  165. <el-tag v-else-if="row.T_State === 1" type="warning" effect="dark"> 未使用 </el-tag>
  166. <el-tag v-else type="info" effect="dark"> 已作废 </el-tag>
  167. </template>
  168. <template #right="{ row }">
  169. <el-button
  170. :disabled="row.T_State === 2"
  171. link
  172. type="primary"
  173. size="small"
  174. :icon="Edit"
  175. @click="openDrawer('edit', row)"
  176. >编辑</el-button
  177. >
  178. <el-button :disabled="row.T_State === 2" link type="danger" size="small" :icon="Delete" @click="UserDelete(row)"
  179. >删除</el-button
  180. >
  181. </template>
  182. </TableBase>
  183. <Drawer ref="drawerRef" :handleClose="callbackDrawer">
  184. <template #header="{ params }">
  185. <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '添加' : '编辑' }} - 物联网卡</h4>
  186. </template>
  187. <el-form ref="ruleFormRef" :model="form" :rules="rules">
  188. <el-divider border-style="dashed" />
  189. <el-form-item label="物联网卡号:" :label-width="formLabelWidth" prop="T_iccid">
  190. <el-input v-model="form.T_iccid" type="text" autocomplete="off" placeholder="请输入物联网卡号" />
  191. </el-form-item>
  192. <el-form-item label="型号:" :label-width="formLabelWidth" prop="T_type">
  193. <el-input v-model="form.T_type" type="text" autocomplete="off" placeholder="请输入型号" />
  194. </el-form-item>
  195. <el-form-item label="状态:" :label-width="formLabelWidth" prop="T_state">
  196. <el-radio-group v-model="form.T_state">
  197. <el-radio :label="2">已使用</el-radio>
  198. <el-radio :label="1">未使用</el-radio>
  199. <el-radio :label="3">已作废</el-radio>
  200. </el-radio-group>
  201. </el-form-item>
  202. <el-form-item label="关联SN:" :label-width="formLabelWidth" prop="T_sn">
  203. <el-input v-model="form.T_sn" type="text" autocomplete="off" placeholder="请输入关联SN" />
  204. </el-form-item>
  205. <el-form-item :label-width="formLabelWidth">
  206. <el-button v-if="isNew" color="#626aef" @click="AddUserName(ruleFormRef)">提交</el-button>
  207. <el-button v-else color="#626aef" @click="AddUserName(ruleFormRef)">修改</el-button>
  208. </el-form-item>
  209. </el-form>
  210. </Drawer>
  211. </div>
  212. </template>
  213. <style scoped lang="scss">
  214. .IoTNetworkCard {
  215. :deep(.el-drawer__header) {
  216. margin-bottom: 0;
  217. }
  218. .input-suffix {
  219. width: 100%;
  220. .inline-flex {
  221. white-space: nowrap;
  222. }
  223. .btn {
  224. display: flex;
  225. justify-content: end;
  226. }
  227. .w-50 {
  228. width: 12.5rem;
  229. }
  230. }
  231. }
  232. </style>