washNotice.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  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 type { VbFormItem } from "@/components/Forms/models"
  6. import Rs from "@/core/services/RequestService"
  7. import { ElDatePicker, ElInput, ElSelect } from "element-plus"
  8. import { dialog } from "@/core/utils/message"
  9. const table = ref()
  10. const cols = ref([
  11. {
  12. name: "序号",
  13. field: configs.TABLE_INDEX_FIELD,
  14. width: 60,
  15. },
  16. {
  17. name: "通知名称",
  18. field: "warn_type_name",
  19. },
  20. {
  21. name: "通知单位",
  22. field: "org_name",
  23. },
  24. {
  25. name: "通知人",
  26. field: "notifier",
  27. },
  28. {
  29. name: "通知时间",
  30. field: "notice_time_str",
  31. },
  32. {
  33. name: "状态",
  34. field: "stateC",
  35. },
  36. {
  37. name: "操作",
  38. field: "action",
  39. width: 150,
  40. },
  41. ])
  42. const size = ref<any>("default")
  43. const dySearchSelectStyle = { width: "180px" }
  44. const state = ref("")
  45. const queryParams = ref<any>({
  46. type: "1",
  47. state: state.value,
  48. })
  49. const selectList = [
  50. {
  51. label: "未回复",
  52. value: "0",
  53. },
  54. {
  55. label: "已回复",
  56. value: "1",
  57. },
  58. ]
  59. function query() {
  60. queryParams.value = {
  61. type: "1",
  62. state: state.value,
  63. }
  64. }
  65. function reset() {
  66. state.value = ""
  67. query()
  68. }
  69. const operationType = ref<"D" | "R">("D")
  70. const modal = ref()
  71. const modalTitle = computed(() => {
  72. return operationType.value == "D" ? "通知详情" : operationType.value == "R" ? "回复通知" : ""
  73. })
  74. const formData = ref<any>({})
  75. const formItems = computed(() => {
  76. return (
  77. operationType.value == "R"
  78. ? [
  79. {
  80. label: "是否清洗",
  81. field: "is_clear",
  82. placeholder: "请选择处理状态",
  83. required: true,
  84. component: ElSelect,
  85. data: [
  86. {
  87. label: "未清洗",
  88. value: "0",
  89. },
  90. {
  91. label: "已清洗",
  92. value: "1",
  93. },
  94. ],
  95. span: 12,
  96. },
  97. {
  98. label: "清洗日期",
  99. field: "clear_date",
  100. required: true,
  101. component: ElDatePicker,
  102. props: {
  103. type: "date",
  104. placeholder: "请选择清洗日期",
  105. },
  106. span: 12,
  107. },
  108. {
  109. label: "回复备注",
  110. field: "remark",
  111. placeholder: "请输入回复备注",
  112. component: ElInput,
  113. type: "textarea",
  114. span: 24,
  115. },
  116. ]
  117. : operationType.value == "D"
  118. ? []
  119. : []
  120. ) as Array<VbFormItem>
  121. })
  122. const details = ref<any>({})
  123. function detail(row: any) {
  124. operationType.value = "D"
  125. details.value = Object.assign({}, row)
  126. modal.value.show()
  127. }
  128. function reply(row: any) {
  129. operationType.value = "R"
  130. formData.value = {
  131. id: row.id,
  132. is_clear: "0",
  133. clear_date: new Date(),
  134. remark: "",
  135. }
  136. modal.value.show()
  137. }
  138. function onSave() {
  139. if (operationType.value == "D") {
  140. return
  141. }
  142. dialog.confirm("回复只能提交一次,点击取消检查确认,点击确定立刻提交回复!", "确认回复", function (v: any) {
  143. if (v.isConfirmed) {
  144. formData.value.clear_date = moment(formData.value.clear_date).format("YYYYMMDD")
  145. Rs.post("sys/notice/reply", { data: formData.value }).then(() => {
  146. table.value.search()
  147. modal.value.hide()
  148. })
  149. }
  150. })
  151. }
  152. </script>
  153. <template>
  154. <VbDataTable
  155. ref="table"
  156. :header="cols"
  157. url="sys/notice/selectNoticeList"
  158. method="post"
  159. :query-params="queryParams"
  160. :has-checkbox="false"
  161. >
  162. <template v-slot:table-tool>
  163. <el-form class="align-items-center" :inline="true">
  164. <el-form-item class="mb-0 me-5 align-items-center" label="处理状态">
  165. <el-select v-model="state" :style="dySearchSelectStyle" placeholder="请选择处理状态" :size="size">
  166. <el-option v-for="(v, i) in selectList" :key="i" :label="v.label" :value="v.value"></el-option>
  167. </el-select>
  168. </el-form-item>
  169. <el-form-item class="mb-0 me-0 align-items-center">
  170. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
  171. <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
  172. </el-form-item>
  173. </el-form>
  174. </template>
  175. <template #stateC="{ row }">
  176. <span v-if="row.state == '0'" class="badge badge-primary">未回复</span>
  177. <span v-if="row.state == '1'" class="badge badge-success">已回复</span>
  178. </template>
  179. <template #action="{ row }">
  180. <span class="table-action" @click="detail(row)">详情</span>
  181. <span v-if="row.state == '0'" class="table-action" @click="reply(row)">回复</span>
  182. </template>
  183. </VbDataTable>
  184. <VbModal
  185. v-model:modal="modal"
  186. v-model:form-data="formData"
  187. :form-items="formItems"
  188. :title="modalTitle"
  189. :confirm-btn="operationType == 'R'"
  190. :close-btn-class="`btn btn-${operationType == 'R' ? 'light' : 'primary'}`"
  191. :save-auto-close="false"
  192. @confirm="onSave"
  193. >
  194. <template v-if="operationType == 'D'" #body>
  195. <div style="border-bottom: 1px solid rgba(232, 232, 232, 1); padding: 10px 30px 24px; margin-bottom: 24px">
  196. <p style="color: #1890ff; padding-bottom: 10px">您有新的清洗任务需要马上执行</p>
  197. <p>
  198. 设施名称:
  199. <span style="color: #1890ff">{{ details.device_name }}</span>
  200. </p>
  201. <p>
  202. 清洗周期(天):
  203. <span style="color: #1890ff">{{ details.clean_cycle_day }}天</span>
  204. </p>
  205. <p>
  206. 清洗周期(小时):
  207. <span style="color: #1890ff">{{ details.clean_cycle_hour }}小时</span>
  208. </p>
  209. <p style="color: #ff0000; padding-top: 10px">清洗后请上传凭证</p>
  210. </div>
  211. <el-row>
  212. <el-col :offset="18" :span="6">
  213. <dl>
  214. <dt>通知人:</dt>
  215. <dd>{{ details.notifier }}</dd>
  216. </dl>
  217. </el-col>
  218. <el-col :offset="18" :span="6">
  219. <dl>
  220. <dt>通知部门:</dt>
  221. <dd>{{ details.org_name }}</dd>
  222. </dl>
  223. </el-col>
  224. </el-row>
  225. </template>
  226. </VbModal>
  227. </template>