abnormal_declare.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. <script setup lang="ts">
  2. import { ref, computed } from "vue"
  3. import configs from "@/core/config/Index"
  4. import moment from "moment"
  5. import DySelect from "@/components/select/DySelect.vue"
  6. import { ElDatePicker, ElInput } from "element-plus"
  7. import type { VbFormItem } from "@/components/Forms/models"
  8. import Rs from "@/core/services/RequestService"
  9. const table = ref()
  10. const cols = ref<any>([
  11. {
  12. name: "序号",
  13. field: configs.TABLE_INDEX_FIELD,
  14. width: 60,
  15. },
  16. {
  17. name: "设施名称",
  18. field: "device_name",
  19. },
  20. {
  21. name: "申报时间",
  22. field: "abnormal_date",
  23. },
  24. {
  25. name: "申报周期",
  26. field: "maintain_times",
  27. width: 350,
  28. },
  29. {
  30. name: "申报类型",
  31. field: "declare_type_name",
  32. },
  33. {
  34. name: "审批状态",
  35. field: "audit_state_name",
  36. },
  37. {
  38. name: "操作",
  39. field: "action",
  40. width: 160,
  41. },
  42. ])
  43. const size = ref<any>("default")
  44. const dySearchSelectStyle = { width: "180px" }
  45. const auditStateSelectList = [
  46. {
  47. label: "未审核",
  48. value: "0",
  49. },
  50. {
  51. label: "审核通过",
  52. value: "1",
  53. },
  54. {
  55. label: "审核未通过",
  56. value: "2",
  57. },
  58. ]
  59. const auditState = ref("")
  60. const dateRange = ref<any>("")
  61. const queryParams = ref({
  62. audit_state: auditState.value,
  63. declare_time_query_start: "",
  64. declare_time_query_end: "",
  65. })
  66. function query() {
  67. if (dateRange.value[0]) {
  68. queryParams.value = {
  69. audit_state: auditState.value,
  70. declare_time_query_start: moment(dateRange.value[0]).format("YYYYMMDD"),
  71. declare_time_query_end: moment(dateRange.value[1]).format("YYYYMMDD"),
  72. }
  73. } else {
  74. queryParams.value = {
  75. audit_state: auditState.value,
  76. declare_time_query_start: "",
  77. declare_time_query_end: "",
  78. }
  79. }
  80. }
  81. function reset() {
  82. auditState.value = ""
  83. dateRange.value = ""
  84. query()
  85. }
  86. const operationType = ref<"D" | "C">("D")
  87. const modal = ref()
  88. const modalTitle = computed(() => {
  89. return operationType.value == "C" ? "添加申报" : operationType.value == "D" ? "申报详情" : ""
  90. })
  91. const formItems = computed(() => {
  92. return (
  93. operationType.value == "C"
  94. ? [
  95. {
  96. label: "维护设备",
  97. field: "device_id",
  98. placeholder: "请选择维护设备",
  99. required: true,
  100. component: DySelect,
  101. props: {
  102. url: "sys/monitor/getDeviceList",
  103. },
  104. span: 12,
  105. },
  106. {
  107. label: "维护类型",
  108. field: "maintain_type",
  109. placeholder: "请选择维护类型",
  110. required: true,
  111. component: DySelect,
  112. props: {
  113. url: "sys/dict/getList?code=000120001&key=temp",
  114. formatRemoteData: (v: any) => {
  115. return v?.list
  116. },
  117. },
  118. span: 12,
  119. },
  120. {
  121. label: "维护周期",
  122. field: "date",
  123. required: true,
  124. component: ElDatePicker,
  125. props: {
  126. type: "datetimerange",
  127. startPlaceholder: "开始时间",
  128. endPlaceholder: "结束时间",
  129. rangeSeparator: "~",
  130. format: "YYYY-MM-DD HH:mm",
  131. disabledDate: (v: any) => {
  132. if (v <= moment().add(7, "day")) {
  133. if (v >= moment().startOf("day")) {
  134. return false
  135. }
  136. }
  137. return true
  138. },
  139. },
  140. span: 24,
  141. },
  142. {
  143. label: "申报备注",
  144. field: "description",
  145. placeholder: "请输入申报备注",
  146. component: ElInput,
  147. type: "textarea",
  148. span: 24,
  149. },
  150. ]
  151. : operationType.value == "D"
  152. ? []
  153. : []
  154. ) as Array<VbFormItem>
  155. })
  156. const formData = ref<any>({})
  157. const emptyDate = {
  158. device_id: "",
  159. description: "",
  160. maintain_type: "",
  161. }
  162. function add() {
  163. operationType.value = "C"
  164. formData.value = Object.assign({}, emptyDate)
  165. formData.value.date = ""
  166. modal.value.show()
  167. }
  168. const details = ref<any>({})
  169. function detail(row: any) {
  170. operationType.value = "D"
  171. details.value = {
  172. device_name: row.device_name,
  173. description: row.description,
  174. maintain_times: row.maintain_times.substring(0, 19),
  175. maintain_times_end: row.maintain_times.substring(20, 39),
  176. maintain_type_name: row.maintain_type_name,
  177. }
  178. modal.value.show()
  179. }
  180. function onSave() {
  181. if (operationType.value == "D") {
  182. return
  183. }
  184. const data = {
  185. device_id: formData.value.device_id,
  186. declare_type: "1",
  187. description: formData.value.description,
  188. maintain_type: formData.value.maintain_type,
  189. begin_date: moment(formData.value.date[0]).format("YYYYMMDDHHmmss"),
  190. end_date: moment(formData.value.date[1]).format("YYYYMMDDHHmmss"),
  191. }
  192. Rs.post("sys/companyDeclare/newDeclare", { data }).then(() => {
  193. table.value.search()
  194. })
  195. }
  196. </script>
  197. <template>
  198. <VbDataTable
  199. ref="table"
  200. :header="cols"
  201. url="sys/companyDeclare/getCompanyMaintainList"
  202. method="post"
  203. :query-params="queryParams"
  204. :has-checkbox="false"
  205. >
  206. <template v-slot:table-tool="">
  207. <el-form class="align-items-center" :inline="true">
  208. <el-form-item class="mb-0 me-5 align-items-center">
  209. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="add">新建申报</el-button>
  210. </el-form-item>
  211. <el-form-item class="mb-0 me-5 align-items-center" label="审批状态">
  212. <el-select v-model="auditState" :style="dySearchSelectStyle" :size="size" placeholder="请选择审批状态">
  213. <el-option v-for="(v, i) in auditStateSelectList" :key="i" :label="v.label" :value="v.value"></el-option>
  214. </el-select>
  215. </el-form-item>
  216. <el-form-item class="mb-0 me-0 align-items-center" label="日期">
  217. <el-date-picker
  218. v-model="dateRange"
  219. type="daterange"
  220. range-separator="~"
  221. start-placeholder="开始时间"
  222. end-placeholder="结束时间"
  223. size="default"
  224. />
  225. </el-form-item>
  226. <el-form-item class="mb-0 me-0 align-items-center">
  227. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
  228. <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
  229. </el-form-item>
  230. </el-form>
  231. </template>
  232. <template #abnormal_date="{ row }">
  233. {{ moment(row.abnormal_date, "YYYYMMDDHHmmss").format("YYYY-MM-DD") }}
  234. </template>
  235. <template #audit_state_name="{ row }">
  236. <span
  237. class="badge"
  238. :class="`badge-${row.audit_state == 0 ? 'primary' : row.audit_state == 1 ? 'success' : 'danger'}`"
  239. >
  240. {{ row["audit_state_name"] }}
  241. </span>
  242. </template>
  243. <template #action="{ row }">
  244. <span class="table-action" @click="detail(row)">申报详情</span>
  245. </template>
  246. </VbDataTable>
  247. <VbModal
  248. v-model:modal="modal"
  249. v-model:form-data="formData"
  250. :form-items="formItems"
  251. :title="modalTitle"
  252. :confirm-btn="operationType == 'C'"
  253. :close-btn-class="`btn btn-${operationType == 'C' ? 'light' : 'primary'}`"
  254. @confirm="onSave"
  255. >
  256. <template v-if="operationType == 'D'" #body>
  257. <el-row>
  258. <el-col :span="12">
  259. <dl>
  260. <dt>维护设备:</dt>
  261. <dd>{{ details.device_name }}</dd>
  262. </dl>
  263. </el-col>
  264. <el-col :span="12">
  265. <dl>
  266. <dt>维护类型:</dt>
  267. <dd>{{ details.maintain_type_name }}</dd>
  268. </dl>
  269. </el-col>
  270. <el-col :span="12">
  271. <dl>
  272. <dt>开始时间:</dt>
  273. <dd>{{ details.maintain_times }}</dd>
  274. </dl>
  275. </el-col>
  276. <el-col :span="12">
  277. <dl>
  278. <dt>结束时间:</dt>
  279. <dd>{{ details.maintain_times_end }}</dd>
  280. </dl>
  281. </el-col>
  282. <el-col :span="24">
  283. <dl>
  284. <dt>申报备注:</dt>
  285. <dd>{{ details.description }}</dd>
  286. </dl>
  287. </el-col>
  288. </el-row>
  289. </template>
  290. </VbModal>
  291. </template>