query.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413
  1. <template>
  2. <PageWrapper contentBackground>
  3. <template #footer>
  4. <a-tabs v-model:activeKey="tableType" @change="changeTable">
  5. <a-tab-pane :key="null" :tab="t('routes.spares.tableType.-1')" />
  6. <a-tab-pane :key="0" :tab="t('routes.spares.tableType.0')" />
  7. <a-tab-pane :key="1" :tab="t('routes.spares.tableType.1')" />
  8. <a-tab-pane :key="2" :tab="t('routes.spares.tableType.2')" />
  9. <a-tab-pane :key="3" :tab="t('routes.spares.tableType.3')" />
  10. <a-tab-pane :key="4" :tab="t('routes.spares.tableType.4')" />
  11. <a-tab-pane :key="5" :tab="t('routes.spares.tableType.5')" />
  12. <a-tab-pane :key="6" :tab="t('routes.spares.tableType.6')" />
  13. <a-tab-pane :key="7" :tab="t('routes.spares.tableType.7')" />
  14. <a-tab-pane :key="8" :tab="t('routes.spares.tableType.8')" />
  15. <a-tab-pane :key="9" :tab="t('routes.spares.tableType.9')" />
  16. <a-tab-pane :key="10" :tab="t('routes.spares.tableType.10')" />
  17. </a-tabs></template
  18. >
  19. <div class="desc-wrap-BasicTable">
  20. <BasicTable @register="registerTable">
  21. <template #action="{ record }">
  22. <TableAction
  23. stopButtonPropagation
  24. :actions="[
  25. {
  26. label: '详情',
  27. color: 'error',
  28. onClick: handleDetail.bind(null, record),
  29. },
  30. ]"
  31. />
  32. </template>
  33. </BasicTable>
  34. <recoveryModal @update="reload" @register="registerRecovery" />
  35. <!-- ifShow: getCheckPerm('device-out') && !Boolean(record.outType), -->
  36. </div>
  37. </PageWrapper>
  38. </template>
  39. <script lang="ts">
  40. import { defineComponent, onMounted, ref } from 'vue';
  41. import { PageWrapper } from '/@/components/Page';
  42. import {
  43. BasicTable,
  44. useTable,
  45. TableAction,
  46. BasicColumn,
  47. TableImg,
  48. FormProps,
  49. } from '/@/components/Table';
  50. import { Tabs } from 'ant-design-vue';
  51. import { operateSceneList } from '/@/api/operate';
  52. import { useI18n } from '/@/hooks/web/useI18n';
  53. import { usePermissionStore } from '/@/store/modules/permission';
  54. import recoveryModal from './recoveryModal.vue';
  55. import { useModal } from '/@/components/Modal';
  56. import { useRouter } from 'vue-router'
  57. import { queryList, faultAllList, getByRoleType } from '/@/api/spares';
  58. export default defineComponent({
  59. components: {
  60. BasicTable,
  61. TableAction,
  62. TableImg,
  63. recoveryModal,
  64. PageWrapper,
  65. [Tabs.name]: Tabs,
  66. [Tabs.TabPane.name]: Tabs.TabPane,
  67. },
  68. setup() {
  69. const { t } = useI18n();
  70. const permissionStore = usePermissionStore();
  71. const router = useRouter()
  72. const { getCheckPerm } = permissionStore;
  73. const tableType = ref<Recordable>(0); //0看看 、1看见、2深时
  74. onMounted(() => {
  75. // console.log(router.currentRoute.value.params.id);
  76. });
  77. const columns: BasicColumn[] = [
  78. {
  79. title: '报修日期',
  80. dataIndex: 'createTime',
  81. width: 180,
  82. },
  83. {
  84. title: '客户名称',
  85. dataIndex: 'operationType',
  86. width: 80,
  87. customRender: ({ record }) => {
  88. return t(`routes.equity.operation.${record.operationType || 0}`);
  89. },
  90. },
  91. {
  92. title: '产品类型',
  93. dataIndex: 'cameraType',
  94. width: 80,
  95. customRender: ({ record }) => {
  96. return t(`routes.equity.operation.${record.cameraType || 0}`);
  97. },
  98. },
  99. {
  100. title: '产品SN码',
  101. dataIndex: 'cameraSnCode',
  102. width: 100,
  103. },
  104. {
  105. title: '报修方式',
  106. dataIndex: 'receiverType',
  107. width: 100,
  108. customRender: ({ record }) => {
  109. return record.receiverType == 0 ? '系统录单' : '公众号报修';
  110. },
  111. },
  112. {
  113. title: '保修类型',
  114. dataIndex: 'warrantyType',
  115. width: 100,
  116. customRender: ({ record }) => {
  117. return record.warrantyType == 0 ? '保修期内' : record.warrantyType == 1 ? '保修期外' : '非保修项目';
  118. },
  119. },{
  120. title: '售后工程师',
  121. dataIndex: 'saleName',
  122. width: 100,
  123. },{
  124. title: '接单日期',
  125. dataIndex: 'createTime',
  126. width: 100,
  127. },
  128. {
  129. title: '故障分析',
  130. dataIndex: 'checkResult',
  131. width: 100,
  132. },
  133. {
  134. title: '维修工程师',
  135. dataIndex: 'repairManName',
  136. width: 100,
  137. },{
  138. title: '维修完成日期',
  139. dataIndex: 'testPassTime',
  140. width: 100,
  141. },
  142. {
  143. title: '状态',
  144. dataIndex: 'status',
  145. width: 100,
  146. customRender: ({ record }) => {
  147. return t(`routes.spares.tableType.${record.status || 0}`);
  148. },
  149. },
  150. {
  151. title: '维修单号',
  152. dataIndex: 'repairId',
  153. width: 100,
  154. },
  155. {
  156. title: t('common.operating'),
  157. dataIndex: 'action',
  158. slots: { customRender: 'action' },
  159. ifShow: true,
  160. fixed: 'right',
  161. flag: 'ACTION',
  162. width: 120,
  163. },
  164. ];
  165. const searchForm: Partial<FormProps> = {
  166. labelWidth: 120,
  167. autoAdvancedLine: 1,
  168. actionColOptions: {
  169. span: 24,
  170. },
  171. schemas: [
  172. {
  173. field: 'type',
  174. component: 'Select',
  175. label: t('routes.device.deviceType'),
  176. colProps: {
  177. span: 7,
  178. },
  179. componentProps: {
  180. options: [
  181. {
  182. label: '公众号保修',
  183. value: 0,
  184. key: '0',
  185. },{
  186. label: '后台录单',
  187. value: 1,
  188. key: '1',
  189. },
  190. ],
  191. },
  192. },{
  193. field: 'type',
  194. component: 'Select',
  195. label: t('routes.device.deviceType'),
  196. colProps: {
  197. span: 7,
  198. },
  199. componentProps: {
  200. options: [
  201. {
  202. label: t('routes.device.type.1'),
  203. value: 0,
  204. key: '0',
  205. },
  206. {
  207. label: t('routes.device.type.2'),
  208. value: 1,
  209. key: '1',
  210. },
  211. {
  212. label: t('routes.device.type.3'),
  213. value: 2,
  214. key: '2',
  215. },
  216. ],
  217. },
  218. },{
  219. field: 'cameraSnCode',
  220. component: 'Input',
  221. label: 'SN码',
  222. colProps: {
  223. span: 7,
  224. },
  225. },{
  226. field: 'customerName',
  227. component: 'Input',
  228. label: '客户名称',
  229. colProps: {
  230. span: 7,
  231. },
  232. },{
  233. field: 'warrantyType',
  234. component: 'Select',
  235. label: '保修类型',
  236. colProps: {
  237. span: 7,
  238. },
  239. componentProps: {
  240. options: [
  241. {
  242. label: '保修期内',
  243. value: 0,
  244. key: '0',
  245. },{
  246. label: '保修期外',
  247. value: 1,
  248. key: '1',
  249. },{
  250. label: '非保修项目',
  251. value: 2,
  252. key: '2',
  253. },
  254. ],
  255. },
  256. },{
  257. field: 'faultId',
  258. component: 'ApiSelect',
  259. label: '故障类型',
  260. componentProps: {
  261. maxLength: 50,
  262. api: faultAllList,
  263. numberToString: true,
  264. labelField: 'faultMsg',
  265. valueField: 'faultId',
  266. immediate: true,
  267. },
  268. colProps: {
  269. span: 7,
  270. },
  271. },{
  272. field: 'saleId',
  273. label: '售后工程师',
  274. component: 'ApiSelect',
  275. componentProps: {
  276. api: getByRoleType,
  277. numberToString: true,
  278. labelField: 'nickName',
  279. valueField: 'id',
  280. immediate: true,
  281. params: {
  282. roleType: 2,
  283. },
  284. },
  285. colProps: {
  286. span: 7,
  287. },
  288. },{
  289. field: 'repairManId',
  290. label: '维修工程师',
  291. component: 'ApiSelect',
  292. componentProps: {
  293. api: getByRoleType,
  294. numberToString: true,
  295. labelField: 'nickName',
  296. valueField: 'id',
  297. immediate: true,
  298. params: {
  299. roleType: 3,
  300. },
  301. },
  302. colProps: {
  303. span: 7,
  304. },
  305. },{
  306. field: 'payStatus',
  307. component: 'Select',
  308. label: '支付状态',
  309. colProps: {
  310. span: 7,
  311. },
  312. componentProps: {
  313. options: [
  314. {
  315. label: '待支付',
  316. value: 0,
  317. key: '0',
  318. },{
  319. label: '已支付',
  320. value: 1,
  321. key: '1',
  322. },
  323. ],
  324. },
  325. },{
  326. field: 'commentStatus',
  327. component: 'Select',
  328. label: '支付状态',
  329. colProps: {
  330. span: 7,
  331. },
  332. componentProps: {
  333. options: [
  334. {
  335. label: '未评论',
  336. value: 0,
  337. key: '0',
  338. },{
  339. label: '已评论',
  340. value: 1,
  341. key: '1',
  342. },
  343. ],
  344. },
  345. },
  346. {
  347. field: 'timeList',
  348. label: '报修日期',
  349. component: 'RangePicker',
  350. componentProps: {
  351. maxLength: 100,
  352. format: 'YYYY-MM-DD',
  353. valueFormat: 'YYYY-MM-DD',
  354. showTime: true,
  355. },
  356. colProps: {
  357. span: 7,
  358. },
  359. },
  360. ],
  361. };
  362. const [registerRecovery, { openModal }] = useModal();
  363. const [registerTable, { reload }] = useTable({
  364. api: queryList,
  365. columns: columns,
  366. useSearchForm: true,
  367. searchInfo: { status: tableType },
  368. formConfig: searchForm,
  369. showTableSetting: true,
  370. showIndexColumn: false,
  371. fetchSetting: {
  372. pageField: 'pageNum',
  373. sizeField: 'pageSize',
  374. listField: 'list',
  375. totalField: 'total',
  376. },
  377. canResize: false,
  378. });
  379. async function handleDetail(record: Recordable) {
  380. console.log('record', record);
  381. router.push({path:`detail/${record.repairId||'20230215174919387'}`})
  382. }
  383. async function handleRecover(record: Recordable) {
  384. openModal(true, {
  385. ...record,
  386. });
  387. }
  388. function changeTable(val: string) {
  389. tableType.value = val;
  390. reload();
  391. }
  392. return {
  393. registerTable,
  394. reload,
  395. t,
  396. tableType,
  397. changeTable,
  398. getCheckPerm,
  399. handleDetail,
  400. handleRecover,
  401. registerRecovery,
  402. };
  403. },
  404. });
  405. </script>
  406. <style lang="less" scoped>
  407. .desc-wrap-BasicTable {
  408. background-color: #f0f2f5;
  409. .vben-basic-table-form-container {
  410. padding: 0;
  411. }
  412. }
  413. </style>