|
|
@@ -0,0 +1,437 @@
|
|
|
+<!DOCTYPE html>
|
|
|
+<html>
|
|
|
+<head>
|
|
|
+ <meta charset="utf-8" />
|
|
|
+ <meta name="keywords" content="dongke,mes,ibossmes">
|
|
|
+ <meta name="description" content="制造企业生产过程执行管理系统">
|
|
|
+ <meta name="author" content="xuwei">
|
|
|
+ <title>东科软件</title>
|
|
|
+ <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
|
|
|
+ <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
|
|
|
+ <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
|
|
|
+ <script type="text/javascript" src="/plugins/easyui/jquery.min.js"></script>
|
|
|
+ <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
|
|
|
+ <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
|
|
|
+ <link rel="shortcut icon" href="/img/logo.png" />
|
|
|
+ <link rel="bookmark" href="/img/logo.png" />
|
|
|
+ <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/dongke/easyui.css">
|
|
|
+ <link rel="stylesheet" type="text/css" href="/plugins/easyui/themes/icon.css">
|
|
|
+ <link rel="stylesheet" type="text/css" href="/plugins/xeasyui/xuwell.css">
|
|
|
+ <script type="text/javascript" src="/plugins/easyui/jquery.easyui.min.js"></script>
|
|
|
+ <script type="text/javascript" src="/plugins/easyui/locale/easyui-lang-zh_CN.js"></script>
|
|
|
+ <script type="text/javascript" src="/plugins/xeasyui/xuwell.js"></script>
|
|
|
+ <link href="/plugins/xeasyui/toolbar.min.css" rel="stylesheet" />
|
|
|
+ <link href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" rel="stylesheet">
|
|
|
+ <style>
|
|
|
+ .ddd {
|
|
|
+ padding-top: 10px;
|
|
|
+ margin: 0 20px;
|
|
|
+ font-size: 20px
|
|
|
+ }
|
|
|
+
|
|
|
+ .inp {
|
|
|
+ width: 100%;
|
|
|
+ height: 32px;
|
|
|
+ position: relative;
|
|
|
+ /* 设置边框样式,以便更容易看到圆角效果 */
|
|
|
+ border: 2px solid #ccc;
|
|
|
+ /* 设置圆角半径 */
|
|
|
+ border-radius: 10px; /* 你可以根据需要调整这个值 */
|
|
|
+ }
|
|
|
+
|
|
|
+ select {
|
|
|
+ width: 100%;
|
|
|
+ height: 32px;
|
|
|
+ position: relative;
|
|
|
+ background-color: #444;
|
|
|
+ color: #fff;
|
|
|
+ /* 设置边框样式,以便更容易看到圆角效果 */
|
|
|
+ border: 2px solid #ccc;
|
|
|
+ /* 设置圆角半径 */
|
|
|
+ border-radius: 10px; /* 你可以根据需要调整这个值 */
|
|
|
+ }
|
|
|
+
|
|
|
+ .bbb {
|
|
|
+ margin: 0 20px;
|
|
|
+ font-size: 20px;
|
|
|
+ width: 400px;
|
|
|
+ border: 0;
|
|
|
+ padding: 0 10px;
|
|
|
+ background-color: #666;
|
|
|
+ }
|
|
|
+
|
|
|
+ .top {
|
|
|
+ display: flex;
|
|
|
+ justify-content: space-between; /* 可选,用于在元素之间添加空间,但在这个例子中可能不是必需的 */
|
|
|
+ width: 100%; /* 确保 .top 容器占据其父容器的全部宽度 */
|
|
|
+ }
|
|
|
+ #editor—wrapper {
|
|
|
+ border: 1px solid #ccc;
|
|
|
+ z-index: 100; /* 按需定义 */
|
|
|
+ height:100%;
|
|
|
+ width:99%;
|
|
|
+ margin:auto;
|
|
|
+ }
|
|
|
+
|
|
|
+ #toolbar-container {
|
|
|
+ border-bottom: 1px solid #ccc;
|
|
|
+ }
|
|
|
+
|
|
|
+ #editor-container {
|
|
|
+ height: 450px;
|
|
|
+ }
|
|
|
+ </style>
|
|
|
+</head>
|
|
|
+<body class="easyui-layout">
|
|
|
+ <div id="toolbarLayout" data-options="border:false,region:'north',title:'',iconCls:'icon-grid'">
|
|
|
+ <div style="min-height: 100vh; ">
|
|
|
+ <div>
|
|
|
+ <div class="top">
|
|
|
+ <div class="ddd" style=" flex: 1;">
|
|
|
+ <span>产品名称:<input id="input_name" class="inp" type="text"></span>
|
|
|
+ </div>
|
|
|
+ <div class="ddd" style=" flex: 1;">
|
|
|
+ <span>产品型号:</span>
|
|
|
+ <select id="modelSelect">
|
|
|
+ <option disabled selected value="">请选择型号</option>
|
|
|
+ </select>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="ddd">
|
|
|
+ <span>参与人员:<input id="input_participants" class="inp" type="text"> </span>
|
|
|
+ </div>
|
|
|
+ <div class="ddd">
|
|
|
+ <span>解决方式:<input id="input_solution" class="inp" type="text"> </span>
|
|
|
+ </div>
|
|
|
+ <div class="ddd">
|
|
|
+ <span>解决效果:<input id="input_solutioneffect" class="inp" type="text"> </span>
|
|
|
+ </div>
|
|
|
+ <form enctype="multipart/form-data">
|
|
|
+ <div id="presetFileName" class="ddd">
|
|
|
+ <span id="filename"></span>
|
|
|
+ <button type="button" class="ddd" style="padding-top:0; " onclick="deletefile()">删除</button>
|
|
|
+ <button type="button" class="ddd" style="padding-top:0; " onclick="downfile()">下载已上传文件</button>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <div id="isopen" class="ddd">
|
|
|
+ 上传附件:
|
|
|
+ <input id="ff" type="file" style=" font-size: 20px" data-options="required:true,prompt:'',tipPosition:'bottom',buttonText:'选择文件',buttonAlign:'right',accept='*/*'">
|
|
|
+ <button type="button" class="ddd" style="padding-top:0; " onclick="submitForm()">导入</button>
|
|
|
+ <span style="color:red">上传附件后请点击导入按钮否则不会上传至服务器</span>
|
|
|
+ </div>
|
|
|
+ </form>
|
|
|
+ </div>
|
|
|
+ <div style=" padding-top:10px">
|
|
|
+ <span class="ddd">问题: </span>
|
|
|
+ <div id="editor—wrapper">
|
|
|
+ <div id="toolbar-container"><!-- 工具栏 --></div>
|
|
|
+ <div id="editor-container"><!-- 编辑器 --></div>
|
|
|
+ <div id="editor-text-area" class="editor-text-area"></div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="ddd" >
|
|
|
+ <button type="button" class="ddd" style="padding-top: 0; " onclick="add()">提交/修改</button>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script>
|
|
|
+ <script>
|
|
|
+ //加载前调用
|
|
|
+ $(document).ready(function () {
|
|
|
+ getproductmodel();
|
|
|
+ getQueryParam();
|
|
|
+ });
|
|
|
+ //创建富文本编辑器初始对象
|
|
|
+ const E = window.wangEditor
|
|
|
+ //语言切换(没用上 放着吧)
|
|
|
+ const LANG = location.href.indexOf('lang=en') > 0 ? 'en' : 'zh-CN'
|
|
|
+ E.i18nChangeLanguage(LANG)
|
|
|
+ //创建初始项
|
|
|
+ const editorConfig = {
|
|
|
+ //自定义配置项
|
|
|
+ MENU_CONF: {},
|
|
|
+ //将画布上的内容添加到对象中
|
|
|
+ onChange(editor) {
|
|
|
+ const html = editor.getHtml()
|
|
|
+ addsb.problem = html;
|
|
|
+ },
|
|
|
+ }
|
|
|
+ //上传图片
|
|
|
+ editorConfig.MENU_CONF['uploadImage'] = {
|
|
|
+ server: 'Richtext.ashx?m=0',
|
|
|
+ }
|
|
|
+ // 上传视频
|
|
|
+ editorConfig.MENU_CONF['uploadVideo'] = {
|
|
|
+ server: 'Richtext.ashx?m=0',
|
|
|
+ }
|
|
|
+ //画布初始化
|
|
|
+ const editor = E.createEditor({
|
|
|
+ selector: '#editor-container',
|
|
|
+ html: '<p><br></p>',
|
|
|
+ config: editorConfig,
|
|
|
+ mode: 'default',
|
|
|
+ })
|
|
|
+ //顶栏自定义
|
|
|
+ const toolbarConfig = {}
|
|
|
+ //顶栏配置项
|
|
|
+ const toolbar = E.createToolbar({
|
|
|
+ editor,
|
|
|
+ selector: '#toolbar-container',
|
|
|
+ config: toolbarConfig,
|
|
|
+ mode: 'default', // or 'simple'
|
|
|
+ })
|
|
|
+
|
|
|
+ // 响应式数据:产品型号列表
|
|
|
+ let models = [];
|
|
|
+ /** 加载型号到 select 元素中 */
|
|
|
+ const loadModelsToSelect=()=> {
|
|
|
+ const select = document.getElementById('modelSelect');
|
|
|
+ // 遍历模型数组并添加选项
|
|
|
+ models.forEach(model => {
|
|
|
+ const option = document.createElement('option');
|
|
|
+ option.value = model.ID;
|
|
|
+ option.textContent = model.GOODSCODE;
|
|
|
+ select.appendChild(option);
|
|
|
+ });
|
|
|
+ // 设置默认选中的型号
|
|
|
+ if (addsb.modelid) {
|
|
|
+ const selectedOption = select.querySelector(`option[value="${addsb.modelid}"]`);
|
|
|
+ if (selectedOption) {
|
|
|
+ selectedOption.selected = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 监听选择变化
|
|
|
+ select.addEventListener('change', function () {
|
|
|
+ // 更新 addsb.model
|
|
|
+ addsb.modelid = this.value;
|
|
|
+ addsb.modelname = models.find(ex => ex.ID == addsb.modelid).GOODSCODE;
|
|
|
+ });
|
|
|
+ };
|
|
|
+ //提交内容
|
|
|
+ const addsb = {
|
|
|
+ /**id*/
|
|
|
+ id: '',
|
|
|
+ /**项目名称*/
|
|
|
+ name: '',
|
|
|
+ /**产品型号id*/
|
|
|
+ modelid: '',
|
|
|
+ /**产品型号*/
|
|
|
+ modelname: '',
|
|
|
+ /**参与人员*/
|
|
|
+ participants: '',
|
|
|
+ /**问题*/
|
|
|
+ problem: '',
|
|
|
+ /**解决方式*/
|
|
|
+ solution: '',
|
|
|
+ /**解决效果*/
|
|
|
+ solutioneffect: '',
|
|
|
+ /**附件*/
|
|
|
+ annex: ''
|
|
|
+ };
|
|
|
+ /**监视输入框*/
|
|
|
+ $('#input_name, #input_participants,#input_solution,#input_solutioneffect').on('input', function () {
|
|
|
+ const key = this.id.replace('input_', '');;
|
|
|
+ addsb[key] = $(this).val();
|
|
|
+ });
|
|
|
+
|
|
|
+ /** 添加/修改按钮 */
|
|
|
+ const add = () => {
|
|
|
+ if (addsb.name == '') {
|
|
|
+ alert('请填写产品名称');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (addsb.model == '') {
|
|
|
+ alert('请填写产品型号');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $.ajax({
|
|
|
+ url: "Richtext.ashx?m=add",
|
|
|
+ type: "POST",
|
|
|
+ data: addsb,
|
|
|
+ //要传递json时
|
|
|
+ // contentType: "application/json; charset=utf-8",
|
|
|
+ // data: JSON.stringify(formData),
|
|
|
+ success: function (data) {
|
|
|
+ history.pushState(null, null, '?id=' + parseInt(data, 10));
|
|
|
+ getQueryParam();
|
|
|
+ },
|
|
|
+ error: function (xhr, status, error) {
|
|
|
+ console.error("请求失败: " + error);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ /** 上传附件 */
|
|
|
+ const submitForm = () => {
|
|
|
+ /**找到id为ff的文件上传框*/
|
|
|
+ var fileInput = document.getElementById('ff');
|
|
|
+ /**找到上传文件*/
|
|
|
+ var file = fileInput.files[0];
|
|
|
+ /**创建文件对象*/
|
|
|
+ var formData = new FormData();
|
|
|
+ formData.append('file', file);
|
|
|
+ /**创建连接*/
|
|
|
+ var xhr = new XMLHttpRequest();
|
|
|
+ xhr.open('POST', '/mes/pc/intelligence/Richtext.ashx?m=0', true);
|
|
|
+ /**发送文件*/
|
|
|
+ xhr.send(formData);
|
|
|
+ /**返回值赋值*/
|
|
|
+ xhr.onload = function () {
|
|
|
+ if (xhr.status === 200) {
|
|
|
+ try {
|
|
|
+ /**将JSON字符串解析为JavaScript对象 */
|
|
|
+ var responseData = JSON.parse(xhr.response);
|
|
|
+ /**检查errno是否为0,以确认请求成功 */
|
|
|
+ if (responseData.errno === 0) {
|
|
|
+ /**设置addsb.annex为响应中的url */
|
|
|
+ addsb.annex = responseData.data.url;
|
|
|
+ messager(true);
|
|
|
+ } else {
|
|
|
+ console.error('请求成功但发生错误', responseData.errno);
|
|
|
+ messager(false);
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.error('解析JSON失败', e);
|
|
|
+ messager(false);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.error('请求失败', xhr.status);
|
|
|
+ messager(false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
+ /**消息提示*/
|
|
|
+ const messager = (type) => {
|
|
|
+ $.messager.show({
|
|
|
+ title: type ? '上传成功' :"上传失败",
|
|
|
+ msg: type ?'文件成功上传至服务器':'文件上传服务器失败',
|
|
|
+ showType: 'slide',
|
|
|
+ style: {
|
|
|
+ right: '',
|
|
|
+ top: document.body.scrollTop + document.documentElement.scrollTop,
|
|
|
+ bottom: ''
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ /** 获取产品型号 */
|
|
|
+ const getproductmodel = () => {
|
|
|
+ $.get("Richtext.ashx?m=getproductmodel", function (data) {
|
|
|
+ var json = JSON.parse(data);
|
|
|
+ models = json;
|
|
|
+ loadModelsToSelect();
|
|
|
+ })
|
|
|
+ };
|
|
|
+ /** 获取当前记录 */
|
|
|
+ const getlibrary = async (libraryid) => {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ $.ajax({
|
|
|
+ url: "Richtext.ashx?m=get",
|
|
|
+ type: "POST",
|
|
|
+ data: { id: libraryid },
|
|
|
+ dataType: "json",
|
|
|
+ success: function (response) {
|
|
|
+ if (response && response.length > 0) {
|
|
|
+ const data = response[0];
|
|
|
+ addsb.id = data.id;
|
|
|
+ addsb.name = data.name;
|
|
|
+ addsb.modelid = data.modelid;
|
|
|
+ addsb.modelname = data.modelname;
|
|
|
+ addsb.participants = data.participants;
|
|
|
+ addsb.problem = data.problem;
|
|
|
+ addsb.solution = data.solution;
|
|
|
+ addsb.solutioneffect = data.solutioneffect;
|
|
|
+ addsb.annex = data.annex;
|
|
|
+ // 设置输入框的初始值
|
|
|
+ input_name.value = addsb.name;
|
|
|
+ input_participants.value = addsb.participants;
|
|
|
+ input_solution.value = addsb.solution;
|
|
|
+ input_solutioneffect.value = addsb.solutioneffect;
|
|
|
+ //异步完成标识
|
|
|
+ resolve();
|
|
|
+ } else {
|
|
|
+ reject(new Error("没有获取到有效的数据"));
|
|
|
+ }
|
|
|
+ },
|
|
|
+ error: function (xhr, status, error) {
|
|
|
+ reject(new Error("请求失败: " + error));
|
|
|
+ }
|
|
|
+ });
|
|
|
+ });
|
|
|
+ };
|
|
|
+ /**获取url内的id */
|
|
|
+ const getQueryParam = async () => {
|
|
|
+ let libraryIdFound = false;
|
|
|
+ let libraryPromise = null;
|
|
|
+ // 获取URL的查询字符串部分
|
|
|
+ var search = window.location.search.substring(1);
|
|
|
+ // 将查询字符串分割成键值对数组
|
|
|
+ var params = search.split("&");
|
|
|
+ for (var i = 0; i < params.length; i++) {
|
|
|
+ var val = params[i].split("=");
|
|
|
+ // 如果找到了匹配的参数名,则返回其值
|
|
|
+ if (val[0] == 'id') {
|
|
|
+ libraryIdFound = true;
|
|
|
+ libraryPromise = getlibrary(val[1]);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (libraryIdFound) {
|
|
|
+ // 等待getlibrary完成
|
|
|
+ await libraryPromise;
|
|
|
+ }
|
|
|
+ opendiv();
|
|
|
+ loadModelsToSelect();
|
|
|
+ };
|
|
|
+ /**删除按钮 */
|
|
|
+ const deletefile = () => {
|
|
|
+ //文件重新赋值
|
|
|
+ addsb.annex = '';
|
|
|
+ /**上传附件 */
|
|
|
+ let isopen = document.getElementById('isopen');
|
|
|
+ //展示
|
|
|
+ isopen.style.display = 'block';
|
|
|
+ /**显示附件 */
|
|
|
+ let presetFileName = document.getElementById('presetFileName');
|
|
|
+ // 隐藏文件输入字段
|
|
|
+ presetFileName.style.display = 'none';
|
|
|
+ //调用删除附件(只是删除数据库,物理路径并未删除)
|
|
|
+ $.ajax({
|
|
|
+ url: "Richtext.ashx?m=deletefile",
|
|
|
+ type: "POST",
|
|
|
+ data: { id: addsb.id },
|
|
|
+ })
|
|
|
+ };
|
|
|
+ /**下载附件 */
|
|
|
+ const downfile = () => {
|
|
|
+ var a = document.createElement("a");
|
|
|
+ a.href = addsb.annex;
|
|
|
+ a.download = addsb.annex.substr(addsb.annex.lastIndexOf('/') + 1);
|
|
|
+ document.body.appendChild(a);
|
|
|
+ a.click();
|
|
|
+ document.body.removeChild(a);
|
|
|
+ };
|
|
|
+ /**判断是否开启div*/
|
|
|
+ const opendiv = () => {
|
|
|
+ /**上传附件 */
|
|
|
+ let isopen = document.getElementById('isopen');
|
|
|
+ /**显示附件 */
|
|
|
+ let presetFileName = document.getElementById('presetFileName');
|
|
|
+ //判断上传文档是否开启
|
|
|
+ if (addsb.annex) {
|
|
|
+ // 隐藏
|
|
|
+ isopen.style.display = 'none';
|
|
|
+ let filename = document.getElementById('filename');
|
|
|
+ filename.innerHTML = '已上传文件: ' + addsb.annex.substr(addsb.annex.lastIndexOf('/') + 1);
|
|
|
+ presetFileName.style.display = 'block';
|
|
|
+ } else {
|
|
|
+ presetFileName.style.display = 'none';
|
|
|
+ isopen.style.display = 'block';
|
|
|
+ }
|
|
|
+ // 假设您已经有一个全局的编辑器实例变量 `editor`
|
|
|
+ if (editor && typeof editor.setHtml === 'function') {
|
|
|
+ // 设置编辑器的内容为从服务器返回的问题数据
|
|
|
+ editor.setHtml(addsb.problem);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ </script>
|
|
|
+</body>
|
|
|
+</html >
|