|
@@ -23,7 +23,7 @@
|
|
|
|
|
|
<div style="height: calc(100% - 60px);">
|
|
|
<hc-table
|
|
|
- v-loading="fileTableLoading"
|
|
|
+ :loading="fileTableLoading"
|
|
|
:datas="fileTableData"
|
|
|
:column="tableColumn"
|
|
|
|
|
@@ -51,17 +51,17 @@
|
|
|
</span>
|
|
|
</template>
|
|
|
|
|
|
- <template #ruleSize="{ row }">
|
|
|
+ <template #ruleSize="{ row, index }">
|
|
|
<div v-if="isShowSize">
|
|
|
- <span v-if="row.type === 1" :class="{ orange: row.isEdit }" @click="chooseFile(row)">所有节点</span>
|
|
|
+ <span v-if="row.type === 1" :class="{ orange: row.isEdit }" @click="chooseFile(row, index)">所有节点</span>
|
|
|
<div v-else>
|
|
|
- <el-link v-if="!row.ruleSizeVal" type="warning" @click="chooseFile(row)">选择题名范围</el-link>
|
|
|
- <span v-else :class="{ orange: row.isEdit }" @click="chooseFile(row)">{{ row.ruleSizeVal }}</span>
|
|
|
+ <el-link v-if="!row.ruleSizeVal" type="warning" @click="chooseFile(row, index)">选择题名范围</el-link>
|
|
|
+ <span v-else :class="{ orange: row.isEdit }" @click="chooseFile(row, index)">{{ row.ruleSizeVal }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
- <template #action="{ row }">
|
|
|
+ <template #action="{ row, index }">
|
|
|
<el-link
|
|
|
v-if="!row.isEdit"
|
|
|
type="primary"
|
|
@@ -79,8 +79,8 @@
|
|
|
保存
|
|
|
</el-link>
|
|
|
<el-link
|
|
|
+ v-del-com:[delRow]="{ row, index }"
|
|
|
type="danger"
|
|
|
- @click="delRow(row)"
|
|
|
>
|
|
|
删除
|
|
|
</el-link>
|
|
@@ -94,6 +94,45 @@
|
|
|
保存
|
|
|
</el-button>
|
|
|
</template>
|
|
|
+
|
|
|
+
|
|
|
+ <!-- 选择题名范围i -->
|
|
|
+ <hc-dialog
|
|
|
+ v-model="chooseFileVisible"
|
|
|
+ title="选择题名范围"
|
|
|
+ >
|
|
|
+ <el-form ref="fileTitleRef" label-position="left" label-width="80px" :model="fileTitleModel" :rules="fileTitleRules">
|
|
|
+ <el-form-item label="题名范围" prop="type">
|
|
|
+ <div>
|
|
|
+ <el-radio v-model="fileTitleModel.type" :value="1" @input="changeRadio">所有节点</el-radio><br>
|
|
|
+ <el-radio v-model="fileTitleModel.type" :value="2" @input="changeRadio">部分节点</el-radio>
|
|
|
+ </div>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+
|
|
|
+ <div>
|
|
|
+ <el-scrollbar v-if="fileTitleModel.type === 2" v-loading="fileTreeLoading" class="h-100p" style="height: 400px;">
|
|
|
+ <el-tree
|
|
|
+ :data="fileTreeData"
|
|
|
+ :props="fileDefaultProps"
|
|
|
+ :expand-on-click-node="false"
|
|
|
+ highlight-current
|
|
|
+ node-key="id"
|
|
|
+ show-checkbox
|
|
|
+ :default-checked-keys="deCheckTreeKeys"
|
|
|
+ @check="checkFileSize"
|
|
|
+ />
|
|
|
+ </el-scrollbar>
|
|
|
+ </div>
|
|
|
+ <template #footer>
|
|
|
+ <div class="dialog-footer">
|
|
|
+ <el-button @click="chooseFileVisible = false">取消</el-button>
|
|
|
+ <el-button type="primary" @click="saveFileSize">
|
|
|
+ 保存
|
|
|
+ </el-button>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </hc-dialog>
|
|
|
</hc-dialog>
|
|
|
</template>
|
|
|
|
|
@@ -136,9 +175,11 @@ const getNodeTypelist = async () => {
|
|
|
}
|
|
|
//获取文件题名规则
|
|
|
const getFileTableData = async () => {
|
|
|
+ fileTableLoading.value = true
|
|
|
const { data } = await privateApi.GetNameRule(
|
|
|
{ projectId:projectId.value },
|
|
|
)
|
|
|
+ fileTableLoading.value = false
|
|
|
fileTableData.value = getArrValue(data)
|
|
|
fileTableData.value.forEach((element) => {
|
|
|
element.roleNameVal = element.nameRule.split(',')
|
|
@@ -185,6 +226,7 @@ const addRow = () => {
|
|
|
// 刷新
|
|
|
const refreshRow = () => {
|
|
|
// TODO: 实现刷新逻辑
|
|
|
+ getFileTableData()
|
|
|
}
|
|
|
|
|
|
// 编辑行
|
|
@@ -193,26 +235,108 @@ const editRow = (row) => {
|
|
|
}
|
|
|
|
|
|
// 保存行
|
|
|
-const saveRow = (row) => {
|
|
|
+const saveRow = async (row) => {
|
|
|
row.isEdit = false
|
|
|
row.roleNameVal = row.ruleName.map(key => {
|
|
|
const item = nodeTypelist.value.find(i => i.dictKey === key)
|
|
|
return item?.dictValue || key
|
|
|
})
|
|
|
+ if (row.ruleName.length < 1) {
|
|
|
+ window.$message.warning('请选择文件题名规则')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (!row.type) {
|
|
|
+ window.$message.warning('请选择文件题名范围')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ row.isEdit = false
|
|
|
+ row.isEdit1 = false
|
|
|
+ const ruleName = row.ruleName.join('-')
|
|
|
+ let ruleSizeVal = ''
|
|
|
+ if (row.type == 1) {
|
|
|
+ ruleSizeVal = ''
|
|
|
+ } else {
|
|
|
+ ruleSizeVal = row.ruleSizeValId.join(',')
|
|
|
+ }
|
|
|
+
|
|
|
+ let nameRuleDtos = {
|
|
|
+ nameId:row.nameId,
|
|
|
+ nameRule:ruleName,
|
|
|
+ nodeId:ruleSizeVal,
|
|
|
+ projectId:projectId.value,
|
|
|
+ type:fileTitleModel.value.type,
|
|
|
+ }
|
|
|
+
|
|
|
+ const { data, code, msg } = await privateApi.saveOrUpdateNameRule([nameRuleDtos])
|
|
|
+ if (code === 200) {
|
|
|
+ window.$message.success(msg)
|
|
|
+ getFileTableData()
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 删除行
|
|
|
-const delRow = (row) => {
|
|
|
- const index = fileTableData.value.indexOf(row)
|
|
|
- if (index > -1) {
|
|
|
- fileTableData.value.splice(index, 1)
|
|
|
- }
|
|
|
+const delRow = async ({ item }, resolve) => {
|
|
|
+ const { row, index } = item
|
|
|
+ if (!item.nameId) {
|
|
|
+ fileTableData.value.splice(index, 1)
|
|
|
+ }
|
|
|
+ const { isRes } = await privateApi.deleteNameRule({
|
|
|
+ nameId:row.nameId,
|
|
|
+ })
|
|
|
+ resolve() //关闭弹窗
|
|
|
+ if (!isRes) return
|
|
|
+ window.$message.success('删除成功')
|
|
|
+ getFileTableData().then()
|
|
|
}
|
|
|
|
|
|
// 选择文件
|
|
|
-const chooseFile = (row) => {
|
|
|
+const chooseFileVisible = ref(false)
|
|
|
+const chooseFileIndex = ref(0)
|
|
|
+const deCheckTreeKeys = ref([])
|
|
|
+const fileTreeData = ref([])
|
|
|
+const fileTreeLoading = ref(false)
|
|
|
+const fileDefaultProps = ref({
|
|
|
+ children: 'children',
|
|
|
+ label: 'nodeName',
|
|
|
+})
|
|
|
+const checkFileSize = (data, { checkedNodes, checkedKeys }) => {
|
|
|
+ let checkedTitles = checkedNodes.map(node => node.nodeName).join('、')
|
|
|
+ fileTableData.value[chooseFileIndex.value].isEdit1 = false
|
|
|
+ const fileItem = fileTableData.value[chooseFileIndex.value]
|
|
|
+ fileItem.ruleSizeVal = checkedTitles
|
|
|
+ fileItem.ruleSizeValId = checkedKeys
|
|
|
+
|
|
|
+}
|
|
|
+const fileTitleRef = ref(null)
|
|
|
+const fileTitleModel = ref({
|
|
|
+
|
|
|
+})
|
|
|
+const fileTitleRules = ref({
|
|
|
+ type: [{ required: true, message: '请选择文件题名范围', trigger: 'change' }],
|
|
|
+})
|
|
|
+const chooseFile = (row, index) => {
|
|
|
if (!row.isEdit) return
|
|
|
// TODO: 实现选择文件逻辑
|
|
|
+ const { ruleName } = row
|
|
|
+ if (ruleName && ruleName.length > 0) {
|
|
|
+ chooseFileVisible.value = true
|
|
|
+ chooseFileIndex.value = index
|
|
|
+ deCheckTreeKeys.value = row.ruleSizeValId
|
|
|
+ getTitleRangeData()
|
|
|
+ } else {
|
|
|
+ window.$message.warning('请先选择文件题名规则')
|
|
|
+ }
|
|
|
+}
|
|
|
+const getTitleRangeData = async () => {
|
|
|
+ fileTreeLoading.value = true
|
|
|
+ const { data, code, error } = await privateApi.getTitleRange({
|
|
|
+ projectId: projectId.value,
|
|
|
+ })
|
|
|
+ fileTreeLoading.value = false
|
|
|
+ if (!error && code === 200 ) {
|
|
|
+ fileTreeData.value = getArrValue(data)
|
|
|
+ deCheckTreeKeys.value = fileTreeData.value.filter(node => node.status === 11).map(node => node.id)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// 改变规则名称
|
|
@@ -224,6 +348,18 @@ const changeRoleName = (value, row) => {
|
|
|
const batchsaveFileSize = () => {
|
|
|
// TODO: 实现批量保存逻辑
|
|
|
}
|
|
|
+const saveFileSize = () => {
|
|
|
+ // TODO: 实现保存逻辑
|
|
|
+ chooseFileVisible.value = false
|
|
|
+ if ( fileTableData.value.length > 0) {
|
|
|
+ fileTableData.value[chooseFileIndex.value].type = fileTitleModel.value.type
|
|
|
+ }
|
|
|
+}
|
|
|
+const changeRadio = (val) => {
|
|
|
+ const fileItem = fileTableData.value[chooseFileIndex.value]
|
|
|
+ fileItem.type = val
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
defineExpose({
|
|
|
show,
|