|
@@ -0,0 +1,392 @@
|
|
|
+import {defineComponent, onMounted, reactive, ref} from 'vue'
|
|
|
+import SaveForm from '@components/save-form'
|
|
|
+import {
|
|
|
+ DataTableRowKey,
|
|
|
+ NButton,
|
|
|
+ NCascader,
|
|
|
+ NDataTable,
|
|
|
+ NDatePicker,
|
|
|
+ NDescriptions,
|
|
|
+ NDescriptionsItem,
|
|
|
+ NFormItem,
|
|
|
+ NIcon,
|
|
|
+ NImage,
|
|
|
+ NInput,
|
|
|
+ NModal,
|
|
|
+ NSelect,
|
|
|
+ NSpace,
|
|
|
+ NTag,
|
|
|
+ NTooltip,
|
|
|
+ useDialog,
|
|
|
+ useMessage
|
|
|
+} from 'naive-ui'
|
|
|
+import Pagination from '@components/pagination'
|
|
|
+import TheTooltip from '@components/TheTooltip'
|
|
|
+import AddMusic from '@views/music-library/project-music-sheet/module/gym/addMusic'
|
|
|
+import {getMapValueByKey, getSelectDataFromObj} from '@/utils/objectUtil'
|
|
|
+import {
|
|
|
+ appKey, clientType, messageSenderFunctionModule, messageSenderMode,
|
|
|
+ musicSheetAudioType,
|
|
|
+ musicSheetPaymentType,
|
|
|
+ musicSheetSourceType,
|
|
|
+ musicSheetType
|
|
|
+} from '@/utils/constant'
|
|
|
+import {
|
|
|
+ musicSheetApplicationExtendCategoryList,
|
|
|
+ musicSheetApplicationExtendDel,
|
|
|
+ musicSheetApplicationExtendStatus,
|
|
|
+ musicSheetApplicationOwnerList,
|
|
|
+ musicSheetPageByApplication,
|
|
|
+ musicSheetStatusList, sysMessageConfigPage
|
|
|
+} from '@views/music-library/api'
|
|
|
+import UpdateMusic from '@views/music-library/project-music-sheet/module/gym/updateMusic'
|
|
|
+import {subjectPage, sysApplicationPage} from '@views/system-manage/api'
|
|
|
+import {filterTimes} from '@/utils/dateUtil'
|
|
|
+import deepClone from '@/utils/deep.clone'
|
|
|
+import {getOwnerName} from '@views/music-library/musicUtil'
|
|
|
+import MusicPreView from '@views/music-library/music-sheet/modal/musicPreView'
|
|
|
+import {HelpCircleOutline} from '@vicons/ionicons5'
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'message-template-list',
|
|
|
+ props: {
|
|
|
+ appKey: {
|
|
|
+ type: String,
|
|
|
+ default: 'kT'
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ setup(props) {
|
|
|
+ const dialog = useDialog()
|
|
|
+ const message = useMessage()
|
|
|
+ const state = reactive({
|
|
|
+ loading: false,
|
|
|
+ appId: null as any,
|
|
|
+ pagination: {
|
|
|
+ page: 1,
|
|
|
+ rows: 10,
|
|
|
+ pageTotal: 0
|
|
|
+ },
|
|
|
+ searchForm: {
|
|
|
+ description: null, //消息名称
|
|
|
+ sendMode: null, // 消息类型
|
|
|
+ clientId: null, //客户端
|
|
|
+ model: null,
|
|
|
+ status: null
|
|
|
+ },
|
|
|
+ subjectList: [],
|
|
|
+ dataList: [] as any[],
|
|
|
+ musicSheetCategories: [],
|
|
|
+ showAddDialog: false,
|
|
|
+ showEditDialog: false,
|
|
|
+ userIdDisable: true,
|
|
|
+ userIdData: [] as any,
|
|
|
+ updateRow: {} as any, // 修改选择的行
|
|
|
+ applicationId: null, //应用ID
|
|
|
+ musicPreview: false,
|
|
|
+ musicScore: null as any,
|
|
|
+ useProjectData: [] as any // 适用项目行数据
|
|
|
+ })
|
|
|
+
|
|
|
+ onMounted(async () => {
|
|
|
+ state.loading = true
|
|
|
+ // 获取应用APP信息
|
|
|
+
|
|
|
+ try {
|
|
|
+ const {data} = await sysApplicationPage({page: 1, rows: 1, appKey: props.appKey})
|
|
|
+ const tempList = data.rows || []
|
|
|
+ if (!tempList || tempList.length == 0) {
|
|
|
+ state.loading = false
|
|
|
+ message.error('加载项目信息失败')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ state.appId = tempList[0].id
|
|
|
+ state.applicationId = tempList[0].id
|
|
|
+ } catch {
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载声部
|
|
|
+
|
|
|
+ try {
|
|
|
+ const {data} = await subjectPage({page: 1, rows: 999})
|
|
|
+ const tempList = data.rows || []
|
|
|
+ tempList.forEach((item: any) => {
|
|
|
+ item.label = item.name
|
|
|
+ item.value = item.id + ''
|
|
|
+ })
|
|
|
+ state.subjectList = tempList
|
|
|
+ } catch {
|
|
|
+ }
|
|
|
+
|
|
|
+ //加载曲目分类列表
|
|
|
+
|
|
|
+ try {
|
|
|
+ const {data} = await musicSheetApplicationExtendCategoryList({
|
|
|
+ applicationIds: state.appId
|
|
|
+ })
|
|
|
+ if (data && data.length > 0) {
|
|
|
+ state.musicSheetCategories = data[0].musicSheetCategories
|
|
|
+ }
|
|
|
+ } catch {
|
|
|
+ }
|
|
|
+
|
|
|
+ // 加载表格数据
|
|
|
+ initUseAppList()
|
|
|
+ getList()
|
|
|
+ })
|
|
|
+
|
|
|
+ const initUseAppList = async () => {
|
|
|
+ try {
|
|
|
+ const appKeys = Object.keys(appKey)
|
|
|
+ const {data} = await sysApplicationPage({page: 1, rows: 999})
|
|
|
+ const tempList = data.rows || []
|
|
|
+ state.useProjectData = []
|
|
|
+ const filter = tempList.filter((next: any) => {
|
|
|
+ return appKeys.includes(next.appKey)
|
|
|
+ })
|
|
|
+ filter.forEach((item: any) => {
|
|
|
+ state.useProjectData.push({
|
|
|
+ ...item,
|
|
|
+ label: item.appName,
|
|
|
+ value: item.id
|
|
|
+ })
|
|
|
+ })
|
|
|
+ } catch {
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ const saveForm = ref()
|
|
|
+
|
|
|
+ const onSearch = () => {
|
|
|
+ saveForm.value?.submit()
|
|
|
+ }
|
|
|
+ const onBtnReset = () => {
|
|
|
+ saveForm.value?.reset()
|
|
|
+ }
|
|
|
+
|
|
|
+ const onSubmit = () => {
|
|
|
+ state.pagination.page = 1
|
|
|
+ getList()
|
|
|
+ }
|
|
|
+
|
|
|
+ const checkedRowKeysRef = ref<DataTableRowKey[]>([])
|
|
|
+ const handleCheck = (rowKeys: DataTableRowKey[]) => {
|
|
|
+ checkedRowKeysRef.value = rowKeys
|
|
|
+ }
|
|
|
+
|
|
|
+ const getList = async () => {
|
|
|
+ try {
|
|
|
+ state.loading = true
|
|
|
+ const {data} = await sysMessageConfigPage({
|
|
|
+ ...state.pagination,
|
|
|
+ ...state.searchForm,
|
|
|
+ appKey: props.appKey,
|
|
|
+ })
|
|
|
+ state.pagination.pageTotal = Number(data.total)
|
|
|
+ state.dataList = data.rows || []
|
|
|
+ } catch {
|
|
|
+ }
|
|
|
+ state.loading = false
|
|
|
+ }
|
|
|
+
|
|
|
+ const onChangeStatus = (row: any) => {
|
|
|
+ const statusStr = row.status ? '停用' : '启用'
|
|
|
+ dialog.warning({
|
|
|
+ title: '提示',
|
|
|
+ content: `是否${statusStr}?`,
|
|
|
+ positiveText: '确定',
|
|
|
+ negativeText: '取消',
|
|
|
+ onPositiveClick: async () => {
|
|
|
+ try {
|
|
|
+ await musicSheetApplicationExtendStatus({
|
|
|
+ ids: row.applicationExtendId,
|
|
|
+ status: !row.status
|
|
|
+ })
|
|
|
+ getList()
|
|
|
+ message.success(`${statusStr}成功`)
|
|
|
+ } catch {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const columns = (): any => {
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ title: '消息名称',
|
|
|
+ key: 'description'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '详细类型',
|
|
|
+ key: 'sendMode',
|
|
|
+ render: (row: any) => {
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ {getMapValueByKey(row.sendMode, new Map(Object.entries(messageSenderMode)))}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '客户端',
|
|
|
+ key: 'clientId',
|
|
|
+ render: (row: any) => {
|
|
|
+ return (
|
|
|
+ <div>
|
|
|
+ {getMapValueByKey(row.clientId, new Map(Object.entries(clientType)))}
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '功能模块',
|
|
|
+ key: 'messageType'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '触发条件',
|
|
|
+ key: 'triggerCondition'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '消息模板',
|
|
|
+ key: 'content'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '示例',
|
|
|
+ key: 'contentExample'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '更新人',
|
|
|
+ key: 'operatorName'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '更新时间',
|
|
|
+ key: 'updateTime'
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '状态',
|
|
|
+ key: 'status',
|
|
|
+ render(row: any) {
|
|
|
+ return (
|
|
|
+ <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '操作',
|
|
|
+ key: 'operation',
|
|
|
+ fixed: 'right',
|
|
|
+ render(row: any) {
|
|
|
+ return (
|
|
|
+ <NSpace>
|
|
|
+ <NButton
|
|
|
+ type="primary"
|
|
|
+ size="small"
|
|
|
+ text
|
|
|
+ // v-auth="musicSheetApplicationExtend/status1751235150422736897"
|
|
|
+ onClick={() => onChangeStatus(row)}
|
|
|
+ >
|
|
|
+ {row.status ? '停用' : '启用'}
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+
|
|
|
+ return () => {
|
|
|
+ return (
|
|
|
+ <div class="system-menu-container">
|
|
|
+ <SaveForm
|
|
|
+ ref={saveForm}
|
|
|
+ model={state.searchForm}
|
|
|
+ onSubmit={onSubmit}
|
|
|
+ saveKey="message-template"
|
|
|
+ onSetModel={(val: any) => (state.searchForm = val)}
|
|
|
+ >
|
|
|
+ <NFormItem label="短信名称" path="description">
|
|
|
+ <NInput
|
|
|
+ placeholder="请输入短信名称"
|
|
|
+ v-model:value={state.searchForm.description}
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem label="短信类型" path="sendMode">
|
|
|
+ <NSelect
|
|
|
+ placeholder="全部类型"
|
|
|
+ v-model:value={state.searchForm.sendMode}
|
|
|
+ options={getSelectDataFromObj(messageSenderMode)}
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem label="客户端" path="clientId">
|
|
|
+ <NSelect
|
|
|
+ placeholder="请选择所属项目"
|
|
|
+ v-model:value={state.searchForm.clientId}
|
|
|
+ options={getSelectDataFromObj(clientType)}
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem label="功能模块" path="model">
|
|
|
+ <NSelect
|
|
|
+ filterable
|
|
|
+ placeholder="全部功能模块"
|
|
|
+ options={getSelectDataFromObj(messageSenderFunctionModule)}
|
|
|
+ clearable
|
|
|
+ ></NSelect>
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem label="状态" path="status">
|
|
|
+ <NSelect
|
|
|
+ v-model:value={state.searchForm.status}
|
|
|
+ placeholder="请选择状态"
|
|
|
+ options={
|
|
|
+ [
|
|
|
+ {
|
|
|
+ label: '启用',
|
|
|
+ value: true
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '停用',
|
|
|
+ value: false
|
|
|
+ }
|
|
|
+ ] as any
|
|
|
+ }
|
|
|
+ clearable
|
|
|
+ />
|
|
|
+ </NFormItem>
|
|
|
+ <NFormItem>
|
|
|
+ <NSpace>
|
|
|
+ <NButton type="primary" onClick={onSearch}>
|
|
|
+ 搜索
|
|
|
+ </NButton>
|
|
|
+ <NButton type="default" onClick={onBtnReset}>
|
|
|
+ 重置
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ </NFormItem>
|
|
|
+ </SaveForm>
|
|
|
+
|
|
|
+ <div class={['section-container']}>
|
|
|
+ <NDataTable
|
|
|
+ loading={state.loading}
|
|
|
+ columns={columns()}
|
|
|
+ data={state.dataList}
|
|
|
+ rowKey={(row: any) => row.applicationExtendId}
|
|
|
+ // onUpdateCheckedRowKeys={handleCheck}
|
|
|
+ scrollX={'1400'}
|
|
|
+ ></NDataTable>
|
|
|
+
|
|
|
+ <Pagination
|
|
|
+ v-model:page={state.pagination.page}
|
|
|
+ v-model:pageSize={state.pagination.rows}
|
|
|
+ v-model:pageTotal={state.pagination.pageTotal}
|
|
|
+ onList={getList}
|
|
|
+ sync
|
|
|
+ saveKey="message-template"
|
|
|
+ ></Pagination>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+})
|