instrument-list.tsx 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. import Pagination from '@/components/pagination'
  2. import {NButton, NDataTable, NDatePicker, NFormItem, NInput, NModal, NSelect, NSpace, NTag, useDialog, useMessage} from 'naive-ui'
  3. import {defineComponent, onMounted, reactive, ref} from 'vue'
  4. import SaveForm from "@components/save-form";
  5. import {musicalInstrumentPage, musicalInstrumentUpdateStatus} from "@views/system-manage/subject-manage/api";
  6. import {getMapValueByKey} from "@/utils/filters";
  7. import {defaultScore} from "@/utils/constant";
  8. import {getSelectDataFromObj} from "@/utils/objectUtil";
  9. import InstrumentSave from "@views/system-manage/subject-manage/instrument/modal/instrument-save";
  10. import {filterTimes} from "@/utils/dateUtil";
  11. export default defineComponent({
  12. name: 'instrument-list',
  13. setup() {
  14. const dialog = useDialog()
  15. const message = useMessage()
  16. const state = reactive({
  17. loading: false,
  18. pagination: {
  19. page: 1,
  20. rows: 10,
  21. pageTotal: 0
  22. },
  23. searchForm: {
  24. keyword: '',
  25. timer: null,
  26. startTime: null,
  27. endTime: null,
  28. defaultScore: null, //默认谱面
  29. code: null, //编码
  30. operatorKeyword: null, //操作人
  31. },
  32. dataList: [] as any,
  33. showSave: false,
  34. saveMode: 'add',
  35. rowData: {},
  36. })
  37. const saveForm = ref()
  38. const onSubmit = () => {
  39. getList()
  40. }
  41. const onSearch = () => {
  42. saveForm.value?.submit()
  43. }
  44. const onChangeStatus = (row: any) => {
  45. const statusStr = row.enableFlag ? '停用' : '启用'
  46. dialog.warning({
  47. title: '警告',
  48. content: `是否${statusStr}?`,
  49. positiveText: '确定',
  50. negativeText: '取消',
  51. onPositiveClick: async () => {
  52. try {
  53. await musicalInstrumentUpdateStatus({
  54. id: row.id
  55. })
  56. getList()
  57. message.success(`${statusStr}成功`)
  58. } catch {
  59. }
  60. }
  61. })
  62. }
  63. const onBtnReset = () => {
  64. saveForm.value?.reset()
  65. }
  66. const columns = () => {
  67. return [
  68. {
  69. title: '编号',
  70. key: 'id'
  71. },
  72. {
  73. title: '乐器名称',
  74. key: 'name'
  75. },
  76. {
  77. title: '乐器编码',
  78. key: 'code'
  79. },
  80. {
  81. title: '声部',
  82. key: 'subjectName'
  83. },
  84. {
  85. title: '默认谱面',
  86. key: 'defaultScore',
  87. render(row: any) {
  88. return getMapValueByKey(row.defaultScore, new Map(Object.entries(defaultScore)));
  89. }
  90. },
  91. {
  92. title: '操作人',
  93. key: 'operator',
  94. render(row: any) {
  95. return (
  96. <div>
  97. <div>{row.operatorName}</div>
  98. <div>{row.updateTime}</div>
  99. </div>
  100. )
  101. }
  102. },
  103. {
  104. title: '状态',
  105. key: 'enableFlag',
  106. render(row: any) {
  107. return (
  108. <NTag type={row.enableFlag ? 'primary' : 'default'}>{row.enableFlag ? '启用' : '停用'}</NTag>
  109. )
  110. }
  111. },
  112. {
  113. title: '操作',
  114. key: 'operation',
  115. render(row: any) {
  116. return (
  117. <NSpace>
  118. <NButton
  119. type="primary"
  120. size="small"
  121. text
  122. //v-auth="cityFeeSetting/update1597887290159779842"
  123. onClick={() => {
  124. state.rowData = row
  125. state.showSave = true
  126. state.saveMode = 'edit'
  127. }}
  128. >
  129. 修改
  130. </NButton>
  131. <NButton
  132. type="primary"
  133. size="small"
  134. text
  135. //v-auth="sysNotice/status1599959101026455553"
  136. onClick={() => onChangeStatus(row)}
  137. >
  138. {row.enableFlag ? '停用' : '启用'}
  139. </NButton>
  140. </NSpace>
  141. )
  142. }
  143. }
  144. ]
  145. }
  146. const getList = async () => {
  147. try {
  148. state.loading = true
  149. const {data} = await musicalInstrumentPage({
  150. ...state.pagination, ...state.searchForm,
  151. ...filterTimes(state.searchForm.timer, ['startTime', 'endTime']),
  152. })
  153. state.loading = false
  154. state.pagination.pageTotal = Number(data.total)
  155. state.dataList = data.rows || []
  156. } catch {
  157. state.loading = false
  158. }
  159. }
  160. onMounted(() => {
  161. getList()
  162. })
  163. return () => (
  164. <div class="system-menu-container">
  165. <div class={['section-container']}>
  166. <SaveForm
  167. ref={saveForm}
  168. model={state.searchForm}
  169. onSubmit={onSubmit}
  170. onSetModel={(val: any) => Object.assign(state.searchForm, val)}
  171. saveKey="instrument-list"
  172. >
  173. <NFormItem path="keyword" label="关键字">
  174. <NInput
  175. placeholder="请输入编号/名称"
  176. v-model:value={state.searchForm.keyword}
  177. clearable
  178. />
  179. </NFormItem>
  180. <NFormItem path="defaultScore" label="默认谱面">
  181. <NSelect
  182. options={getSelectDataFromObj(defaultScore)}
  183. v-model:value={state.searchForm.defaultScore}
  184. placeholder="请选择默认谱面"
  185. clearable
  186. />
  187. </NFormItem>
  188. <NFormItem path="code" label="乐器编码">
  189. <NInput
  190. v-model:value={state.searchForm.code}
  191. placeholder="请输入乐器编码"
  192. clearable
  193. />
  194. </NFormItem>
  195. <NFormItem path="operatorName" label="操作人">
  196. <NInput
  197. v-model:value={state.searchForm.operatorKeyword}
  198. placeholder="请输入操作人"
  199. clearable
  200. />
  201. </NFormItem>
  202. <NFormItem path="updateTime" label="操作时间">
  203. <NDatePicker v-model:value={state.searchForm.timer} type="daterange" clearable/>
  204. </NFormItem>
  205. <NFormItem>
  206. <NSpace>
  207. <NButton type="primary" onClick={onSearch}>
  208. 搜索
  209. </NButton>
  210. <NButton type="default" onClick={onBtnReset}>
  211. 重置
  212. </NButton>
  213. </NSpace>
  214. </NFormItem>
  215. </SaveForm>
  216. <NSpace style={{paddingBottom: '12px'}}>
  217. <NButton
  218. type="primary"
  219. //v-auth="musicSheetCategories/save1608067543331045378"
  220. onClick={() => {
  221. state.rowData = {}
  222. state.showSave = true
  223. state.saveMode = 'add'
  224. }}
  225. >
  226. 添加
  227. </NButton>
  228. </NSpace>
  229. <NDataTable
  230. loading={state.loading}
  231. columns={columns()}
  232. data={state.dataList}
  233. rowKey={(row: any) => row.id}
  234. ></NDataTable
  235. >
  236. <Pagination
  237. v-model:page={state.pagination.page}
  238. v-model:pageSize={state.pagination.rows}
  239. v-model:pageTotal={state.pagination.pageTotal}
  240. onList={getList}
  241. sync
  242. saveKey="login-device"
  243. ></Pagination>
  244. </div>
  245. <NModal
  246. v-model:show={state.showSave}
  247. preset="dialog"
  248. showIcon={false}
  249. title={state.saveMode === 'add' ? '新增乐器' : '修改乐器'}
  250. style={{width: '500px'}}
  251. >
  252. <InstrumentSave
  253. type={state.saveMode}
  254. data={state.rowData}
  255. onClose={() => (state.showSave = false)}
  256. onGetList={getList}
  257. />
  258. </NModal>
  259. </div>
  260. )
  261. }
  262. })