CreateFloder.vue 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <template>
  2. <div>
  3. <div>
  4. <el-dialog v-model="addBoser" :title="upFolderData?'修改':'新建文件夹'" width="30%" @close="diClose">
  5. <el-form :model="boserForm" label-width="120px">
  6. <el-form-item label="目录名称" >
  7. <el-input v-model="boserForm.dirName" placeholder="请输入不多于32位字符" maxlength='32'/>
  8. </el-form-item>
  9. <el-form-item label="目录分类" v-if="free || (!free && thisType.dirType != '2' )">
  10. <el-radio-group :disabled="upFolderData" v-model="boserForm.dirType">
  11. <el-radio :label="1">公开目录</el-radio>
  12. <el-radio :label="2">组织目录</el-radio>
  13. </el-radio-group>
  14. </el-form-item>
  15. <template v-if="(boserForm.dirType === 2 || thisType.dirType == '2')">
  16. <template v-if="!upFolderData && (free || (!free && thisType.dirType != '2' ))">
  17. <el-form-item label="是否加密" v-if="!FolderRole?.levelCode || free">
  18. <el-switch v-model="boserForm.isEncrypt" active-value="Y" inactive-value="N" />
  19. </el-form-item>
  20. <el-form-item label="加密等级" v-if=" (!FolderRole?.levelCode || free) && boserForm.isEncrypt === 'Y'">
  21. <el-radio-group v-model="boserForm.encryptLevel">
  22. <el-radio :label="item.levelCode" v-for="item in levelList" :key="item">{{item.levelName}}</el-radio>
  23. </el-radio-group>
  24. </el-form-item>
  25. <el-form-item label="私有访问码" v-if=" (!FolderRole?.levelCode || free) && boserForm.isEncrypt === 'Y' && needCode">
  26. <el-input v-model="boserForm.accessCode" type="password" show-password />
  27. </el-form-item>
  28. </template>
  29. <template v-if="(thisRole.length<1 || free) && (free || (!free && thisType.dirType != '2' ))">
  30. <el-form-item v-if="!FolderRole?.levelCode || free" label="成员权限">
  31. <el-checkbox-group v-model="boserForm.memberRoles">
  32. <el-checkbox v-for="item in dir_rules" :key="item.value" :label="item.value">{{item.label}}</el-checkbox>
  33. </el-checkbox-group>
  34. </el-form-item>
  35. <el-form-item label="选择成员" v-if="boserForm.dirType === 2">
  36. </el-form-item>
  37. <CreateTasnsfer v-if="boserForm.dirType === 2" :checkUser="upFolderData?upFolderData.users:null" @setUsers="setUsers" :openTrans="openTrans"></CreateTasnsfer>
  38. </template>
  39. </template>
  40. </el-form>
  41. <template #footer>
  42. <span class="dialog-footer">
  43. <el-button @click="addBack">取消</el-button>
  44. <el-button v-if="upFolderData" type="primary" @click="sureUpBoser">
  45. 确认
  46. </el-button>
  47. <el-button v-else type="primary" @click="sureAddBoser">
  48. 确认
  49. </el-button>
  50. </span>
  51. </template>
  52. </el-dialog>
  53. </div>
  54. </div>
  55. </template>
  56. <script>
  57. import { ref, onMounted, toRef,toRaw,inject ,watch} from 'vue';
  58. import documents from '../../../api/document/document';
  59. import {listUser} from '../../../api/biz/user';
  60. import { getLevel } from '@/api/level/level.js';
  61. import { ElMessage } from 'element-plus';
  62. import { sm3 ,sm2} from "sm-crypto";
  63. import CreateTasnsfer from '../components/createTasnsfer.vue'
  64. export default {
  65. props: {
  66. folderCase: {
  67. type: Boolean,
  68. required: true
  69. },
  70. oneOrTwo: {
  71. type: Number,
  72. required: true
  73. },
  74. impDirId: {
  75. type: Number,
  76. required: true
  77. },
  78. impSpaceId: {
  79. type: Number,
  80. required: true
  81. },
  82. newDirId: {
  83. type: Number,
  84. required: true
  85. },
  86. newSpaceId: {
  87. type: Number,
  88. required: true
  89. },
  90. thisType: {
  91. type: String,
  92. required: true
  93. },
  94. thisFolderRole: {
  95. type: Object,
  96. required: true,
  97. default: ()=>{},
  98. },
  99. thisRole: {
  100. type: Object,
  101. // required: true,
  102. default: ()=>{},
  103. },
  104. upFolderData: {
  105. type: Object,
  106. // required: true,
  107. default: ()=>{},
  108. },
  109. refreshFile: Function,
  110. getFirstFolder: Function,
  111. },
  112. setup(props, { emit }) {
  113. const {
  114. proxy
  115. } = getCurrentInstance();
  116. const {
  117. dir_rules
  118. } = proxy.useDict('dir_rules');
  119. let { addBack, sureAddBoser, diClose } = toRef(props)
  120. const upFirstFolderData = inject("upFirstFolderData");
  121. let result = props.folderCase
  122. let free = props.oneOrTwo
  123. let spId = props.impSpaceId
  124. let drId = props.impDirId
  125. let newspid = props.newSpaceId
  126. let newdrid = props.newDirId
  127. let upFolderData = props.upFolderData
  128. const FolderRole =free?'': props.thisFolderRole
  129. const thisRole = free?'': props.thisRole
  130. const thisType = free?'': props.thisType
  131. const users = ref()
  132. const openTrans = ref(true)
  133. // console.log("FolderRole",FolderRole);
  134. // console.log("thisRole",thisRole);
  135. console.log("thisType",thisType);
  136. console.log("upFolderData",upFolderData);
  137. let addBoser = ref(false)
  138. let boserForm = ref({
  139. dirName: upFolderData?upFolderData.dirName:"",
  140. dirType:upFolderData?2:1,
  141. isEncrypt:upFolderData?upFolderData.isEncrypt:"Y",
  142. encryptLevel:upFolderData?upFolderData.encryptLevel:"L1",
  143. memberRoles:upFolderData?upFolderData.dirRole.split(','):[],
  144. users:upFolderData?upFolderData.users:[],
  145. accessCode:upFolderData?upFolderData.accessCode:''
  146. })
  147. const levelList = ref([])
  148. const needCode = ref(false) // 需要私有码
  149. function inital() {
  150. console.log(free, 'free');
  151. addBoser.value = result
  152. }
  153. function backTo() {
  154. addBoser.value = false
  155. emit("getChildrenC", addBoser.value)
  156. }
  157. function addFloder() {
  158. console.log('boserForm',boserForm.value);
  159. if (boserForm.value.dirName === '') {
  160. ElMessage({
  161. type: "error",
  162. message: "目录名称不能为空"
  163. })
  164. } else {
  165. if (free === 1) {
  166. if (boserForm.value.accessCode === '' && needCode.value) {
  167. ElMessage({
  168. type: "error",
  169. message: "私有访问码不能为空"
  170. })
  171. return
  172. }
  173. let query = {}
  174. if(boserForm.value.dirType === 2){ // 组织目录
  175. query = {
  176. "dirName": boserForm.value.dirName,
  177. "parentId": drId - 0,
  178. "spaceId": spId - 0,
  179. "dirType":thisType.dirType=='2'?'2':boserForm.value.dirType,
  180. "dirRole":boserForm.value.memberRoles.join(','),
  181. "users":boserForm.value.users,
  182. "isEncrypt":boserForm.value.isEncrypt,
  183. "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null,
  184. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  185. }
  186. }else{
  187. query = {
  188. "dirName": boserForm.value.dirName,
  189. "parentId": drId - 0,
  190. "spaceId": spId - 0,
  191. "dirType":thisType.dirType=='2'?'2':boserForm.value.dirType,
  192. }
  193. }
  194. documents.addDocument(
  195. query
  196. ).then(res => {
  197. if (res.code === 200) {
  198. ElMessage({
  199. message: '添加一级目录成功',
  200. type: 'success',
  201. })
  202. }
  203. addBoser.value = false
  204. emit("getChildrenC", addBoser.value)
  205. props.getFirstFolder()
  206. })
  207. } else {
  208. let query = {}
  209. if(FolderRole?.levelCode || thisRole.length ||thisType.dirType == "2"){
  210. //父级有权限自动继承 没有就用添加的值
  211. query={
  212. "dirName": boserForm.value.dirName,
  213. "parentId": newdrid - 0,
  214. "spaceId": newspid - 0,
  215. "dirType":2,
  216. "isEncrypt":"Y",
  217. "encryptLevel":FolderRole?.levelCode,
  218. "users":thisType.dirType === "1"?boserForm.value.users:users.value,
  219. "dirRole":thisRole.length?thisRole.join(','):'',
  220. "accessCode":FolderRole.accessCode
  221. }
  222. console.log('query',query);
  223. console.log('FolderRole',FolderRole);
  224. }else{
  225. if (boserForm.value.accessCode === '' && needCode.value) {
  226. ElMessage({
  227. type: "error",
  228. message: "私有访问码不能为空"
  229. })
  230. return
  231. }
  232. query={
  233. "dirName": boserForm.value.dirName,
  234. "parentId": newdrid - 0,
  235. "spaceId": newspid - 0,
  236. "dirType":boserForm.value.dirType,
  237. "isEncrypt":boserForm.value.isEncrypt,
  238. "encryptLevel":(boserForm.value.isEncrypt == "Y" && boserForm.value.dirType == "2")?boserForm.value.encryptLevel:null,
  239. "users":thisType.dirType === "1"?boserForm.value.users:users.value,
  240. "dirRole":thisType.dirType === "1"?boserForm.value.memberRoles.join(','):thisRole.join(','),
  241. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  242. }
  243. }
  244. console.log('free0query',query);
  245. documents.addDocument(
  246. query
  247. ).then(res => {
  248. if (res.code === 200) {
  249. ElMessage({
  250. message: '添加成功',
  251. type: 'success',
  252. })
  253. }
  254. addBoser.value = false
  255. emit("getChildrenC", addBoser.value)
  256. props.refreshFile()
  257. })
  258. }
  259. }
  260. }
  261. const sureUpBoser = ()=>{
  262. if (boserForm.value.dirName === '') {
  263. ElMessage({
  264. type: "error",
  265. message: "目录名称不能为空"
  266. })
  267. return
  268. }
  269. let query = {}
  270. if(free === 1){
  271. if (boserForm.value.accessCode === '' && needCode.value) {
  272. ElMessage({
  273. type: "error",
  274. message: "私有访问码不能为空"
  275. })
  276. return
  277. }
  278. query ={
  279. "dirName": boserForm.value.dirName,
  280. "parentId": drId - 0,
  281. "spaceId": spId - 0,
  282. 'dirId':upFolderData.dirId,
  283. "dirType":thisType.dirType=='2'?'2':boserForm.value.dirType,
  284. "dirRole":boserForm.value.memberRoles.join(','),
  285. "users":boserForm.value.users,
  286. "isEncrypt":boserForm.value.isEncrypt,
  287. "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null,
  288. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  289. }
  290. }else{
  291. query ={
  292. "dirName": boserForm.value.dirName,
  293. "parentId": newdrid - 0,
  294. "spaceId": newspid - 0,
  295. 'dirId':upFolderData.dirId,
  296. "dirType":thisType.dirType=='2'?'2':boserForm.value.dirType,
  297. "dirRole":boserForm.value.memberRoles.join(','),
  298. "users":boserForm.value.users,
  299. "isEncrypt":boserForm.value.isEncrypt,
  300. "encryptLevel":boserForm.value.isEncrypt == "Y"?boserForm.value.encryptLevel:null,
  301. "accessCode":boserForm.value.accessCode?sm3(boserForm.value.accessCode):''
  302. }
  303. }
  304. console.log('query',query);
  305. documents.editFolerDocument(
  306. query
  307. ).then(res => {
  308. if (res.code === 200) {
  309. ElMessage({
  310. message: '修改目录成功',
  311. type: 'success',
  312. })
  313. }
  314. addBoser.value = false
  315. upFirstFolderData(query)
  316. emit("getChildrenC", addBoser.value)
  317. props.refreshFile(null,true)
  318. })
  319. }
  320. const getLevelList = async ()=>{
  321. const res = await getLevel()
  322. if(res.rows){
  323. levelList.value = res.rows
  324. }
  325. // console.log(res);
  326. }
  327. const setUsers = (arr)=>{
  328. const oldArr = toRaw(arr)
  329. // boserForm.value.users = oldArr.map(item=>toRaw(item))
  330. const newArr = oldArr.map(item=>toRaw(item))
  331. boserForm.value.users = newArr.map(item=>{
  332. delete item['disabled']
  333. return item
  334. })
  335. // console.log('newArr',boserForm.value.users);
  336. }
  337. const getUser =async ()=>{
  338. const res = await listUser({dirId:thisType.dirId})
  339. // console.log('getUser',res);
  340. users.value = res.rows
  341. }
  342. //监听加密等级
  343. watch(() => boserForm.value.encryptLevel, (newValue, oldValue) => {
  344. const thisRole = levelList.value.find(item=>item.levelCode == newValue)
  345. // console.log('thisRole',thisRole);
  346. if(thisRole.roles.l0700){
  347. needCode.value = true
  348. }else{
  349. needCode.value = false
  350. }
  351. }, {
  352. deep: true
  353. });
  354. onMounted(() => {
  355. inital()
  356. getLevelList()
  357. if(thisType.dirType === "2"){
  358. getUser()
  359. }
  360. })
  361. return {
  362. addBoser,
  363. boserForm,
  364. inital,
  365. addBack: backTo,
  366. sureAddBoser: addFloder,
  367. diClose: backTo,
  368. spId,
  369. drId,
  370. newdrid,
  371. newspid,
  372. levelList,
  373. getLevelList,
  374. FolderRole,
  375. free,
  376. openTrans,
  377. setUsers,
  378. dir_rules,
  379. proxy,
  380. thisRole,
  381. thisType,
  382. getUser,
  383. users,
  384. sureUpBoser,
  385. upFirstFolderData,
  386. needCode
  387. }
  388. },
  389. components: {
  390. CreateTasnsfer,
  391. },
  392. }
  393. </script>
  394. <style lang="scss" scoped></style>