IoTNetworkCard.vue 8.0 KB

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